【发布时间】:2018-01-01 19:13:35
【问题描述】:
我想训练一个模型,最后使用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
我想使用random forest model 使用X 的最后一个(例如:5、10、100、300、1000、..etc)数据点来预测Y 的当前值(真实值) sklearn 中的 Python。意思是将X 列的[0,0,1,2,3] 作为第一个窗口的输入——我想预测Y 的第5 行值,该值是根据Y 的先前值进行训练的。
假设我们在当前目录中有 5 个数据集轨迹(a1.csv、a2.csv、a3.csv、a4.csv 和 a5.csv)。对于单个跟踪(数据集)(例如,a1.csv)——我可以按以下方式预测 5 个窗口
import pandas as pd
import numpy as np
from io import StringIO
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.metrics import accuracy_score
import math
from math import sqrt
df = pd.read_csv('a1.csv')
for i in range(1,5):
df['X_t'+str(i)] = df['X'].shift(i)
print(df)
df.dropna(inplace=True)
X=pd.DataFrame({ 'X_%d'%i : df['X'].shift(i) for i in range(5)}).apply(np.nan_to_num, axis=0).values
y = df['Y'].values
reg = RandomForestRegressor(criterion='mse')
reg.fit(X,y)
modelPred = reg.predict(X)
print(modelPred)
print("Number of predictions:",len(modelPred))
modelPred.tofile('predictedValues1.txt',sep="\n",format="%s")
meanSquaredError=mean_squared_error(y, modelPred)
print("Mean Square Error (MSE):", meanSquaredError)
rootMeanSquaredError = sqrt(meanSquaredError)
print("Root-Mean-Square Error (RMSE):", rootMeanSquaredError)
我用random forest 解决了这个问题,得到df:
rolling_regression')
time X Y X_t1 X_t2 X_t3 X_t4
0 0.000543 0 10 NaN NaN NaN NaN
1 0.000575 0 10 0.0 NaN NaN NaN
2 0.041324 1 10 0.0 0.0 NaN NaN
3 0.041331 2 10 1.0 0.0 0.0 NaN
4 0.041336 3 10 2.0 1.0 0.0 0.0
5 0.041340 4 10 3.0 2.0 1.0 0.0
6 0.041345 5 10 4.0 3.0 2.0 1.0
7 0.041350 6 10 5.0 4.0 3.0 2.0
.........................................................
[2845 rows x 7 columns]
[ 10. 10. 10. ..., 20. 20. 20.]
RMSE: 0.5136564734333562
但是,现在我想对所有文件(a1.csv、a2.csv、a3.csv、a4.csv 和 a5.csv)进行预测,方法是将训练分成 60% 的文件名称以a 开头,其余40% 用于测试,其文件名以a 开头,在Python 中使用sklearn(意味着3 个跟踪将用于训练,2 个文件用于测试)?
PS:所有文件的结构相同,但长度不同,因为它们是用不同的参数生成的。
【问题讨论】:
-
所有文件是否具有相同的结构 (
t_stamp,X,Y)?然后只需将所有数据附加到单个数据帧中,然后分为训练和测试。 -
是的,所有文件都有相同的结构,但它们的长度不同,因为它们是用不同的参数生成的。编辑了我的问题。谢谢。
-
@Mahsolid 是的。这很简单。
标签: python python-3.x pandas scikit-learn random-forest