Полиномиальная регрессия опорных векторов в Accord.Net

Я пытаюсь изучить фреймворк (Accord), но документация часто содержит неработающие фрагменты кода.
Я хотел что-то похожее на этот< /а>.

Я пробовал разные вещи, и ничего не работало. Есть ли у кого-нибудь работающий пример регрессии нелинейного опорного вектора?
Я также попробовал
официальный пример, который тоже не работает.


person Makis Mandrelas    schedule 05.06.2017    source источник
comment
Примечание: примеры и документация были окончательно обновлены.   -  person Cesar    schedule 08.07.2017


Ответы (1)


Документация все еще составляется после того, как проект принял новый унифицированный 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);
person Cesar    schedule 08.07.2017
comment
Идеальный ответ и очень хорошо задокументирован и объяснен. Я искренне не могу отблагодарить вас достаточно! Продолжайте хорошую работу! - person Makis Mandrelas; 08.07.2017