Changeset 8742 for branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs
- Timestamp:
- 10/05/12 11:58:17 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs
r8430 r8742 30 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 31 using HeuristicLab.Problems.DataAnalysis; 32 using LibSVM; 32 33 33 34 namespace HeuristicLab.Algorithms.DataAnalysis { … … 45 46 private const string GammaParameterName = "Gamma"; 46 47 private const string EpsilonParameterName = "Epsilon"; 48 private const string DegreeParameterName = "Degree"; 47 49 48 50 #region parameter properties … … 64 66 public IValueParameter<DoubleValue> EpsilonParameter { 65 67 get { return (IValueParameter<DoubleValue>)Parameters[EpsilonParameterName]; } 68 } 69 public IValueParameter<IntValue> DegreeParameter { 70 get { return (IValueParameter<IntValue>)Parameters[DegreeParameterName]; } 66 71 } 67 72 #endregion … … 86 91 public DoubleValue Epsilon { 87 92 get { return EpsilonParameter.Value; } 93 } 94 public IntValue Degree { 95 get { return DegreeParameter.Value; } 88 96 } 89 97 #endregion … … 111 119 Parameters.Add(new ValueParameter<DoubleValue>(GammaParameterName, "The value of the gamma parameter in the kernel function.", new DoubleValue(1.0))); 112 120 Parameters.Add(new ValueParameter<DoubleValue>(EpsilonParameterName, "The value of the epsilon parameter for epsilon-SVR.", new DoubleValue(0.1))); 121 Parameters.Add(new ValueParameter<IntValue>(DegreeParameterName, "The degree parameter for the polynomial kernel function.", new IntValue(3))); 113 122 } 114 123 [StorableHook(HookType.AfterDeserialization)] 115 private void AfterDeserialization() { } 124 private void AfterDeserialization() { 125 #region backwards compatibility (change with 3.4) 126 if (!Parameters.ContainsKey(DegreeParameterName)) 127 Parameters.Add(new ValueParameter<IntValue>(DegreeParameterName, "The degree parameter for the polynomial kernel function.", new IntValue(3))); 128 #endregion 129 } 116 130 117 131 public override IDeepCloneable Clone(Cloner cloner) { … … 126 140 int nSv; 127 141 var solution = CreateSupportVectorRegressionSolution(problemData, selectedInputVariables, SvmType.Value, 128 KernelType.Value, Cost.Value, Nu.Value, Gamma.Value, Epsilon.Value, 142 KernelType.Value, Cost.Value, Nu.Value, Gamma.Value, Epsilon.Value, Degree.Value, 129 143 out trainR2, out testR2, out nSv); 130 144 … … 136 150 137 151 public static SupportVectorRegressionSolution CreateSupportVectorRegressionSolution(IRegressionProblemData problemData, IEnumerable<string> allowedInputVariables, 138 string svmType, string kernelType, double cost, double nu, double gamma, double epsilon, 152 string svmType, string kernelType, double cost, double nu, double gamma, double epsilon, int degree, 139 153 out double trainingR2, out double testR2, out int nSv) { 140 154 Dataset dataset = problemData.Dataset; … … 143 157 144 158 //extract SVM parameters from scope and set them 145 SVM.Parameter parameter = new SVM.Parameter();146 parameter. SvmType = (SVM.SvmType)Enum.Parse(typeof(SVM.SvmType), svmType, true);147 parameter. KernelType = (SVM.KernelType)Enum.Parse(typeof(SVM.KernelType), kernelType, true);159 svm_parameter parameter = new svm_parameter(); 160 parameter.svm_type = GetSvmType(svmType); 161 parameter.kernel_type = GetKernelType(kernelType); 148 162 parameter.C = cost; 149 parameter.Nu = nu; 150 parameter.Gamma = gamma; 151 parameter.P = epsilon; 152 parameter.CacheSize = 500; 153 parameter.Probability = false; 154 155 156 SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(dataset, targetVariable, allowedInputVariables, rows); 157 SVM.RangeTransform rangeTransform = SVM.RangeTransform.Compute(problem); 158 SVM.Problem scaledProblem = SVM.Scaling.Scale(rangeTransform, problem); 159 var svmModel = SVM.Training.Train(scaledProblem, parameter); 160 nSv = svmModel.SupportVectorCount; 163 parameter.nu = nu; 164 parameter.gamma = gamma; 165 parameter.p = epsilon; 166 parameter.cache_size = 500; 167 parameter.probability = 0; 168 parameter.eps = 0.001; 169 parameter.degree = degree; 170 parameter.shrinking = 1; 171 parameter.coef0 = 0; 172 173 174 175 svm_problem problem = SupportVectorMachineUtil.CreateSvmProblem(dataset, targetVariable, allowedInputVariables, rows); 176 RangeTransform rangeTransform = RangeTransform.Compute(problem); 177 svm_problem scaledProblem = rangeTransform.Scale(problem); 178 var svmModel = svm.svm_train(scaledProblem, parameter); 179 nSv = svmModel.SV.Length; 161 180 var model = new SupportVectorMachineModel(svmModel, rangeTransform, targetVariable, allowedInputVariables); 162 181 var solution = new SupportVectorRegressionSolution(model, (IRegressionProblemData)problemData.Clone()); … … 165 184 return solution; 166 185 } 186 187 private static int GetSvmType(string svmType) { 188 if (svmType == "NU_SVR") return svm_parameter.NU_SVR; 189 if (svmType == "EPSILON_SVR") return svm_parameter.EPSILON_SVR; 190 throw new ArgumentException("Unknown SVM type"); 191 } 192 193 private static int GetKernelType(string kernelType) { 194 if (kernelType == "LINEAR") return svm_parameter.LINEAR; 195 if (kernelType == "POLY") return svm_parameter.POLY; 196 if (kernelType == "SIGMOID") return svm_parameter.SIGMOID; 197 if (kernelType == "RBF") return svm_parameter.RBF; 198 throw new ArgumentException("Unknown kernel type"); 199 } 167 200 #endregion 168 201 }
Note: See TracChangeset
for help on using the changeset viewer.