[PYTHON] Forêt aléatoire (classification) et réglage des hyperparamètres

introduction

Un classificateur sera créé en ajustant les forêts aléatoires et les hyperparamètres de l'ensemble de données sur le cancer du sein du Wisconsin pour déterminer si une tumeur du cancer du sein est bénigne ou maligne. Les données sont incluses dans sklearn et le nombre de données est de 569, dont 212 sont bénignes, 357 sont malignes et 30 types de caractéristiques.

séries

Qu'est-ce que Random Forest?

Proposé par Leo Breiman en 2001 [1] Un algorithme d'apprentissage automatique utilisé pour la classification, la régression et le clustering. Il s'agit d'un algorithme d'apprentissage d'ensemble qui utilise un arbre de décision comme un apprenant faible, et son nom est basé sur l'utilisation d'un grand nombre d'arbres de décision appris à partir de données de formation échantillonnées au hasard. (De wikipedia)

Hyperparamètres de forêt aléatoires

Voir ci-dessous pour plus de détails. RandomForestClassifier

Hyper paramètres Les choix default
n_estimators type int 10
criterion gini、entropy gini
max_depth type int ou Aucun None
min_samples_split int, type flottant 2
min_samples_leaf int, type flottant 1
min_weight_fraction_leaf type de flotteur 0
max_features int, type float, Aucun, auto, sqrt, log2 auto
max_leaf_nodes type int ou Aucun None
min_impurity_decrease type de flotteur 0
min_impurity_split type de flotteur 1e-7
bootstrap type booléen True
oob_score type booléen False
n_jobs type int ou Aucun None
random_state type int, instance RandomState ou None None
verbose type int 0
warm_start type booléen False
class_weight Type de dictionnaire, équilibré, équilibré_subsample or None None

procédure

--Lecture des données sur le cancer du sein --Séparation des données d'entraînement et des données de test

Implémentation par python

%%time
from tqdm import tqdm
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

#Lire les données sur le cancer du sein
cancer_data = load_breast_cancer()

#Séparation des données d'entraînement et des données de test
train_X, test_X, train_y, test_y = train_test_split(cancer_data.data, cancer_data.target, random_state=0)

#Réglage de la condition
max_score = 0
SearchMethod = 0
RFC_grid = {RandomForestClassifier(): {"n_estimators": [i for i in range(1, 21)],
                                       "criterion": ["gini", "entropy"],
                                       "max_depth":[i for i in range(1, 5)],
                                       "random_state": [i for i in range(0, 101)]
                                      }}

#Exécuter Random Forest
for model, param in tqdm(RFC_grid.items()):
    clf = GridSearchCV(model, param)
    clf.fit(train_X, train_y)
    pred_y = clf.predict(test_X)
    score = f1_score(test_y, pred_y, average="micro")

    if max_score < score:
        max_score = score
        best_param = clf.best_params_
        best_model = model.__class__.__name__

print("Meilleur score:{}".format(max_score))
print("modèle:{}".format(best_model))
print("paramètre:{}".format(best_param))

#Comparaison sans ajustement des hyper paramètres
model = RandomForestClassifier()
model.fit(train_X, train_y)
score = model.score(test_X, test_y)
print("")
print("Score par défaut:", score)

résultat

100%|███████████████████████████████████████████| 1/1 [10:39<00:00, 639.64s/it]
Meilleur score:0.965034965034965
modèle:RandomForestClassifier
paramètre:{'criterion': 'entropy', 'max_depth': 4, 'n_estimators': 14, 'random_state': 62}

Score par défaut: 0.951048951049
Wall time: 10min 39s

en conclusion

En réglant les hyper paramètres, nous avons pu obtenir un taux de précision plus élevé que la valeur par défaut.

Recommended Posts

Forêt aléatoire (classification) et réglage des hyperparamètres
Arbre de décision et forêt aléatoire
Forêt aléatoire (2)
Apprenez les catégories de texte japonais avec tf-idf et Random Forest ~ [Tuning]
Forêt aléatoire
Réglage des hyper paramètres
Réglage de l'hyper paramètre 2
Classification multi-étiquettes par forêt aléatoire avec scikit-learn
Classification des maladies par Random Forest en utilisant Python
J'ai essayé d'utiliser RandomForest
[Apprentissage automatique] Comprendre la forêt aléatoire
Différence entre régression et classification
Utiliser Random Forest avec Python
Apprentissage supervisé 3 hyper paramètres et réglage (2)
Apprentissage automatique: forêt supervisée - aléatoire
Apprentissage supervisé 2 Hyper paramètres et réglage (1)
Apprenez les catégories de texte japonais avec TF-IDF et Random Forest ~ Liveoor News