我尝试在scikit_learn中使用randomforestregressor()
来建模一些数据。处理完原始数据后,我应用于randomforestregressor()
的数据如下。
以下只是我数据的一小部分。事实上,大约有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左右。我真的不知道为什么会得到如此糟糕的结果。有人可以告诉我哪里错了,怎么能改进我的模型?非常感谢!!!
答案 0 :(得分:0)
我认为问题是因为我没有考虑日期时间对预测的影响。在将这些datetimeindexs转换为它们的数值并输入到我的模型后,我得到了相当不错的结果。 R2得分约为0.95-0.98。