Accord.Net 中的多项式支持向量回归

Polynomial Support Vector Regression in Accord.Net

我正在尝试学习该框架 (Accord),但文档中经常带有损坏的代码片段。
我想要类似于 .

的东西

我尝试了不同的方法,但似乎没有任何效果。有人有有效的非线性支持向量回归示例吗?
我也尝试了 the official example,但似乎也不起作用。

项目采用新的统一学习 API 后,文档仍在整理中,该学习现在对所有机器学习模型都通用。昨天刚更新了大部分内容,但可能还有一些地方需要注意。

回答您的原始问题,您可以在下面找到多项式 SV 回归的示例。假设我们有二维输入向量,我们想学习从这些向量到单个标量值的映射。

// Declare a very simple regression problem 
// with only 2 input variables (x and y):
double[][] inputs =
{
    new[] { 3.0, 1.0 },
    new[] { 7.0, 1.0 },
    new[] { 3.0, 1.0 },
    new[] { 3.0, 2.0 },
    new[] { 6.0, 1.0 },
};

double[] outputs =
{
    65.3,
    94.9,
    65.3,
    66.4,
    87.5,
};

为了示例,我们将机器复杂性参数设置为非常高的值,迫使学习算法找到难以泛化的解决方案。在实际问题中训练时,将属性 UseKernelEstimation 和 UseComplexityHeuristic 设置为 true 或执行网格搜索以找到它们的最佳参数:

// Create a LibSVM-based support vector regression algorithm
var teacher = new FanChenLinSupportVectorRegression<Polynomial>()
{
    Tolerance = 1e-5,
    // UseKernelEstimation = true, 
    // UseComplexityHeuristic = true
    Complexity = 10000,
    Kernel = new Polynomial(degree: 1) // you can change the degree
};

现在,在我们创建了学习算法之后,我们可以使用它从数据中训练 SVM 模型:

// Use the algorithm to learn the machine
var svm = teacher.Learn(inputs, outputs);

最后我们可以获得机器对输入集的答案,并且我们可以检查机器预测的值与预期的真实值相比有多好:

// Get machine's predictions for inputs
double[] prediction = svm.Score(inputs);

// Compute the error in the prediction (should be 0.0)
double error = new SquareLoss(outputs).Loss(prediction);