Scikit Learn - Randomize Karar Ağaçları

Bu bölüm, Sklearn'daki rastgele karar ağaçlarını anlamanıza yardımcı olacaktır.

Randomize Karar Ağacı algoritmaları

Bir DT'nin genellikle verileri yinelemeli olarak bölerek eğitildiğini bildiğimizden, ancak aşırı uyuma eğilimli olduğundan, verilerin çeşitli alt örnekleri üzerinde birçok ağaç eğitilerek rastgele ormanlara dönüştürüldü. sklearn.ensemble modül, rastgele karar ağaçlarına dayanan aşağıdaki iki algoritmaya sahip -

Rastgele Orman algoritması

İncelenen her bir özellik için, yerel olarak en uygun özellik / ayırma kombinasyonunu hesaplar. Rastgele ormanda, topluluktaki her karar ağacı, eğitim setinden değiştirilerek alınan bir örnekten oluşturulur ve ardından her birinden tahmini alır ve son olarak oylama yoluyla en iyi çözümü seçer. Hem sınıflandırma hem de regresyon görevleri için kullanılabilir.

Rastgele Orman ile Sınıflandırma

Rastgele bir orman sınıflandırıcısı oluşturmak için Scikit-learn modülü, sklearn.ensemble.RandomForestClassifier. Rastgele orman sınıflandırıcısı oluştururken, bu modülün kullandığı ana parametreler şunlardır:‘max_features’ ve ‘n_estimators’.

Buraya, ‘max_features’bir düğümü bölerken dikkate alınacak rastgele özellik alt kümelerinin boyutudur. Bu parametrenin değerini hiçbiri olarak seçmezsek, rastgele bir alt küme yerine tüm özellikleri dikkate alacaktır. Diğer yandan,n_estimatorsormandaki ağaçların sayısıdır. Ağaç sayısı ne kadar yüksek olursa sonuç o kadar iyi olur. Ancak hesaplanması daha uzun sürecektir.

Uygulama örneği

Aşağıdaki örnekte, kullanarak rastgele bir orman sınıflandırıcısı oluşturuyoruz sklearn.ensemble.RandomForestClassifier ve ayrıca kullanarak doğruluğunu kontrol etmek cross_val_score modül.

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()

Çıktı

0.9997

Misal

Random Forest sınıflandırıcısını oluşturmak için sklearn veri setini de kullanabiliriz. Aşağıdaki örnekte olduğu gibi iris veri setini kullanıyoruz. Ayrıca doğruluk puanını ve kafa karışıklığı matrisini de bulacağız.

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)

Çıktı

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

Rastgele Orman ile Regresyon

Rastgele bir orman regresyonu oluşturmak için Scikit-learn modülü, sklearn.ensemble.RandomForestRegressor. Rastgele orman regresörü oluştururken, tarafından kullanılan parametrelerin aynısını kullanacaktır.sklearn.ensemble.RandomForestClassifier.

Uygulama örneği

Aşağıdaki örnekte, kullanarak rastgele bir orman regresörü oluşturuyoruz sklearn.ensemble.RandomForestregressor ve ayrıca predikt () yöntemini kullanarak yeni değerleri tahmin etme.

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)

Çıktı

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
)

Takıldıktan sonra aşağıdaki gibi regresyon modelinden tahmin edebiliriz -

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

Çıktı

[98.47729198]

Ağaç Dışı Yöntemler

İncelenen her özellik için, bölme için rastgele bir değer seçer. Ekstra ağaç yöntemleri kullanmanın yararı, modelin varyansını biraz daha azaltmaya izin vermesidir. Bu yöntemleri kullanmanın dezavantajı, önyargıyı biraz artırmasıdır.

Ekstra Ağaç Yöntemi ile Sınıflandırma

Extra-tree yöntemini kullanarak bir sınıflandırıcı oluşturmak için Scikit-learn modülü, sklearn.ensemble.ExtraTreesClassifier. Tarafından kullanılan aynı parametreleri kullanırsklearn.ensemble.RandomForestClassifier. Tek fark, yukarıda tartışılan, ağaç inşa etmeleridir.

Uygulama örneği

Aşağıdaki örnekte, kullanarak rastgele bir orman sınıflandırıcısı oluşturuyoruz sklearn.ensemble.ExtraTreeClassifier ve ayrıca kullanarak doğruluğunu kontrol etmek cross_val_score modül.

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()

Çıktı

1.0

Misal

Extra-Tree yöntemini kullanarak sınıflandırıcı oluşturmak için sklearn veri kümesini de kullanabiliriz. Aşağıdaki örnekte olduğu gibi Pima-Indian veri kümesini kullanıyoruz.

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())

Çıktı

0.7551435406698566

Ekstra Ağaç Yöntemi ile Regresyon

Oluşturmak için Extra-Tree regresyon, Scikit-learn modülü, sklearn.ensemble.ExtraTreesRegressor. Rastgele orman regresörü oluştururken, tarafından kullanılan parametrelerin aynısını kullanacaktır.sklearn.ensemble.ExtraTreesClassifier.

Uygulama örneği

Aşağıdaki örnekte uyguluyoruz sklearn.ensemble.ExtraTreesregressorve rastgele orman regresörü oluştururken kullandığımız verilerle aynı. Çıktıdaki farkı görelim

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)

Çıktı

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)

Misal

Takıldıktan sonra aşağıdaki gibi regresyon modelinden tahmin edebiliriz -

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

Çıktı

[85.50955817]