Нахождение полиномов смешанной степени в Scikit изучает регрессию опорных векторов

насколько я понимаю, поддержка векторной регрессии в обучении Scikit принимает целое число для степени. Однако мне кажется, что полиномы более низких степеней не рассматриваются.

Выполнение следующего примера:

import numpy
from sklearn.svm import SVR
X = np.sort(5 * np.random.rand(40, 1), axis=0)
Y=(2*X-.75*X**2).ravel()
Y[::5] += 3 * (0.5 - np.random.rand(8))
svr_poly = SVR(kernel='poly', C=1e3, degree=2)
y_poly = svr_poly.fit(X, Y).predict(X)

(скопировано и немного изменено отсюда http://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html)

График данных дает довольно плохое соответствие (даже при пропуске строки 5, где для значений Y задана случайная ошибка).

Похоже, члены более низкого порядка не учитываются. Я попытался передать список [1, 2] для параметра degree, но затем получил ошибку для команды predict. Есть ли способ включить их? Я пропустил что-то очевидное?


person Eulenfuchswiesel    schedule 05.10.2017    source источник
comment
Вы устанавливаете штраф C равным 1000, он в основном наказывает любые эффективные параметры. Попробуйте установить его на 1 или меньше   -  person chrisckwong821    schedule 05.10.2017
comment
Это помогает, но не решает мой общий вопрос, в какой степени учитываются члены более низкого порядка.   -  person Eulenfuchswiesel    schedule 05.10.2017
comment
Этот комментарий stats.stackexchange.com/questions/152610/ очень полезен, однако я не могу сделать из него вывод, включены ли термины более низкого порядка или нет   -  person Eulenfuchswiesel    schedule 05.10.2017


Ответы (2)


Я думаю, что члены полинома более низкого порядка включены в подобранную модель, но не видны на графике, поскольку параметры C и epsilon плохо подходят для данных. Обычно можно добиться лучшего соответствия путем точной настройки параметров с помощью GridSearchCV. Поскольку в этом случае данные не центрированы, параметр coef0 также оказывает существенное влияние.

Следующие параметры должны дать лучшее соответствие данным:

svr_poly = SVR(kernel='poly', degree=2, C=100, epsilon=0.0001, coef0=5)
person σηγ    schedule 05.10.2017
comment
Спасибо! Я думал, что для простой модели гиперпараметры не будут такими важными. Я приму ответ, поскольку он приведет меня к примеру, который более четко показывает, что они включены. Я также предоставлю его в качестве ответа. - person Eulenfuchswiesel; 06.10.2017

scikit-learn.SVR запускает полином более низкого порядка. Модификация исходного примера ясно показывает это.

X = np.sort(2*np.random.rand(40,1)-1,axis=0)
Y = np.sin(6*X).ravel()
svr_poly1 = SVR(kernel='poly', C=1e3, degree=3)
y_poly1 = svr_poly1.fit(X, Y).predict(X)
svr_poly2 = SVR(kernel='poly', C=100, epsilon=0.0001, coef0=5, degree=3)
y_poly2 = svr_poly2.fit(X, Y).predict(X)
svr_poly3 = SVR(kernel='poly', C=100, epsilon=0.0001, coef0=5, degree=5)
y_poly3 = svr_poly3.fit(X, Y).predict(X)

Построение этого дает

Результат различных алгоритмов SVR с двумя моделями, использующими порядок 3, но с разными гиперпараметрами, и одной моделью, использующей порядок 5< /а>

person Eulenfuchswiesel    schedule 06.10.2017