public void ConstructorTest()
{
double[][] inputs =
{
new double[] { 10, 42 },
new double[] { 162, 96 },
new double[] { 125, 20 },
new double[] { 96, 6 },
new double[] { 2, 73 },
new double[] { 52, 51 },
new double[] { 71, 49 },
};
int[] outputs =
{
-1, -1, +1, +1, -1, -1, +1
};
var classifier = new Boost<DecisionStump>();
var teacher = new AdaBoost<DecisionStump>(classifier)
{
Creation = (weights) =>
{
var stump = new DecisionStump(2);
stump.Learn(inputs, outputs, weights);
return stump;
},
Iterations = 5,
Tolerance = 1e-3
};
double error = teacher.Run(inputs, outputs);
Assert.AreEqual(0, error);
Assert.AreEqual(5, classifier.Models.Count);
Assert.AreEqual(0.16684734250395147, classifier.Models[0].Weight);
Assert.AreEqual(0.22329026900109736, classifier.Models[1].Weight);
Assert.AreEqual(0.28350372170582383, classifier.Models[2].Weight);
Assert.AreEqual(0.16684734250395139, classifier.Models[3].Weight);
Assert.AreEqual(0.15951132428517592, classifier.Models[4].Weight);
int[] actual = new int[outputs.Length];
for (int i = 0; i < actual.Length; i++)
actual[i] = classifier.Compute(inputs[i]);
for (int i = 0; i < actual.Length; i++)
Assert.AreEqual(outputs[i], actual[i]);
}