在 Scikit 中查找混合次数多项式学习支持向量回归

Posted

技术标签:

【中文标题】在 Scikit 中查找混合次数多项式学习支持向量回归【英文标题】:Finding mixed degree polynomials in Scikit learn support vector regression 【发布时间】:2018-03-16 21:43:42 【问题描述】:

据我了解,Scikit learn 中的支持向量回归采用整数表示度数。但是,在我看来,似乎没有考虑低次多项式。

运行以下示例:

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 值出现随机误差)。

似乎没有考虑低阶项。我试图为degree 参数传递一个列表[1, 2],但随后predict 命令出现错误。有什么办法可以包含它们?我错过了什么明显的东西吗?

【问题讨论】:

你把惩罚C设置为1000,它基本上惩罚了任何有效的参数。尝试将其设置为 1 或更少 它有帮助,但它不能解决我的一般问题,在多大程度上考虑了低阶项。 这条评论stats.stackexchange.com/questions/152610/… 非常有用,但是我无法从中推断出是否包含低阶术语 【参考方案1】:

我认为低阶多项式项包含在拟合模型中,但在图中不可见,因为 Cepsilon 参数不太适合数据。通常可以通过使用GridSearchCV 微调参数来获得更好的拟合。由于在这种情况下数据未居中,coef0 参数也有显着影响。

以下参数应该更适合数据:

svr_poly = SVR(kernel='poly', degree=2, C=100, epsilon=0.0001, coef0=5)

【讨论】:

谢谢!我认为对于“简单”模型,超参数不会那么重要。我会接受答案,因为它引导我举一个更清楚地表明它们被包括在内的例子。我也会提供它作为答案。【参考方案2】:

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)

绘制这个给出

Result of the different SVR algorithms with two models using order 3 but different hyperparameters and one model using order 5

【讨论】:

以上是关于在 Scikit 中查找混合次数多项式学习支持向量回归的主要内容,如果未能解决你的问题,请参考以下文章

[机器学习与scikit-learn-36]:算法-分类-支持向量机-多项式预处理升维实现线性不可分分类的代码示例

哪个更快?逻辑回归或线性核支持向量机?

Scikit 学习支持向量机的多类分类

机器学习算法,机器让我学习

机器学习二十三:scikit-learn 支持向量机算法库总结

《机器学习实战:基于Scikit-LearnKeras和TensorFlow第2版》-学习笔记:支持向量机