public void learn2()
{
// Test instance 01
double[][] trainInput =
{
new double[] { 1, 1 },
new double[] { 0, 0 },
};
double[] trainOutput = { 1, 0 };
double[] testInput = { 0, 0.2 };
var target = new LogisticRegressionAnalysis();
target.Regularization = 1e-10;
var regression = target.Learn(trainInput, trainOutput);
Assert.AreSame(regression, target.Regression);
double[] coef = target.Coefficients.Apply(x => x.Value);
Assert.AreEqual(coef[0], -19.360661491141897, 1e-6);
Assert.AreEqual(coef[1], 19.702873967721807, 1e-6);
Assert.AreEqual(coef[2], 19.702873967721807, 1e-6);
double output = target.Regression.Score(testInput);
Assert.AreEqual(0, output, 1e-6);
// Test instance 02
trainInput = new double[][]
{
new double[] { 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 },
new double[] { 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },
new double[] { 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 },
new double[] { 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 },
new double[] { 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },
new double[] { 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 },
};
trainOutput = new double[6] { 1, 1, 0, 0, 1, 1 };
target = new LogisticRegressionAnalysis();
regression = target.Learn(trainInput, trainOutput);
double[] actual = regression.Score(trainInput);
double[] expected = { 0.500000000158903, 0.999999998410966, 0.500000000913694, 0.500000000158903, 0.999999998410966, 0.500000000913694 };
Assert.IsTrue(actual.IsEqual(expected, 1e-6));
coef = target.Coefficients.Apply(x => x.Value);
//string str = coef.ToCSharp();
expected = new double[] { 1.86680346470929, -3.87720719574071, 2.44120453079343, -0.574401066088034, 5.16960959435804, 2.44120453079343, -3.87720719574087, 5.16960959435804, 2.44120453079343, -3.87720719574087, 2.44120453079343 };
Assert.IsTrue(coef.IsEqual(expected, 1e-6));
}