Free cookie consent management tool by TermsFeed Policy Generator

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

     
    262262    <Compile Include="RandomForest\RandomForestRegression.cs" />
    263263    <Compile Include="RandomForest\RandomForestRegressionSolution.cs" />
    264264    <Compile Include="RandomForest\RandomForestUtil.cs" />
     265    <Compile Include="SupportVectorMachine\SupportVectorParameterTuningEvaluator.cs" />
     266    <Compile Include="SupportVectorMachine\SupportVectorParameterTuningProblem.cs" />
    265267    <Compile Include="SupportVectorMachine\SupportVectorClassification.cs" />
    266268    <Compile Include="SupportVectorMachine\SupportVectorClassificationSolution.cs" />
    267269    <Compile Include="SupportVectorMachine\SupportVectorMachineModel.cs" />
  • SupportVectorMachine/SupportVectorMachineUtil.cs

     
    143143        var trainingRows = folds.SelectMany((par, j) => j != p ? par : Enumerable.Empty<int>());
    144144        var testRows = folds[i];
    145145        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);
    148149      }
    149150      return partitions;
    150151    }
  • 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
     22using System;
     23using HeuristicLab.Common;
     24using HeuristicLab.Core;
     25using HeuristicLab.Data;
     26using HeuristicLab.Encodings.RealVectorEncoding;
     27using HeuristicLab.Operators;
     28using HeuristicLab.Optimization;
     29using HeuristicLab.Parameters;
     30using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     31using HeuristicLab.Problems.DataAnalysis;
     32using LibSVM;
     33
     34namespace 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
     22using System;
     23using System.Collections.Generic;
     24using System.Linq;
     25using HeuristicLab.Analysis;
     26using HeuristicLab.Common;
     27using HeuristicLab.Core;
     28using HeuristicLab.Data;
     29using HeuristicLab.Encodings.RealVectorEncoding;
     30using HeuristicLab.Optimization;
     31using HeuristicLab.Parameters;
     32using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     33using HeuristicLab.PluginInfrastructure;
     34using HeuristicLab.Problems.DataAnalysis;
     35using HeuristicLab.Problems.Instances;
     36
     37namespace 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}