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]