【问题标题】:Problem predicting test values with python sklearn使用 python sklearn 预测测试值的问题
【发布时间】: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


【解决方案1】:

修复 Y_train

Y_train=Y[0:int(0.8*len(X))]

【讨论】:

  • 我改变了它,但仍然有一个错误的近似值。现在曲线看起来像一个指数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2018-01-01
  • 2015-09-14
  • 1970-01-01
  • 2014-04-03
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多