【问题标题】:How to fix SVR plot in Python sklearn如何在 Python sklearn 中修复 SVR 图
【发布时间】:2018-09-21 12:08:08
【问题描述】:

我正在尝试将 SVR 模型拟合到我的数据集并使用 Python 中的 Sklearn 查看绘图。

from sklearn.svm import SVR
#Load Data
X_train_Occ = pd.DataFrame(X_train['occupancy'])
Y_train_Occ = Y_train
#Rescale
sc_X = StandardScaler()
sc_Y = StandardScaler()
X_train_Occ_scaled = sc_X.fit_transform(X_train_Occ)
Y_train_Occ_scaled = sc_Y.fit_transform(Y_train_Occ.reshape(-1, 1))

regressor = SVR(kernel ='rbf')
regressor.fit(X_train_Occ_scaled, Y_train_Occ_scaled)

我将数据加载到 X 和 Y 数据帧中并对其进行缩放。 见下图:

然后我得到以下输出:

SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto', kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)

然后我尝试用这个来展示回归的结果:

plt.scatter(X_train_Occ_scaled, Y_train_Occ_scaled, color = 'red')
plt.plot(X_train_Occ_scaled, regressor.predict(X_train_Occ_scaled), color = 'blue')
plt.title('Occupancy vs Flow (SVR)')
plt.xlabel('Occupancy')
plt.ylabel('Flow')
plt.show()

这给出了以下情节:

模型是否过度拟合数据?还是代码有问题?

我正在关注这里的代码: http://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html

我正在尝试绘制最适合模型的线,而不是每个点的线。

【问题讨论】:

  • 你期待什么样的情节?您看到的是使用 plt.plot() 输入不符合假设时得到的结果。阅读 matplotlib 的文档,了解绘图的真正作用(它在您的输入中绘制邻居之间的线条;基本上)。也许你想要plt.scatter() 或其他东西。建议:删除一个标签(例如非线性 reg)并将其替换为 matplotlib(此问题中更重要的标签之一)。
  • 谢谢我更新了我的问题。 @sascha
  • (超短查看参考代码:)您的代码失败而被引用的原因是它们的 x 已排序。阅读 matplotlib 的绘图功能后,这一切都会变得非常清晰和简单!使用 numpy 的 argsort 对 x 和 y 进行并行排序并再次绘图。

标签: python matplotlib machine-learning scikit-learn svm


【解决方案1】:

如前所述,解决方案是先按自变量对数据进行排序,然后将数据拟合到模型并预测结果。

【讨论】:

  • 你是如何对数据进行排序的?我有同样的问题
【解决方案2】:

不要使用plt.plot,因为所有数据都是随机排序的。使用plt.scatter 或将数据从最小值到最大值排序

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 2020-12-11
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2021-08-21
    • 2013-10-06
    相关资源
    最近更新 更多