【问题标题】:Regression with a list of currencies使用货币列表进行回归
【发布时间】:2020-02-25 15:15:38
【问题描述】:

我正在使用 sklearn 来预测货币价值。我有一个数据框,其中 38 列是不同货币的汇率,2761 行是每日观察。当我使用基本的线性回归时,一切都很好(我认为)。但是,当我尝试使用 GradientBoostingRegressor 时,无论我尝试什么,都无法获得有效的形状。

这里发生了什么?为什么一个正常而另一个坏了?这几天我一直在摸不着头脑。

from sklearn.linear_model import LinearRegression
n = 1

X = rates[:-n]
y = rates[n:]

reg = LinearRegression().fit(X,y)

^^^ 这个预测很好。

from sklearn.ensemble import GradientBoostingRegressor
n = 1

X = rates[:-n]
y = rates[n:]

reg = GradientBoostingRegressor(loss="lad").fit(X,y)

^^^ 这个有“坏形状”。形状相同:(2761, 38)。

供参考:

rates.tail()
Out[2]: 
               AUD     BDT     BND     BRL  ...     THB     USD     VND     ZAR
2019-10-21  1054.5  18.109  1126.9  373.00  ...  50.692  1533.7  6.6086  103.81
2019-10-22  1053.6  18.127  1127.1  371.89  ...  50.645  1535.3  6.6170  104.43
2019-10-23  1050.3  18.126  1126.3  376.28  ...  50.658  1535.2  6.6154  104.67
2019-10-24  1047.5  18.107  1125.3  380.14  ...  50.672  1533.6  6.6092  104.93
2019-10-25  1046.1  18.080  1123.6  379.01  ...  50.734  1531.4  6.6007  104.54

[5 rows x 38 columns]
reg = GradientBoostingRegressor(loss="lad").fit(X,y)
Traceback (most recent call last):

  File "<ipython-input-4-21ee59fafac1>", line 1, in <module>
    reg = GradientBoostingRegressor(loss="lad").fit(X,y)

  File "/home/s/.local/lib/python3.6/site-packages/sklearn/ensemble/gradient_boosting.py", line 1450, in fit
    y = column_or_1d(y, warn=True)

  File "/home/s/.local/lib/python3.6/site-packages/sklearn/utils/validation.py", line 760, in column_or_1d
    raise ValueError("bad input shape {0}".format(shape))

ValueError: bad input shape (2671, 38)

【问题讨论】:

  • 您能提供确切的错误信息吗?你确定你的 X 和 y 是一样的吗?我不熟悉 sklearn 中的 GradientBoostingRegressor,但在快速浏览文档后,看不出它不能像任何估算器一样工作的明显原因。
  • 您的rates 究竟是什么?给我一张rates
  • 谢谢你们...我同意应该没有区别!我真的很惊讶。我的最终目标是生成这些带有间隔的预测,这样用户就不会将数字视为法律。

标签: python scikit-learn statistics regression prediction


【解决方案1】:

我你的目标是多维的?如果没有,我想你是想写

X = rates[:-n]
y = rates[-n:]

而不是

X = rates[:-n]
y = rates[n:]

【讨论】:

  • 在第一个中,您说“我的特征是除最后一个之外的所有列,但目标是最后一个”。在第二个中,您是在说“我的特征是除最后一个之外的所有列,而我的目标是从第一个开始的所有列”。
  • 你设置了n=1,所以在做y = rates[n:]时,你声明目标(y)是rates的所有列1(的值n) 直到结束。您要做的是将最后一列 (-1) 设置为您的目标。
猜你喜欢
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2011-03-17
  • 2017-11-20
  • 1970-01-01
  • 2020-04-10
  • 2017-07-02
相关资源
最近更新 更多