public void multiclass_new_usage_method_polynomial()
{
double[][] inputs =
{
new double[] { 1, 4, 2, 0, 1 },
new double[] { 1, 3, 2, 0, 1 },
new double[] { 3, 0, 1, 1, 1 },
new double[] { 3, 0, 1, 0, 1 },
new double[] { 0, 5, 5, 5, 5 },
new double[] { 1, 5, 5, 5, 5 },
new double[] { 1, 0, 0, 0, 0 },
new double[] { 1, 0, 0, 0, 0 },
};
int[] outputs =
{
0, 0,
1, 1,
2, 2,
3, 3,
};
var learner = new MulticlassSupportVectorLearning<Polynomial>()
{
Learner = (p) => new SequentialMinimalOptimization<Polynomial>()
{
Model = p.Model,
Complexity = 1,
Kernel = new Polynomial(2)
}
};
learner.ParallelOptions.MaxDegreeOfParallelism = 1;
MulticlassSupportVectorMachine<Polynomial> msvm = learner.Learn(inputs, outputs);
Assert.AreEqual(0, msvm.GetLastKernelEvaluations());
int[] evals = { 8, 8, 7, 7, 7, 7, 6, 6 };
for (int i = 0; i < inputs.Length; i++)
{
double expected = outputs[i];
msvm.Method = MulticlassComputeMethod.Elimination;
double actual = msvm.Decide(inputs[i]);
Assert.AreEqual(expected, actual);
Assert.AreEqual(evals[i], msvm.GetLastKernelEvaluations());
}
for (int i = 0; i < inputs.Length; i++)
{
double expected = outputs[i];
msvm.Method = MulticlassComputeMethod.Voting;
double actual = msvm.Decide(inputs[i]);
Assert.AreEqual(expected, actual);
Assert.AreEqual(8, msvm.GetLastKernelEvaluations());
}
}