为什么随机森林回归 return 是一个非常糟糕的结果?
why random forest regression return a very bad result?
我正在尝试使用 scikit_learn 中的 randomforestregressor()
来模拟一些 data.After 处理我的原始数据,我应用到 randomforestregressor()
的数据如下。
以下只是我的一小部分数据。事实上,大约有6000条数据。
请注意,第一列是我创建的包含所有数据的 DataFrame“final_data
”的 datetimeindex
。此外,column4 中的数据是字符串。我只是通过 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
分为两个季节,这可能会使预测更准确。然而,结果很糟糕。 train 的 R2 分数在 0.9 左右,但对于 test,它只有 0.25 左右。我真的不知道为什么我会得到这么糟糕的结果。有人能告诉我我错在哪里以及如何改进我的模型吗?非常感谢!!!
我认为问题是因为我没有考虑日期时间对预测的影响。将这些日期时间索引转换为数值并输入我的模型后,我得到了一个很好的结果。 R2 分数在 0.95-0.98 左右。
我正在尝试使用 scikit_learn 中的 randomforestregressor()
来模拟一些 data.After 处理我的原始数据,我应用到 randomforestregressor()
的数据如下。
以下只是我的一小部分数据。事实上,大约有6000条数据。
请注意,第一列是我创建的包含所有数据的 DataFrame“final_data
”的 datetimeindex
。此外,column4 中的数据是字符串。我只是通过 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
分为两个季节,这可能会使预测更准确。然而,结果很糟糕。 train 的 R2 分数在 0.9 左右,但对于 test,它只有 0.25 左右。我真的不知道为什么我会得到这么糟糕的结果。有人能告诉我我错在哪里以及如何改进我的模型吗?非常感谢!!!
我认为问题是因为我没有考虑日期时间对预测的影响。将这些日期时间索引转换为数值并输入我的模型后,我得到了一个很好的结果。 R2 分数在 0.95-0.98 左右。