升维转换后
不升维计算也能和上面一样
import numpy as np
from sklearn.svm import SVR
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3 # y = 1 * x0 + 2 * x1 + 3
model = SVR()
fit(X,y)
model.fit(X,y)
predict(X_test)
model.predict(X)
import numpy as np
from sklearn.svm import SVR
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3
model = SVR()
model.fit(X,y)
model.predict(X)
array([7.44500403, 8.09999999, 8.90000001, 9.55499597])
运行结果与理论值有误差,可见其精度不如上篇博客的代码,因为未对模型进行调参(直接预先设定,反复调整使模型达到一个最优的状态)
为什么要调参
在绝大多数的非线性模型中(包括一些特殊的线性模型,比如ridge regression),还有一部分参数是无法通过训练直接获取的
基于此,我们的
w是可以通过训练算出的参数;h表示超参数(一个或多个)
这里我们常用高斯核作为它的核函数,同时将核参数设为1,惩罚系数设为100。
import numpy as np
from sklearn.svm import SVR
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
# y = 1 * x_0 + 2 * x_1 + 3
y = np.dot(X, np.array([1, 2])) + 3
model = SVR(kernel='rbf',gamma= 1, C = 100)
model.fit(X,y)
model.predict(X)
array([ 6.1 , 7.93810802, 9.06189198, 10.9 ])
可以看到这样模型的精度就有了明显的提升。如果我们事先知道模型的超参数,那么可以很容易得出较好的预测结果。但如果不知道的话,就需要进行调参。当然调参的方式有很多种,后面的教程我们再详细讨论。
sklearn快速入门教程:(三)机器学习的通用模式及实现方法_半个冯博士的博客-CSDN博客
的最下面的表格