Scikit Learn - Randomisierte Entscheidungsbäume

Dieses Kapitel hilft Ihnen beim Verständnis randomisierter Entscheidungsbäume in Sklearn.

Randomisierte Entscheidungsbaumalgorithmen

Da wir wissen, dass ein DT normalerweise durch rekursives Aufteilen der Daten trainiert wird, aber zu Überanpassungen neigt, wurden sie in zufällige Wälder umgewandelt, indem viele Bäume über verschiedene Teilstichproben der Daten trainiert wurden. Dassklearn.ensemble Modul hat folgende zwei Algorithmen basierend auf zufälligen Entscheidungsbäumen -

Der Random Forest-Algorithmus

Für jedes betrachtete Merkmal wird die lokal optimale Kombination aus Merkmal und Teilung berechnet. In Random Forest wird jeder Entscheidungsbaum im Ensemble aus einer Stichprobe erstellt, die mit Ersatz aus dem Trainingssatz gezogen wurde. Anschließend erhält er die Vorhersage von jedem von ihnen und wählt schließlich die beste Lösung durch Abstimmung aus. Es kann sowohl für Klassifizierungs- als auch für Regressionsaufgaben verwendet werden.

Klassifizierung mit Random Forest

Zum Erstellen eines zufälligen Waldklassifikators bietet das Scikit-Lernmodul sklearn.ensemble.RandomForestClassifier. Beim Erstellen eines zufälligen Gesamtstrukturklassifikators werden von diesem Modul hauptsächlich folgende Parameter verwendet‘max_features’ und ‘n_estimators’.

Hier, ‘max_features’ist die Größe der zufälligen Teilmengen von Features, die beim Teilen eines Knotens berücksichtigt werden müssen. Wenn wir den Wert dieses Parameters auf "Keine" setzen, werden alle Funktionen und keine zufällige Teilmenge berücksichtigt. Andererseits,n_estimatorssind die Anzahl der Bäume im Wald. Je höher die Anzahl der Bäume, desto besser ist das Ergebnis. Die Berechnung wird jedoch auch länger dauern.

Implementierungsbeispiel

Im folgenden Beispiel erstellen wir mithilfe von einen zufälligen Gesamtstrukturklassifizierer sklearn.ensemble.RandomForestClassifier und auch die Überprüfung seiner Genauigkeit auch mit cross_val_score Modul.

from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs
from sklearn.ensemble import RandomForestClassifier
X, y = make_blobs(n_samples = 10000, n_features = 10, centers = 100,random_state = 0) RFclf = RandomForestClassifier(n_estimators = 10,max_depth = None,min_samples_split = 2, random_state = 0)
scores = cross_val_score(RFclf, X, y, cv = 5)
scores.mean()

Ausgabe

0.9997

Beispiel

Wir können auch das sklearn-Dataset verwenden, um einen Random Forest-Klassifikator zu erstellen. Wie im folgenden Beispiel verwenden wir den Iris-Datensatz. Wir werden auch die Genauigkeitsbewertung und die Verwirrungsmatrix finden.

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

path = "https://archive.ics.uci.edu/ml/machine-learning-database
s/iris/iris.data"
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
dataset = pd.read_csv(path, names = headernames)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
RFclf = RandomForestClassifier(n_estimators = 50)
RFclf.fit(X_train, y_train)
y_pred = RFclf.predict(X_test)
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

Ausgabe

Confusion Matrix:
[[14 0 0]
[ 0 18 1]
[ 0 0 12]]
Classification Report:
                  precision recall f1-score support
Iris-setosa       1.00        1.00  1.00     14
Iris-versicolor   1.00        0.95  0.97     19
Iris-virginica    0.92        1.00  0.96     12

micro avg         0.98        0.98  0.98     45
macro avg         0.97        0.98  0.98     45
weighted avg      0.98        0.98  0.98     45

Accuracy: 0.9777777777777777

Regression mit Random Forest

Zum Erstellen einer zufälligen Waldregression bietet das Scikit-Lernmodul sklearn.ensemble.RandomForestRegressor. Beim Erstellen eines zufälligen Waldregressors werden dieselben Parameter verwendet, die auch von verwendet werdensklearn.ensemble.RandomForestClassifier.

Implementierungsbeispiel

Im folgenden Beispiel erstellen wir mithilfe von einen zufälligen Gesamtstrukturregressor sklearn.ensemble.RandomForestregressor und auch Vorhersagen für neue Werte unter Verwendung der Predict () -Methode.

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
RFregr = RandomForestRegressor(max_depth = 10,random_state = 0,n_estimators = 100)
RFregr.fit(X, y)

Ausgabe

RandomForestRegressor(
   bootstrap = True, criterion = 'mse', max_depth = 10,
   max_features = 'auto', max_leaf_nodes = None,
   min_impurity_decrease = 0.0, min_impurity_split = None,
   min_samples_leaf = 1, min_samples_split = 2,
   min_weight_fraction_leaf = 0.0, n_estimators = 100, n_jobs = None,
   oob_score = False, random_state = 0, verbose = 0, warm_start = False
)

Einmal angepasst, können wir aus dem Regressionsmodell Folgendes vorhersagen:

print(RFregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))

Ausgabe

[98.47729198]

Extra-Tree-Methoden

Für jedes betrachtete Merkmal wird ein zufälliger Wert für die Aufteilung ausgewählt. Der Vorteil der Verwendung zusätzlicher Baummethoden besteht darin, dass die Varianz des Modells etwas stärker reduziert werden kann. Der Nachteil der Verwendung dieser Verfahren besteht darin, dass die Vorspannung geringfügig erhöht wird.

Klassifizierung mit Extra-Tree-Methode

Zum Erstellen eines Klassifikators mit der Extra-Tree-Methode bietet das Scikit-Lernmodul sklearn.ensemble.ExtraTreesClassifier. Es werden die gleichen Parameter verwendet wie vonsklearn.ensemble.RandomForestClassifier. Der einzige Unterschied besteht in der oben diskutierten Art und Weise, wie sie Bäume bauen.

Implementierungsbeispiel

Im folgenden Beispiel erstellen wir mithilfe von einen zufälligen Gesamtstrukturklassifizierer sklearn.ensemble.ExtraTreeClassifier und auch die Genauigkeit mit zu überprüfen cross_val_score Modul.

from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs
from sklearn.ensemble import ExtraTreesClassifier
X, y = make_blobs(n_samples = 10000, n_features = 10, centers=100,random_state = 0)
ETclf = ExtraTreesClassifier(n_estimators = 10,max_depth = None,min_samples_split = 10, random_state = 0)
scores = cross_val_score(ETclf, X, y, cv = 5)
scores.mean()

Ausgabe

1.0

Beispiel

Wir können auch das sklearn-Dataset verwenden, um einen Klassifikator mithilfe der Extra-Tree-Methode zu erstellen. Wie im folgenden Beispiel verwenden wir den Pima-Indian-Datensatz.

from pandas import read_csv

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
num_trees = 150
max_features = 5
ETclf = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
results = cross_val_score(ETclf, X, Y, cv=kfold)
print(results.mean())

Ausgabe

0.7551435406698566

Regression mit Extra-Tree-Methode

Zum Erstellen eines Extra-Tree Regression bietet das Scikit-Lernmodul sklearn.ensemble.ExtraTreesRegressor. Beim Erstellen eines zufälligen Waldregressors werden dieselben Parameter verwendet, die auch von verwendet werdensklearn.ensemble.ExtraTreesClassifier.

Implementierungsbeispiel

Im folgenden Beispiel bewerben wir uns sklearn.ensemble.ExtraTreesregressorund auf den gleichen Daten, die wir beim Erstellen eines zufälligen Waldregressors verwendet haben. Lassen Sie uns den Unterschied in der Ausgabe sehen

from sklearn.ensemble import ExtraTreesRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
ETregr = ExtraTreesRegressor(max_depth = 10,random_state = 0,n_estimators = 100)
ETregr.fit(X, y)

Ausgabe

ExtraTreesRegressor(bootstrap = False, criterion = 'mse', max_depth = 10,
   max_features = 'auto', max_leaf_nodes = None,
   min_impurity_decrease = 0.0, min_impurity_split = None,
   min_samples_leaf = 1, min_samples_split = 2,
   min_weight_fraction_leaf = 0.0, n_estimators = 100, n_jobs = None,
   oob_score = False, random_state = 0, verbose = 0, warm_start = False)

Beispiel

Einmal angepasst, können wir aus dem Regressionsmodell Folgendes vorhersagen:

print(ETregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))

Ausgabe

[85.50955817]