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.
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)
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 |
--Lecture des données sur le cancer du sein --Séparation des données d'entraînement et des données de test
%%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)
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 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