Ticket #2057: SVM-parameter-tuning.patch
File SVM-parameter-tuning.patch, 9.0 KB (added by gkronber, 10 years ago) |
---|
-
HeuristicLab.Algorithms.DataAnalysis-3.4.csproj
262 262 <Compile Include="RandomForest\RandomForestRegression.cs" /> 263 263 <Compile Include="RandomForest\RandomForestRegressionSolution.cs" /> 264 264 <Compile Include="RandomForest\RandomForestUtil.cs" /> 265 <Compile Include="SupportVectorMachine\SupportVectorParameterTuningEvaluator.cs" /> 266 <Compile Include="SupportVectorMachine\SupportVectorParameterTuningProblem.cs" /> 265 267 <Compile Include="SupportVectorMachine\SupportVectorClassification.cs" /> 266 268 <Compile Include="SupportVectorMachine\SupportVectorClassificationSolution.cs" /> 267 269 <Compile Include="SupportVectorMachine\SupportVectorMachineModel.cs" /> -
SupportVectorMachine/SupportVectorMachineUtil.cs
143 143 var trainingRows = folds.SelectMany((par, j) => j != p ? par : Enumerable.Empty<int>()); 144 144 var testRows = folds[i]; 145 145 var trainingSvmProblem = CreateSvmProblem(problemData.Dataset, targetVariable, problemData.AllowedInputVariables, trainingRows); 146 var testSvmProblem = CreateSvmProblem(problemData.Dataset, targetVariable, problemData.AllowedInputVariables, testRows); 147 partitions[i] = new Tuple<svm_problem, svm_problem>(trainingSvmProblem, testSvmProblem); 146 var rangeTransform = RangeTransform.Compute(trainingSvmProblem); 147 var testSvmProblem = rangeTransform.Scale(CreateSvmProblem(problemData.Dataset, targetVariable, problemData.AllowedInputVariables, testRows)); 148 partitions[i] = new Tuple<svm_problem, svm_problem>(rangeTransform.Scale(trainingSvmProblem), testSvmProblem); 148 149 } 149 150 return partitions; 150 151 } -
SupportVectorMachine/SupportVectorParameterTuningEvaluator.cs
1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 23 using HeuristicLab.Common; 24 using HeuristicLab.Core; 25 using HeuristicLab.Data; 26 using HeuristicLab.Encodings.RealVectorEncoding; 27 using HeuristicLab.Operators; 28 using HeuristicLab.Optimization; 29 using HeuristicLab.Parameters; 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 using HeuristicLab.Problems.DataAnalysis; 32 using LibSVM; 33 34 namespace HeuristicLab.Algorithms.DataAnalysis { 35 [Item("SupportVectorParameterTuningEvaluator", "")] 36 [StorableClass] 37 public class SupportVectorParameterTuningEvaluator : InstrumentedOperator, ISingleObjectiveEvaluator { 38 public ILookupParameter<DoubleValue> QualityParameter { 39 get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; } 40 } 41 42 [StorableConstructor] 43 protected SupportVectorParameterTuningEvaluator(bool deserializing) : base(deserializing) { } 44 protected SupportVectorParameterTuningEvaluator(SupportVectorParameterTuningEvaluator original, Cloner cloner) : base(original, cloner) { } 45 46 public SupportVectorParameterTuningEvaluator() 47 : base() { 48 Parameters.Add(new LookupParameter<RealVector>("Point")); 49 Parameters.Add(new LookupParameter<IRegressionProblemData>("ProblemData")); 50 Parameters.Add(new LookupParameter<DoubleValue>("Quality")); 51 } 52 53 public override IDeepCloneable Clone(Cloner cloner) { 54 return new SupportVectorParameterTuningEvaluator(this, cloner); 55 } 56 57 public override IOperation InstrumentedApply() { 58 var problemData = (IRegressionProblemData)Parameters["ProblemData"].ActualValue; 59 var p = (RealVector)Parameters["Point"].ActualValue; 60 var parameters = new svm_parameter { 61 C = Math.Exp(p[0]), 62 gamma = Math.Exp(p[1]), 63 p = Math.Exp(p[2]), 64 eps = 0.001, 65 svm_type = svm_parameter.EPSILON_SVR, 66 kernel_type = svm_parameter.RBF 67 }; 68 69 var cvLoss = SupportVectorMachineUtil.CrossValidate(problemData, parameters, 5, false); 70 QualityParameter.ActualValue = new DoubleValue(cvLoss); 71 return base.InstrumentedApply(); 72 } 73 74 } 75 } -
SupportVectorMachine/SupportVectorParameterTuningProblem.cs
1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 23 using System.Collections.Generic; 24 using System.Linq; 25 using HeuristicLab.Analysis; 26 using HeuristicLab.Common; 27 using HeuristicLab.Core; 28 using HeuristicLab.Data; 29 using HeuristicLab.Encodings.RealVectorEncoding; 30 using HeuristicLab.Optimization; 31 using HeuristicLab.Parameters; 32 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 33 using HeuristicLab.PluginInfrastructure; 34 using HeuristicLab.Problems.DataAnalysis; 35 using HeuristicLab.Problems.Instances; 36 37 namespace HeuristicLab.Algorithms.DataAnalysis { 38 [Item("SVM Parameter Tuning Problem", "")] 39 [StorableClass] 40 [Creatable("Problems")] 41 public sealed class SupportVectorParameterTuningProblem : SingleObjectiveHeuristicOptimizationProblem<ISingleObjectiveEvaluator, IRealVectorCreator>, IStorableContent { 42 public string Filename { get; set; } 43 44 45 [StorableConstructor] 46 private SupportVectorParameterTuningProblem(bool deserializing) : base(deserializing) { } 47 private SupportVectorParameterTuningProblem(SupportVectorParameterTuningProblem original, Cloner cloner) 48 : base(original, cloner) { 49 RegisterEventHandlers(); 50 } 51 public SupportVectorParameterTuningProblem() 52 : base(new SupportVectorParameterTuningEvaluator(), new UniformRandomRealVectorCreator()) { 53 Parameters.Add(new ValueParameter<RegressionProblemData>("ProblemData", "")); 54 Parameters.Add(new ValueParameter<IntValue>("Length", "", new IntValue(3))); 55 var bounds = new DoubleMatrix(new double[,] 56 { 57 {-7,7}, 58 {-7,7}, 59 {-7,7} 60 }); 61 Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "", bounds)); 62 SolutionCreator.RealVectorParameter.ActualName = "Point"; 63 64 Parameters["Length"].Hidden = true; 65 Parameters["Bounds"].Hidden = true; 66 67 InitializeOperators(); 68 RegisterEventHandlers(); 69 } 70 71 public override IDeepCloneable Clone(Cloner cloner) { 72 return new SupportVectorParameterTuningProblem(this, cloner); 73 } 74 75 #region Events 76 #endregion 77 78 #region Helpers 79 [StorableHook(HookType.AfterDeserialization)] 80 private void AfterDeserialization() { 81 RegisterEventHandlers(); 82 } 83 84 private void RegisterEventHandlers() { 85 } 86 87 private void InitializeOperators() { 88 Operators.AddRange(ApplicationManager.Manager.GetInstances<IRealVectorOperator>().Cast<IOperator>()); 89 } 90 91 #endregion 92 93 } 94 }