private Solve ( int l, |
||
l | int | |
Q | ||
b_ | double | |
y_ | sbyte | |
alpha_ | double | |
Cp | double | |
Cn | double | |
eps | double | |
si | SolutionInfo | |
shrinking | int | |
return | void |
private static void solve_one_class(svm_problem prob, svm_parameter param, double[] alpha, Solver.SolutionInfo si) { int l = prob.l; var zeros = new double[l]; var ones = new sbyte[l]; int i; //UPGRADE_WARNING: Data types in Visual C# might be different. Verify the accuracy of narrowing conversions. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1042_3"' var n = (int) (param.nu*prob.l); // # of alpha's at upper bound for (i = 0; i < n; i++) alpha[i] = 1; alpha[n] = param.nu*prob.l - n; for (i = n + 1; i < l; i++) alpha[i] = 0; for (i = 0; i < l; i++) { zeros[i] = 0; ones[i] = 1; } var s = new Solver(); s.Solve(l, new ONE_CLASS_Q(prob, param), zeros, ones, alpha, 1.0, 1.0, param.eps, si, param.shrinking); }
private static void solve_epsilon_svr(svm_problem prob, svm_parameter param, double[] alpha, Solver.SolutionInfo si) { int l = prob.l; var alpha2 = new double[2*l]; var linear_term = new double[2*l]; var y = new sbyte[2*l]; int i; for (i = 0; i < l; i++) { alpha2[i] = 0; linear_term[i] = param.p - prob.y[i]; y[i] = 1; alpha2[i + l] = 0; linear_term[i + l] = param.p + prob.y[i]; y[i + l] = - 1; } var s = new Solver(); s.Solve(2*l, new SVR_Q(prob, param), linear_term, y, alpha2, param.C, param.C, param.eps, si, param.shrinking); double sum_alpha = 0; for (i = 0; i < l; i++) { alpha[i] = alpha2[i] - alpha2[i + l]; sum_alpha += Math.Abs(alpha[i]); } Console.Out.Write("nu = " + sum_alpha/(param.C*l) + "\n"); }
// // construct and solve various formulations // private static void solve_c_svc(svm_problem prob, svm_parameter param, double[] alpha, Solver.SolutionInfo si, double Cp, double Cn) { int l = prob.l; var minus_ones = new double[l]; var y = new sbyte[l]; int i; for (i = 0; i < l; i++) { alpha[i] = 0; minus_ones[i] = - 1; if (prob.y[i] > 0) y[i] = (+ 1); else y[i] = - 1; } var s = new Solver(); s.Solve(l, new SVC_Q(prob, param, y), minus_ones, y, alpha, Cp, Cn, param.eps, si, param.shrinking); double sum_alpha = 0; for (i = 0; i < l; i++) sum_alpha += alpha[i]; if (Cp == Cn) Console.Out.Write("nu = " + sum_alpha/(Cp*prob.l) + "\n"); for (i = 0; i < l; i++) alpha[i] *= y[i]; }