public void RunTest()
{
var dataset = SequentialMinimalOptimizationTest.yinyang;
double[][] inputs = dataset.Submatrix(null, 0, 1).ToJagged();
int[] labels = dataset.GetColumn(2).ToInt32();
Accord.Math.Random.Generator.Seed = 0;
var svm = new SupportVectorMachine(inputs: 2);
var teacher = new ProbabilisticDualCoordinateDescent(svm, inputs, labels);
teacher.Tolerance = 1e-10;
teacher.UseComplexityHeuristic = true;
Assert.IsFalse(svm.IsProbabilistic);
double error = teacher.Run();
Assert.IsTrue(svm.IsProbabilistic);
double[] weights = svm.ToWeights();
Assert.AreEqual(0.13, error);
Assert.AreEqual(3, weights.Length);
Assert.AreEqual(-0.52913278486359605, weights[0], 1e-4);
Assert.AreEqual(-1.6426069611746976, weights[1], 1e-4);
Assert.AreEqual(-0.77766953652287762, weights[2], 1e-4);
Assert.AreEqual(svm.Threshold, weights[0]);
}