Ich möchte ein Modell trainieren und schließlich eine Wahrheit Wert mit einem random forest model in Python
der three column dataset (klicken Sie auf den Link, um die vollständige CSV
-Dataset wie folgt formatiert herunterladenPython - Wie Vorhersage und Test über mehrere Dateien mit sklearn
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
ich wollte, den aktuellen Wert von Y
(den wahren Wert) unter Verwendung der letzten (zB 5, 10, 100, 300, 1000, ..etc) vorherzusagen, Datenpunkte unter Verwendung X
random forest model
von sklearn
in Python
. Bedeutung unter [0,0,1,2,3]
von X
Spalte als ein Inp ut für das erste Fenster - ich möchte den Wert der fünften Zeile von Y
, der auf den vorherigen Werten von Y
trainiert wurde, vorhersagen.
Nehmen wir an, wir haben 5 Spuren des Datensatzes (a1.csv, a2.csv, a3.csv, a4.csv und a5.csv) im aktuellen Verzeichnis. Für eine einzelne Spur (Datensatz) (zum Beispiel a1.csv) - Ich kann als die folgenden
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)
ich gelöst habe dieses Problem mit random forest
, die Vorhersage eines 5-Fenster tun, die df
ergibt:
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
Allerdings möchte ich jetzt die Vorhersage über alle Dateien (a1.csv, a2.csv, a3.csv, a4.csv und a5.csv) machen, indem ich das Training in 60% der Datensätze dividiere, deren Dateiname Beginnen Sie mit a
und die restlichen 40% zum Testen, deren Dateiname mit a
unter Verwendung sklearn
inbeginnen(bedeutet, dass 3 Traces für das Training und 2 Dateien für das Testen verwendet werden)?
PS: Alle Dateien haben die gleiche Struktur, aber sie haben unterschiedliche Längen, da sie mit verschiedenen Parametern erzeugt werden.
Haben alle Dateien dieselbe Struktur ('t_stamp, X, Y')? Dann füge einfach alle Daten in einen einzigen Datenrahmen ein und dividiere dann in Zug und Test. –
Ja, alle Dateien haben die gleiche Struktur, aber sie haben unterschiedliche Längen, da sie mit unterschiedlichen Parametern erzeugt werden. Redigiert meine Frage. Danke. – Mahsolid
@Mahsolid Ja. Das ist einfach. –