public void Train() { int datasetSize = _dataMgr.count; int dimension = _dataMgr.inputNum; Node[][] inputs = new Node[datasetSize][]; double[] labels = new double[datasetSize]; int i = 0; int j = 0; for (i = 0; i < datasetSize; i++) { int index = i; // _rnd.Next(datasetSize - 1); inputs[i] = new Node[dimension]; double[] input = _dataMgr.GetInputData(index); for (j = 0; j < dimension; j++) { inputs[i][j] = new Node(); inputs[i][j].Index = j; inputs[i][j].Value = input[j]; } if (_dataMgr.GetLabelData(index) < 0.5) { labels[i] = -1; } else { labels[i] = 1; } } Problem problem = new Problem(datasetSize, labels, inputs, dimension); //RangeTransform range = RangeTransform.Compute(problem); //problem = range.Scale(problem); Parameter param = new Parameter(); param.C = 2; param.Gamma = .5; //param.KernelType = KernelType.RBF; //param.SvmType = SvmType.C_SVC; _model = new Model(); _model.Parameter = param; bool[] nonzero = new bool[datasetSize]; double[] alpha = new double[problem.Count]; int l = problem.Count; double[] Minus_ones = new double[l]; sbyte[] y = new sbyte[l]; for (i = 0; i < l; i++) { alpha[i] = 0; Minus_ones[i] = -1; if (problem.Y[i] > 0) { y[i] = +1; } else { y[i] = -1; } } Solver s = new Solver(); Solver.SolutionInfo si = new Solver.SolutionInfo(); s.Solve(l, new SVC_Q(problem, param, y), Minus_ones, y, alpha, param.C, param.C, param.EPS, si, param.Shrinking); double sum_alpha = 0; for (i = 0; i < l; i++) { sum_alpha += alpha[i]; } for (i = 0; i < l; i++) { alpha[i] *= y[i]; } Procedures.decision_function f = new Procedures.decision_function(); f.alpha = alpha; f.rho = si.rho; // build output _model.NumberOfClasses = 2; _model.ClassLabels = new int[2]; _model.ClassLabels[0] = 1; _model.ClassLabels[1] = -1; _model.Rho = new double[1]; _model.Rho[0] = f.rho; _model.NumberOfSVPerClass = new int[2]; int posCnt = 0, negCnt = 0; for (i = 0; i < datasetSize; i++) { if (labels[i] > 0) { posCnt++; } else { negCnt++; } } _model.NumberOfSVPerClass[0] = posCnt; _model.NumberOfSVPerClass[1] = negCnt; _model.SupportVectorCount = datasetSize; _model.SupportVectors = new Node[datasetSize][]; _model.SupportVectorCoefficients = new double[1][]; _model.SupportVectorCoefficients[0] = new double[datasetSize]; int p = 0; for (i = 0; i < datasetSize; i++) { _model.SupportVectors[p++] = inputs[i]; _model.SupportVectorCoefficients[0][i] = f.alpha[i]; } //_model = Training.Train(problem, param); }