0

Je tente de construire un modèle de classification pour les données d'événements de charge de véhicules électriques. Je veux prédire si la station de recharge sera disponible à un moment donné. Je le travail de code suivant:sklearn Score de précision de forêt aléatoire identique pour les données d'entraînement et de test

from sklearn.ensemble import RandomForestClassifier 
import pandas as pd 

raw_data = pd.read_csv('C:/temp/sample_dataset.csv') 
raw_test = pd.read_csv('C:/temp/sample_dataset_test.csv') 
print ('raw data shape: ', raw_test.shape) 

#choose which columns to dummify 
X_vars = ['station_id', 'day_of_week', 'epoch', 'station_city', 
'station_county', 'station_zip', 'port_level', 'perc_local_occupancy', 
'ports_at_station', 'avg_charge_duration'] 
y_var = ['target_variable'] 
categorical_vars = ['station_id','station_city','station_county'] 

#split X and y in training and test 
X_train = raw_data.loc[:,X_vars] 
y_train = raw_data.loc[:,y_var] 
X_test = raw_test.loc[:,X_vars] 
y_test = raw_test.loc[:,y_var] 

#make dummy variables 
X_train = pd.get_dummies(X_train, columns = categorical_vars) 
X_test = pd.get_dummies(X_test, columns=categorical_vars) 

print('train size', X_train.shape, '\ntest size', X_test.shape) 

# Train uncalibrated random forest classifier on whole train and evaluate on test data 
clf = RandomForestClassifier(n_estimators=100, max_depth=2) 
clf.fit(X_train, y_train.values.ravel()) 

print ('RF accuracy: TRAINING', clf.score(X_train,y_train)) 
print ('RF accuracy: TESTING', clf.score(X_test,y_test)) 

Résultats

raw data shape: (1000000, 15) 
train size (1000000, 125) 
test size (1000000, 125) 
RF accuracy: TRAINING 0.831456 
RF accuracy: TESTING 0.831456 

Ma question est pourquoi la formation et de précision à l'essai EXACTEMENT la même chose? J'ai couru autant de fois, c'est toujours pareil. Des idées? (J'ai vérifié que les données d'origine sont différentes.)

+0

Il y a aucune information sur la taille de 'raw_data'. Pensez-vous avoir exactement le même nombre d'observations dans vos ensembles 'raw_train' et' raw_test'? –

+2

Vous testez et vous entraînez sur les mêmes données. 'X_train == X_test' est' True'. Utilisez la fonction 'test_train_split' de scikit-learn ou une forme d'itérateur de validation croisée. –

Répondre

1

Eh bien, il est tout simplement une faute de frappe dans votre code, parce que chaque fois que votre sélectionner toutes les lignes:

#split X and y in training and test 
X_train = raw_data.loc[:,X_vars] 
y_train = raw_data.loc[:,y_var] 
X_test = raw_test.loc[:,X_vars] 
y_test = raw_test.loc[:,y_var] 

Vous devez indexer séparément par un indice, par exemple: X_train = raw_data.loc[:idx,X_vars]