我什至无法理解为什么即使在参数变化很大的情况下我也能得到相同的常数线拟合
我的代码-
data_set = np.reshape([d[len(d)-2] for d in data_vector], (len(data_vector), 1));
plt.scatter(data_set, Y[:,0], c='k', label='data');
#train the regression model
C_Array = [1, 1e2, 1e3, 1e-2, 1e-3, 1e4, 1e-4];
colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k'];
ind = 0;
for c in C_Array:
svr_rbf = SVR(kernel="rbf", C=c, gamma=0.001);
plt.hold('on');
y1_predictor = svr_rbf.fit(data_set, Y[:, 0]);
y2_predictor = svr_rbf.fit(data_set, Y[:, 1]);
sys.stdout.write(".");
my_prediction = y1_predictor.predict(data_set)
plt.plot(data_set, my_prediction, c=colors[ind], label='RBF model')
ind = ind + 1;
plt.show();
输出-
最佳答案
在安装SVR之前先缩放数据(当前在X轴上的值为200-1000,在Y轴上的值为-400-400),否则可能需要非常大的gamma / C值才能获得任何合理的结果。而这正是正在发生的事情,因为如此巨大的价值1e4是使SVR学到任何东西的小方法。此外,对于这样的水垢,很容易发生下溢/上溢。您正在使用形式为exp(-g | x-y | ^ 2)的RBF内核,因此如果| x-y |是〜400(在您的数据中就是这种情况),则得到exp(-0.001 * 160000),其数值为零。
关于machine-learning - scikit学习svm始终提供恒定的线条拟合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35524881/