【问题标题】:Prediction using random-forest model in python在 python 中使用随机森林模型进行预测
【发布时间】:2017-12-12 08:28:09
【问题描述】:

我有这个three column dataset 格式如下

t_stamp,Xval,Ytval
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

我们如何使用Pythonsklearnrandom forest classifier modelXval 的最后5 个数据点预测Y 的当前值(真实值)?意思是将Xval 列的[0,0,1,2,3] 作为输入——我想预测Ytval 的第5 行值。使用简单的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.Ytval, x=df[['Xval']], 
                               window_type='rolling', window=5, intercept=True)

【问题讨论】:

  • 这个问题似乎不是针对随机森林的,而是关于数据转换的。您可能会考虑更改您的标题。
  • 我从另一个问题中删除了标记,但似乎是版主删除了该问题。
  • @sera,我自己删除了它以进一步扩展问题。

标签: python pandas scikit-learn classification random-forest


【解决方案1】:

您可以通过改造数据来自行实现滚动输入数据,以便 X 的最后 5 个值中的每一个都成为它自己的特征:

import pandas as pd
from io import StringIO
from sklearn.ensemble import RandomForestRegressor

data = StringIO("""t_stamp,Xval,Ytval
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""")

df = pd.read_csv(data)

for i in range(1,6):
    df['Xval_t'+str(i)] = df['Xval'].shift(i)

产生df

t_stamp    Xval Ytval   Xval_t1 Xval_t2 Xval_t3 Xval_t4 Xval_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

当然,您需要决定如何处理NaNs。我只是出于演示目的而放弃它们。

df.dropna(inplace=True)

X = df[['Xval', 'Xval_t1', 'Xval_t2', 'Xval_t3', 'Xval_t4', 'Xval_t5']].values
y = df['Ytval'].values

reg = RandomForestRegressor()
reg.fit(X,y)
print(reg.predict(X))

结果:

[ 10.  10.  10.  10.]

【讨论】:

  • 谢谢。是的,我想像你一样放弃NaNs。是否可以使用randomforestclassifier 而不是randomforestregressor 并在末尾包含RMSE
  • 您可以用完全相同的方式拟合分类器。只需导入 RandomForestClassifier 即可。但是您确定分类对您的数据有意义吗? Y 的可能值范围是多少?此外,RMSE 是回归算法的度量,它在分类问题中没有位置。适合分类的指标包括,例如准确度、精密度、ROC-AUC、...
  • RMSE 不依赖于之前使用的学习算法。它只是根据两个输入向量计算一个度量。有关如何在sklearn 中应用任意度量函数的详细信息,请参阅scikit-learn.org/stable/modules/…
猜你喜欢
  • 2019-07-10
  • 2016-04-09
  • 2021-03-13
  • 2014-08-07
  • 2018-09-23
  • 2021-03-21
  • 2019-05-04
  • 2014-03-01
相关资源
最近更新 更多