public void ComputeTest1()
{
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,
};
IKernel kernel = new Polynomial(2);
var msvm = new MulticlassSupportVectorMachine(5, kernel, 4);
var smo = new MulticlassSupportVectorLearning(msvm, inputs, outputs);
smo.Algorithm = (svm, classInputs, classOutputs, i, j) =>
new SequentialMinimalOptimization(svm, classInputs, classOutputs)
{
Complexity = 1
};
msvm.ParallelOptions.MaxDegreeOfParallelism = 1;
smo.ParallelOptions.MaxDegreeOfParallelism = 1;
Assert.AreEqual(0, msvm.GetLastKernelEvaluations());
double error = smo.Run();
// Assert.AreEqual(6, msvm.GetLastKernelEvaluations());
int[] evals = new int[inputs.Length];
int[] evalexp = { 8, 8, 7, 7, 7, 7, 6, 6 };
for (int i = 0; i < inputs.Length; i++)
{
double expected = outputs[i];
double actual = msvm.Compute(inputs[i], MulticlassComputeMethod.Elimination);
Assert.AreEqual(expected, actual);
evals[i] = msvm.GetLastKernelEvaluations();
}
for (int i = 0; i < evals.Length; i++)
Assert.AreEqual(evals[i], evalexp[i]);
for (int i = 0; i < inputs.Length; i++)
{
double expected = outputs[i];
double actual = msvm.Compute(inputs[i], MulticlassComputeMethod.Voting);
Assert.AreEqual(expected, actual);
evals[i] = msvm.GetLastKernelEvaluations();
}
for (int i = 0; i < evals.Length; i++)
Assert.AreEqual(msvm.SupportVectorUniqueCount, evals[i], 1);
}