如何在 Python sklearn 中修复 SVR 图

Posted

技术标签:

【中文标题】如何在 Python sklearn 中修复 SVR 图【英文标题】:How to fix SVR plot in Python sklearn 【发布时间】: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 进行并行排序并再次绘图。 【参考方案1】:

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

【讨论】:

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

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

【讨论】:

以上是关于如何在 Python sklearn 中修复 SVR 图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sklearn 中修复这个自定义转换器?

如何在python中修复“IndexError:元组索引超出范围”?

如何修复特征联合和管道中的元组对象错误(使用 sklearn 时)?

如何修复 (ModuleNotFoundError: No module named 'sklearn'.) spyder 中的错误

如何修复 sklearn fit_transform 上的“X.toarray() 以转换为密集的 numpy 数组”错误?

修复我的脚本中的浮动错误(需要帮助)Python