如何在 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 图的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中修复“IndexError:元组索引超出范围”?
如何修复特征联合和管道中的元组对象错误(使用 sklearn 时)?
如何修复 (ModuleNotFoundError: No module named 'sklearn'.) spyder 中的错误
如何修复 sklearn fit_transform 上的“X.toarray() 以转换为密集的 numpy 数组”错误?