【发布时间】:2018-03-05 00:20:47
【问题描述】:
我正在尝试制作一个小程序,该程序将绘制具有最佳拟合线的图形,并根据输入的 SIZE 值预测 COST 值。
老是报这个错误,不知道是什么意思:
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
No handles with labels found to put in legend.
这是我得到的图表(红色),我认为这条曲线应该看起来像我绘制的绿色曲线。
最后,程序仅在我退出图表时进行预测。 我究竟做错了什么? 这是代码:
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
size=[[1],[2],[3],[4],[5],[7],[9],[10],[11],[13]]
cost=[[10],[22],[35],[48],[60],[80],[92],[111],[118],[133]]
def predict(size,cost,x):
dates=np.reshape(size,(len(size),1))
svr_poly=SVR(kernel="poly",C=1e3, degree=2)
svr_poly.fit(size,cost)
plt.scatter(size,cost, color="blue")
plt.plot(cost, svr_poly.predict(cost), color="red")
plt.xlabel("Size")
plt.ylabel("Cost")
plt.title("prediction")
plt.legend()
plt.show()
predictedcost=predict(size,cost,7)
print(predictedcost)
【问题讨论】:
-
这不是错误,只是警告。您当前的
y(成本)的形状是(10,1),应该是(10,)。这可以通过在拟合之前使用cost = np.array(cost).ravel()来实现。 -
好的,非常感谢。那线呢。我没有合适的身材?线应该看起来像绿线,而不是像红线,对吧?另外,我应该怎么做才能立即获得预测值,而不是在我退出图表时?
-
你能解释更多吗?我也无法得到像你这样的情节
-
看起来您可能在这里使用了错误的工具来完成这项工作,我认为多项式内核和多项式特征之间可能存在一些混淆。我建议阅读this tutorial
-
我读过这个,但我不明白代码。我认为我的代码与您发送给我的链接上的代码之间存在很大差异。您可能知道如何解决我遇到的问题吗?我做了同样的程序,但我使用了线性回归,它工作得很好,但我使用了不同的工具。问题是,我不知道如何使用我用于线性回归的工具进行多项式回归。 (pastebin.com/tkNn6C7T)
标签: python matplotlib scikit-learn