2

J'essaye de construire un classificateur de forêt aléatoire pour la classification binomiale. Quelqu'un peut-il expliquer pourquoi mes scores de précision varient chaque fois que j'exécute ce programme? Les scores varient de 68% à 74%. En outre, j'ai essayé de peaufiner les paramètres mais je ne peux pas obtenir la précision pour aller au-dessus de 74. Toute suggestion à ce sujet serait également appréciée. J'ai essayé d'utiliser GridSearchCV mais j'ai réussi seulement une augmentation décente de 3 points.Classificateur aléatoire de forêt

#import libraries 
import numpy as np 
import pandas as pd 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.metrics import accuracy_score 
from sklearn import preprocessing 

#read data into pandas dataframe 
df = pd.read_csv("data.csv") 

#handle missing values 
df = df.dropna(axis = 0, how = 'any') 

#handle string-type data 
le = preprocessing.LabelEncoder() 
le.fit(['Male','Female']) 
df.loc[:,'Sex'] = le.transform(df['Sex']) 

#split into train and test data 
df['is_train'] = np.random.uniform(0, 1, len(df)) <= 0.8 
train, test = df[df['is_train'] == True], df[df['is_train'] == False] 

#make an array of columns 
features = df.columns[:10] 

#build the classifier 
clf = RandomForestClassifier() 

#train the classifier 
y = train['Selector'] 
clf.fit(train[features], train['Selector']) 

#test the classifier 
clf.predict(test[features]) 

#calculate accuracy 
accuracy_score(test['Selector'], clf.predict(test[features])) 
accuracy_score(train['Selector'], clf.predict(train[features])) 
+0

lien vers jeu de données: https://archive.ics.uci.edu/ml/datasets/ILPD+(Indian+Liver+Patient+Dataset) – TheBeginner

+0

Pour vous améliorer le modèle que je suggère vous d'utiliser des ensembles et essayez aussi XGBoost. –

Répondre

1

Votre précision change chaque fois que vous exécutez le programme car le modèle créé est différent. Et le modèle est différent parce que vous ne fixez pas l'état aléatoire lors de sa création. Jetez un oeil au paramètre random_state du scikit-learn documentation.

Pour votre deuxième question, il y a beaucoup de choses que vous pouvez essayer afin d'améliorer la précision d'un modèle. Par ordre d'importance:

  • Obtenir plus de données de formation
  • Améliorez vos données de formation (c.-à se débarrasser des caractéristiques de faible qualité ou d'échantillons, de créer de nouvelles fonctionnalités ...)
  • Réglez les paramètres de votre algorithme d'apprentissage (RandomForest en a quelques-uns à jouer)
  • Essayez un autre modèle d'apprentissage.
  • Essayez de combiner différents modèles
+0

J'essayais de régler les paramètres, et a fini à: n_jobs = -1, n_estimators = 75, min_samples_leaf = 25, random_state = 42, oob_score = Vrai. Mais j'ai quand même des valeurs de précision différentes: Out [472]: 0.75221238938053092, Out [474]: 0.68965517241379315 – TheBeginner