[PYTHON] Random Forest (Klassifizierung) und Hyperparameter-Tuning

Einführung

Ein Klassifikator wird erstellt, indem zufällige Wälder und Hyperparameter für den Wisconsin-Brustkrebs-Datensatz abgestimmt werden, um festzustellen, ob ein Brustkrebstumor gutartig oder bösartig ist. Die Daten sind in sklearn enthalten, und die Anzahl der Daten beträgt 569, von denen 212 gutartig, 357 bösartig und 30 Arten von Merkmalen sind.

Serie

Was ist zufälliger Wald?

Vorgeschlagen von Leo Breiman im Jahr 2001 [1] Ein Algorithmus für maschinelles Lernen, der zur Klassifizierung, Regression und Clusterbildung verwendet wird. Es handelt sich um einen Ensemble-Lernalgorithmus, der einen Entscheidungsbaum als schwachen Lernenden verwendet. Sein Name basiert auf der Verwendung einer großen Anzahl von Entscheidungsbäumen, die aus zufällig ausgewählten Trainingsdaten gelernt wurden. (Aus Wikipedia)

Zufällige Waldhyperparameter

Siehe unten für Details. RandomForestClassifier

Hyperparameter Entscheidungen default
n_estimators int type 10
criterion gini、entropy gini
max_depth int type oder None None
min_samples_split int, float type 2
min_samples_leaf int, float type 1
min_weight_fraction_leaf Float-Typ 0
max_features int, float type, None, auto, sqrt, log2 auto
max_leaf_nodes int type oder None None
min_impurity_decrease Float-Typ 0
min_impurity_split Float-Typ 1e-7
bootstrap Bool-Typ True
oob_score Bool-Typ False
n_jobs int type oder None None
random_state int-Typ, RandomState-Instanz oder Keine None
verbose int type 0
warm_start Bool-Typ False
class_weight Wörterbuchtyp, ausgeglichen, ausgeglichen_subsample or None None

Verfahren

Implementierung durch 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

#Brustkrebsdaten lesen
cancer_data = load_breast_cancer()

#Trennung von Trainingsdaten und Testdaten
train_X, test_X, train_y, test_y = train_test_split(cancer_data.data, cancer_data.target, random_state=0)

#Zustandseinstellung
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)]
                                      }}

#Zufällige Gesamtstrukturausführung
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("Bestes Ergebnis:{}".format(max_score))
print("Modell-:{}".format(best_model))
print("Parameter:{}".format(best_param))

#Vergleich ohne Anpassung der Hyperparameter
model = RandomForestClassifier()
model.fit(train_X, train_y)
score = model.score(test_X, test_y)
print("")
print("Standardpunktzahl:", score)

Ergebnis

100%|███████████████████████████████████████████| 1/1 [10:39<00:00, 639.64s/it]
Bestes Ergebnis:0.965034965034965
Modell-:RandomForestClassifier
Parameter:{'criterion': 'entropy', 'max_depth': 4, 'n_estimators': 14, 'random_state': 62}

Standardpunktzahl: 0.951048951049
Wall time: 10min 39s

abschließend

Durch die Optimierung der Hyperparameter konnten wir eine höhere Genauigkeitsrate als die Standardeinstellung erzielen.

Recommended Posts

Random Forest (Klassifizierung) und Hyperparameter-Tuning
Entscheidungsbaum und zufälliger Wald
Zufälliger Wald (2)
Lerne japanische Textkategorien mit tf-idf und Random Forest ~ [Tuning]
Zufälliger Wald
Hyper-Parameter-Tuning
Hyper Parameter Tuning 2
Multi-Label-Klassifizierung nach Random Forest mit Scikit-Learn
Krankheitsklassifizierung durch Random Forest mit Python
Ich habe versucht, RandomForest zu verwenden
[Maschinelles Lernen] Zufällige Gesamtstruktur verstehen
Unterschied zwischen Regression und Klassifikation
Verwenden Sie Random Forest mit Python
Überwachtes Lernen 3 Hyperparameter und Abstimmung (2)
Maschinelles Lernen: Überwacht - Zufälliger Wald
Überwachtes Lernen 2 Hyperparameter und Abstimmung (1)
Lernen Sie japanische Textkategorien mit tf-idf und Random Forest ~ livingoor News