首页 > 解决方案 > 梯度提升 - 基于月份的价格预测

问题描述

我想要达到的目标。

我想根据下面数据集中所有合约月份的其他参数来预测“NG Open”列下的天然气价格。我正在使用 XG Boosting 算法,不知何故,在输出中我只能看到预测的 25 个值,并且无法解释它们将适用于哪个合约月份。我使用 KFold Validation 来保证安全,而不是 train_test_split

  Contracts     NG Open  NGHigh  NGLow   NGLast    NGVolumes   

  2018-12-01    3.907   4.384   3.907   4.272       0 
  2019-01-01    3.917   4.408   3.917   4.291       264295  
  2019-02-01    3.800   4.267   3.785   4.148       155303          
  2019-03-01    3.515   4.007   3.496   3.865       51299       
  2019-04-01    2.735   2.829   2.704   2.793       73226           
  2019-05-01    2.632   2.691   2.602   2.667       54540       
  2019-06-01    2.638   2.719   2.634   2.692       34269   

代码。

  import pandas as pd
  from sklearn.ensemble import GradientBoostingRegressor 
  from sklearn.model_selection import KFold
  from sklearn.model_selection import cross_val_score

  dataset = pd.read_excel("C:\Futures\Futures.xls")
  dataset['Contracts'] = dataset['Contracts'].str.rstrip('(E)')
  dataset['Contracts'] = pd.to_datetime(dataset['Contracts'])
  dataset  = dataset.set_index('Contracts')
  dataset1 = dataset.values

  X = dataset1[:,0:5]
  y = dataset1[:,0]

  gbrt=GradientBoostingRegressor(n_estimators=100) 
  kfold = KFold(n_splits=10, random_state=7, shuffle = True)
  results = cross_val_score(gbrt, X, y, cv=kfold)
  print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

 gbrt.fit(X_train, y_train)
 predictions = gbrt.predict(X_test)
 print(predictions)

代码输出

准确度:99.16% (1.51%)

[2.90288328 2.48242494 2.63815259 2.56852281 2.56852281 2.74960132 2.58107653 2.80135512 2.67153137 3.54629023 2.50640456 2.5038906 3.05384458 2.55023831 2.85925744 2.73849325 2.74080839 2.79646487 2.89086965 2.52839402 2.63251226 2.85012468 2.87403014 2.52685035 2.73180843]

如何将 2.9028838,2.48242494.. 的输出与合约月份和第二个月等相关联是我的第一个问题,第二个问题是如何为所有行生成相同的输出。总行数为 100,合同月份截至 2027 年 3 月 1 日

谢谢你。

标签: pythongradientxgboost

解决方案


推荐阅读