construct and solve various formulations
| 1638 | // construct and solve various formulations |
| 1639 | // |
| 1640 | static void |
| 1641 | solve_c_svc(const svm_problem* prob, |
| 1642 | const svm_parameter* param, |
| 1643 | double* alpha, |
| 1644 | Solver::SolutionInfo* si, |
| 1645 | double Cp, |
| 1646 | double Cn) |
| 1647 | { |
| 1648 | int l = prob->l; |
| 1649 | double* minus_ones = new double[l]; |
| 1650 | schar* y = new schar[l]; |
| 1651 | |
| 1652 | for (int i = 0; i < l; i++) { |
| 1653 | alpha[i] = 0; |
| 1654 | minus_ones[i] = -1; |
| 1655 | |
| 1656 | if (prob->y[i] > 0) |
| 1657 | y[i] = +1; |
| 1658 | else |
| 1659 | y[i] = -1; |
| 1660 | } |
| 1661 | |
| 1662 | Solver s; |
| 1663 | |
| 1664 | s.Solve(l, |
| 1665 | SVC_Q(*prob, *param, y), |
| 1666 | minus_ones, |
| 1667 | y, |
| 1668 | alpha, |
| 1669 | Cp, |
| 1670 | Cn, |
| 1671 | param->eps, |
| 1672 | si, |
| 1673 | param->shrinking); |
| 1674 | |
| 1675 | double sum_alpha = 0; |
| 1676 | |
| 1677 | for (int i = 0; i < l; i++) |
| 1678 | sum_alpha += alpha[i]; |
| 1679 | |
| 1680 | if (Cp == Cn) |
| 1681 | info("nu = %f\n", sum_alpha / (Cp * prob->l)); |
| 1682 | |
| 1683 | for (int i = 0; i < l; i++) |
| 1684 | alpha[i] *= y[i]; |
| 1685 | |
| 1686 | delete[] minus_ones; |
| 1687 | |
| 1688 | delete[] y; |
| 1689 | } |
| 1690 | |
| 1691 | static void |
| 1692 | solve_nu_svc(const svm_problem* prob, |
no test coverage detected