Я использую 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)