多类SVM示例

时间:2017-12-07 16:36:22

标签: c# machine-learning svm accord.net

我试图了解这个Page

中的第一个示例代码
double[][] inputs =
{
//               input         output
new double[] { 0, 1, 1, 0 }, //  0 
new double[] { 0, 1, 0, 0 }, //  0
new double[] { 0, 0, 1, 0 }, //  0
new double[] { 0, 1, 1, 0 }, //  0
new double[] { 0, 1, 0, 0 }, //  0
new double[] { 1, 0, 0, 0 }, //  1
new double[] { 1, 0, 0, 0 }, //  1
new double[] { 1, 0, 0, 1 }, //  1
new double[] { 0, 0, 0, 1 }, //  1
new double[] { 0, 0, 0, 1 }, //  1
new double[] { 1, 1, 1, 1 }, //  2
new double[] { 1, 0, 1, 1 }, //  2
new double[] { 1, 1, 0, 1 }, //  2
new double[] { 0, 1, 1, 1 }, //  2
new double[] { 1, 1, 1, 1 }, //  2
};

int[] outputs = // those are the class labels
{
0, 0, 0, 0, 0,
1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
};

var teacher = new MulticlassSupportVectorLearning<Linear>()
{
// using LIBLINEAR's L2-loss SVC dual for each SVM
  Learner = (p) => new LinearDualCoordinateDescent()
  {
    Loss = Loss.L2
  }
};
teacher.ParallelOptions.MaxDegreeOfParallelism = 1;
var machine = teacher.Learn(inputs, outputs);
int[] predicted = machine.Decide(inputs);
double error = new ZeroOneLoss(outputs).Loss(predicted);

到目前为止,我认为如果我错了,我理解这段代码如何解决问题。 它有一些随机数据input,一些标记类为output。通过这些inputoutputMultiClass SVM使用inputs的{​​{1}}标记outputs

到目前为止,当我尝试将不同的数据作为input时,我感到很困惑。 我尝试使用0和1

的不同组合更改数据集

例如,我将第一行{0,1,1,0}更改为{1,1,1,1},我在predicted array中为该行获得值1为什么会发生这种情况?不应该是predicted array中该行的值等于0?因为output array的前5个值为0?

0 个答案:

没有答案