【问题标题】:Python/Scikit-learn - How to actually predict?Python/Scikit-learn - 如何实际预测?
【发布时间】:2016-04-03 18:08:47
【问题描述】:

我有以下 DataFrame,我称之为 main_frame:

               Value     Value      1lag      2lag      3lag      4lag 
Date                                                                     
2005-04-01  0.824427  0.892308  1.000000  0.000000  0.000000  0.000000   
2005-05-01  0.778626  0.953846  0.892308  1.000000  0.000000  0.000000   
2005-06-01  0.717557  1.000000  0.953846  0.892308  1.000000  0.000000   
2005-07-01  0.725191  0.000000  1.000000  0.953846  0.892308  1.000000   
2005-08-01  0.717557  1.000000  0.000000  1.000000  0.953846  0.892308   
2005-09-01  0.740458  0.861538  1.000000  0.000000  1.000000  0.953846   
2005-10-01  0.732824  0.877193  0.861538  1.000000  0.000000  1.000000   
2005-11-01  0.732824  1.000000  0.877193  0.861538  1.000000  0.000000   
2005-12-01  0.641221  1.000000  1.000000  0.877193  0.861538  1.000000   
2006-01-01  0.709924  0.614035  1.000000  1.000000  0.877193  0.861538   
2006-02-01  0.770992  0.649123  0.614035  1.000000  1.000000  0.877193   

我已经建立了以下模型:

predictor=main_frame.iloc[:,1:]
target=main_frame.iloc[:,0]

model=LinearRegression()
model.fit(X=predictor,y=target)

我知道要进行预测,我现在应该使用 model.predict(),但是我很难理解预测函数的参数是如何工作的。我正在尝试使用:

prediction=model.predict(target)
print predict

但这一直让我出错,我认为我误解了与论点相关的内容。

如何设置命令以使预测起作用?

编辑

我正在添加 Traceback

/Library/Python/2.7/site-packages/sklearn/utils/validation.py:386:     DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
DeprecationWarning)
Traceback (most recent call last):
File "/Users/file.py", line 61, in <module>
prediction=model.predict(target)
File "/Library/Python/2.7/site-packages/sklearn/linear_model/base.py", line 200, in predict
return self._decision_function(X)
File "/Library/Python/2.7/site-packages/sklearn/linear_model/base.py", line 185, in _decision_function
dense_output=True) + self.intercept_
File "/Library/Python/2.7/site-packages/sklearn/utils/extmath.py", line 184, in safe_sparse_dot
return fast_dot(a, b)
ValueError: shapes (1,127) and (144,) not aligned: 127 (dim 1) != 144 (dim 0)

编辑 2

试图用其他方式提出我的问题,以便更好地回答:

考虑到上述模型,我如何找出目标变量下一周期的预测值?

【问题讨论】:

  • 打印预测? (预测未定义)
  • 不要只说“错误”。始终在您的问题中包含完整的错误消息。
  • 您不应该根据来自 target 的数据进行预测,而是根据新样本(您之前称为 predictor)的数据进行预测

标签: python pandas scikit-learn


【解决方案1】:

您将错误的参数传递给 predict 函数。试试这个:

prediction=model.predict(predictor)
print prediction

请注意,模型已使用“预测器”变量进行了训练。因此,您只能预测具有与“预测器”变量完全相同的列数的数据。

【讨论】:

  • 谢谢。然而,预测给了我一个长数组,我想要的只是找出 n+1 周期的预测值。我怎样才能知道呢?
  • 您需要传入 n+1 周期的预测变量值。因此,您需要获取第二个 Value 列的列值,即 1lag、2lag、3lag 和 4lag 列。然后模型可以为您提供第一个 Value 列的预测值。因此,对于您示例中的数据,您应该使用除最后一行之外的所有行来训练模型(因此除 2006-02-01 期间之外的所有行)。然后你使用你的模型只预测最后一行。
  • 非常感谢,这是我在任何地方都找不到的缺失细节。所以我进入“预测”的那个长数组是考虑到拟合产生的回归的每个时期的预测值,对吧?
猜你喜欢
  • 2015-03-11
  • 2016-04-01
  • 2017-05-07
  • 2015-12-19
  • 2018-01-09
  • 2018-08-12
  • 2017-09-18
  • 2013-05-31
  • 2016-10-29
相关资源
最近更新 更多