【发布时间】:2017-12-15 07:45:10
【问题描述】:
我们如何使用random forest 预测模型?我想训练一个模型,最后使用three column dataset 的random forest model in Python 预测一个真值(点击链接下载完整的CSV-dataset,格式如下
t_stamp,X,Y
0.000543,0,10
0.000575,0,10
0.041324,1,10
0.041331,2,10
0.041336,3,10
0.04134,4,10
0.041345,5,10
0.04135,6,10
0.041354,7,10
我想使用X 使用random forest model 使用X 的最后一个(例如:5、10、100、300、1000 等)数据点来预测Y 的当前值(真实值) sklearn 中的 Python。意思是将X 列的[0,0,1,2,3] 作为第一个窗口的输入——我想预测Y 的第5 行值,该值是在Y 的先前值上训练的。类似地,使用简单的rolling OLS regression model,我们可以按照以下方式进行操作,但我想使用random forest model 进行操作。
import pandas as pd
df = pd.read_csv('data_pred.csv')
model = pd.stats.ols.MovingOLS(y=df.Y, x=df[['X']],
window_type='rolling', window=5, intercept=True)
我用random forest 解决了这个问题,得到df:
t_stamp X Y X_t1 X_t2 X_t3 X_t4 X_t5
0.000543 0 10 NaN NaN NaN NaN NaN
0.000575 0 10 0.0 NaN NaN NaN NaN
0.041324 1 10 0.0 0.0 NaN NaN NaN
0.041331 2 10 1.0 0.0 0.0 NaN NaN
0.041336 3 10 2.0 1.0 0.0 0.0 NaN
0.041340 4 10 3.0 2.0 1.0 0.0 0.0
0.041345 5 10 4.0 3.0 2.0 1.0 0.0
0.041350 6 10 5.0 4.0 3.0 2.0 1.0
0.041354 7 10 6.0 5.0 4.0 3.0 2.0
.........................................................
[ 10. 10. 10. 10. .................................]
MSE: 1.3273548431
这似乎适用于范围 5、10、15、20、22。但是,它似乎不适用于大于 23 的范围(它打印 MSE: 0.0),这是因为,你可以从dataset 看到,Y 的值从第 1 行到第 23 行是固定的(10),然后从第 24 行更改为另一个值(20,依此类推)。我们如何训练和预测这种情况的模型基于最后的数据点?
【问题讨论】:
-
对于大于 10 的范围,我得到的值较低。但它不是 0。MSE 应该降低,它是预测误差的一种度量。那么有什么问题呢?
-
我认为我们得到一个小的
MSE的原因可能是因为模型正在记住Y的单个值(当Y的值保持不变时(具有常数值) - 例如从第 1 行到第 23 行)。
标签: python pandas dataframe scikit-learn random-forest