【问题标题】:scikit learn svm always gives constant line fitscikit learn svm 总是给出恒定的线拟合
【发布时间】:2016-06-02 04:21:41
【问题描述】:

我无法理解为什么即使在显着改变参数后我得到相同的恒定线拟合

我的代码 -

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();    

输出 -

【问题讨论】:

    标签: machine-learning scikit-learn regression svm


    【解决方案1】:

    在拟合 SVR 之前缩放您的数据(目前您在 X 轴上有 200-1000 的值,在 Y 轴上有 -400 - 400 的值),否则您可能需要非常大的 gamma/C 值才能获得任何合理的结果。而这正是正在发生的事情,因为如此巨大的值 1e4 太小了,无法让 SVR 学习任何东西。此外,对于这样的规模,很容易使浮动不足/溢出。您正在使用形式为 exp(-g|x-y|^2) 的 RBF 内核,因此如果 |x-y|是〜400(这是您数据中的一种情况),然后您会得到 exp(-0.001 * 160000) ,其数值为零。

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2016-02-05
      • 2014-04-05
      • 2017-04-25
      • 2016-05-15
      • 2017-04-17
      • 2014-09-16
      • 2013-12-19
      • 2013-04-21
      相关资源
      最近更新 更多