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.
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)
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 |
%%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)
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
Durch die Optimierung der Hyperparameter konnten wir eine höhere Genauigkeitsrate als die Standardeinstellung erzielen.
Recommended Posts