为什么随机森林回归会导致非常糟糕的结果?

时间:2017-10-04 17:22:54

标签: regression random-forest data-analysis non-linear-regression regression-testing

我尝试在scikit_learn中使用randomforestregressor()来建模一些数据。处理完原始数据后,我应用于randomforestregressor()的数据如下。

enter image description here

以下只是我数据的一小部分。事实上,大约有6000条数据。

注意,第一列是我创建的DataFrame datetimeindex的{​​{1}}' final_data'包含所有数据。另外,第4列中的数据是字符串。我只是通过map函数将它们转换为数字。

import pandas as pd
from datetime import datetime     
from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score

S_dataset1= final_data[(final_data.index >=pd.to_datetime('20160403')) & 
(final_data.index <= pd.to_datetime('20161002'))]

S_dataset2= final_data[(final_data.index >=pd.to_datetime('20170403')) & 
(final_data.index <= pd.to_datetime('20170901'))]

W_dataset = final_data[(final_data.index >=pd.to_datetime('20161002')) & 
(final_data.index <= pd.to_datetime('20170403'))]

S_dataset = pd.concat([S_dataset1,S_dataset2])
A = W_dataset.iloc[:, :8]
B = W_dataset.loc[:,'col20'] 
W_data = pd.concat([A,B],axis = 1)
X = W_data.iloc[:,:].values
y = W_dataset['col9'].values
X_train,X_test,y_train,y_test= train_test_split(X,y,test_size=0.3,
                                            random_state=1)
forest = RandomForestRegressor(n_estimators = 1000,criterion='mse',
                                          random_state=1,n_jobs=-1)
forest.fit(X_train, y_train)
y_train_pred = forest.predict(X_train)
y_test_pred = forest.predict(X_test)
print('R^2 train: %.3f, test: %.3f' % (r2_score(y_train, y_train_pred),
                                       r2_score(y_test, y_test_pred)))

这是我预测col9的代码。我将final_data分为两个季节,这可能会使预测更加准确。但结果非常糟糕。列车的R2得分约为0.9,但测试时,它只有0.25左右。我真的不知道为什么会得到如此糟糕的结果。有人可以告诉我哪里错了,怎么能改进我的模型?非常感谢!!!

1 个答案:

答案 0 :(得分:0)

我认为问题是因为我没有考虑日期时间对预测的影响。在将这些datetimeindexs转换为它们的数值并输入到我的模型后,我得到了相当不错的结果。 R2得分约为0.95-0.98。