【发布时间】:2019-04-06 21:44:32
【问题描述】:
我做了一个代码来预测 Y 值,X 和 Y 是相同长度的数组
from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
plt.scatter(X,Y,1)
regr2 = make_pipeline(PolynomialFeatures(10), Ridge())
regr2 =regr2.fit(X[:,np.newaxis], Y)
y_pred=regr2.predict(X[:,np.newaxis])
plt.plot(X, y_pred, color='red')
plt.show()
它有效,并且是一个很好的近似值 但是当我用测试值和训练值来做它时,当我绘制它时它会显示一个指数,这是不应该做的。
实际上 y_pred1 是 X_test 加上一个小十进制数
plt.scatter(X_test,Y_test,1)
X_train=X[0:int(0.8*len(X))]
X_test=X[int(0.8*len(X)):]
Y_train=Y[0:int(0.8*len(X))]
Y_test=Y[int(0.8*len(X)):]
regr3 = make_pipeline(PolynomialFeatures(10), Ridge())
regr3 =regr3.fit(X_train[:,np.newaxis], Y_train)
y_pred1=regr3.predict(X_test[:,np.newaxis])
plt.plot(X_test, y_pred1, color='red')
plt.show()
我尝试了几件事,甚至用训练值测试了预测,在这种情况下,它也绘制了指数而不是点的近似值。
提前致谢!
【问题讨论】:
-
plt.plot()是一个线图函数。你想要plt.scatter()吗? -
您是否有理由尝试手动进行训练/测试拆分而不是使用 sklearn 的
train_test_split()?您的方法(除了@Qudus 指出的写错之外)不会进行任何随机选择,如果您的数组尚未随机化,这将是一个问题 -
使用 plot 是一个错误,但替换它并没有解决问题。我这样做是因为我想及时预测一些事情,所以我需要将前 80% 作为训练值,将后 20% 作为测试值。为什么会有问题?
-
我现在明白了,我不知道这是一个时间序列问题。如果不是时间序列,那将不是拆分训练测试集的好方法,这就是我提到它的原因。鉴于此,时间序列可能会很棘手,因为它往往会按照您所说的那样做,并一直朝某个方向进行推断。您可以使用time series split 进行交叉验证以获得更好的估算器,或者尝试不同的模型
-
Here 是关于在 pandas 和 scikit 中做时间序列的讨论
标签: python scikit-learn