Matrix ComputeThetaRegularized(Matrix x, Matrix y, Matrix theta, double lambda, int n) { var z = x * theta; var h = MatrixUtils.Sigmoid(z); var l = MatrixUtils.Identity(n).Set(0, 0, 0); var gradient = x.Transpose() * (h - y) + (lambda * l * theta); var hessian = new Matrix(x.ColumnCount, x.ColumnCount); for (int i = 0; i < x.RowCount; i++) { hessian += h[i, 0] * (1 - h[i, 0]) * x.GetRow(i) * x.GetRow(i).Transpose(); } hessian += hessian + (lambda * l); var solver = new SolveEquationByGauss(); var dTheta = solver.Compute(new SolveEquationByGaussParameter { A = hessian, b = -1 * gradient, EPSILON = 10e-12 }); return(dTheta + theta); }
Matrix ComputeTetha(Matrix x, Matrix y, Matrix theta) { var z = x * theta; var h = MatrixUtils.Sigmoid(z); var gradient = x.Transpose() * (h - y); var hessian = new Matrix(x.ColumnCount, x.ColumnCount); for (int i = 0; i < x.RowCount; i++) { hessian += h[i, 0] * (1 - h[i, 0]) * x.GetRow(i) * x.GetRow(i).Transpose(); } var solver = new SolveEquationByGauss(); var dTheta = solver.Compute(new SolveEquationByGaussParameter { A = hessian, b = -1 * gradient, EPSILON = 10e-12 }); return(dTheta + theta); }