Scikit Learn - Karar Ağaçları
Bu bölümde, karar ağaçları olarak adlandırılan Sklearn'daki öğrenme yöntemini öğreneceğiz.
Kararlar dizisi (DT'ler) en güçlü parametrik olmayan denetimli öğrenme yöntemidir. Sınıflandırma ve regresyon görevleri için kullanılabilirler. DT'lerin temel amacı, veri özelliklerinden çıkarılan basit karar kurallarını öğrenerek hedef değişken değerini tahmin eden bir model oluşturmaktır. Karar ağaçlarının iki ana varlığı vardır; biri verinin bölündüğü kök düğüm, diğeri ise nihai çıktıyı aldığımız karar düğümleri veya yaprakları.
Karar Ağacı Algoritmaları
Farklı Karar Ağacı algoritmaları aşağıda açıklanmıştır -
ID3
1986 yılında Ross Quinlan tarafından geliştirilmiştir. Yinelemeli Dikotomizör 3 olarak da adlandırılır. Bu algoritmanın temel amacı, her düğüm için kategorik hedefler için en büyük bilgi kazanımını sağlayacak kategorik özellikleri bulmaktır.
Ağacın maksimum boyutuna ulaşmasını sağlar ve ardından ağacın görünmeyen veriler üzerindeki yeteneğini iyileştirmek için bir budama adımı uygular. Bu algoritmanın çıktısı çok yollu bir ağaç olacaktır.
C4.5
ID3'ün halefidir ve sürekli öznitelik değerini ayrı bir aralıklar kümesine bölen ayrı bir özniteliği dinamik olarak tanımlar. Kategorik özelliklerin kısıtlamasını kaldırmasının nedeni budur. ID3 eğitimli ağacı 'IF-THEN' kurallarına dönüştürür.
Bu kuralların uygulanma sırasını belirlemek için öncelikle her bir kuralın doğruluğu değerlendirilecektir.
C5.0
C4.5'e benzer şekilde çalışır, ancak daha az bellek kullanır ve daha küçük kural setleri oluşturur. C4.5'ten daha doğrudur.
ARABA
Sınıflandırma ve Regresyon Ağaçları alsgorithm olarak adlandırılır. Temel olarak, her düğümde (Gini indeksi olarak adlandırılır) en büyük bilgi kazancını sağlayan özellikleri ve eşiği kullanarak ikili bölünmeler oluşturur.
Homojenlik Gini indeksine bağlıdır, Gini indeksinin değeri ne kadar yüksek olursa, homojenlik o kadar yüksek olur. C4.5 algoritması gibidir, ancak fark, kural setlerini hesaplamaması ve sayısal hedef değişkenleri (regresyon) desteklememesidir.
Karar ağaçları ile sınıflandırma
Bu durumda, karar değişkenleri kategoriktir.
Sklearn Module - Scikit-learn kitaplığı modül adını sağlar DecisionTreeClassifier veri kümesinde çok sınıflı sınıflandırma yapmak için.
Parametreler
Aşağıdaki tablo, sklearn.tree.DecisionTreeClassifier modül -
Sr.No | Parametre ve Açıklama |
---|---|
1 | criterion - dize, isteğe bağlı varsayılan = "gini" Bir bölünmenin kalitesini ölçme işlevini temsil eder. Desteklenen kriterler "gini" ve "entropi" dir. Varsayılan, Gini safsızlığı için olan gini iken, entropi bilgi kazanımı içindir. |
2 | splitter - dize, isteğe bağlı varsayılan = "en iyi" Modele, her bir düğümde bölünmeyi seçmek için "en iyi" veya "rastgele" stratejiyi söyler. |
3 | max_depth - int veya Yok, isteğe bağlı varsayılan = Yok Bu parametre, ağacın maksimum derinliğine karar verir. Varsayılan değer Yok şeklindedir, yani düğümler tüm yapraklar saf olana kadar veya tüm yapraklar min_smaples_split örneklerden daha azını içerene kadar genişler. |
4 | min_samples_split - int, float, isteğe bağlı varsayılan = 2 Bu parametre, bir dahili düğümü bölmek için gereken minimum örnek sayısını sağlar. |
5 | min_samples_leaf - int, float, isteğe bağlı varsayılan = 1 Bu parametre, bir yaprak düğümde olması gereken minimum örnek sayısını sağlar. |
6 | min_weight_fraction_leaf - float, isteğe bağlı varsayılan = 0. Bu parametre ile model, bir yaprak düğümde olması gereken ağırlıkların toplamının minimum ağırlıklı fraksiyonunu alacaktır. |
7 | max_features - int, float, string veya None, isteğe bağlı varsayılan = Yok En iyi bölünmeyi ararken modele dikkate alınması gereken özelliklerin sayısını verir. |
8 | random_state - int, RandomState örneği veya Yok, isteğe bağlı, varsayılan = yok Bu parametre, verileri karıştırırken kullanılan sözde rastgele sayının tohumunu temsil eder. Seçenekler şunlardır -
|
9 | max_leaf_nodes - int veya Yok, isteğe bağlı varsayılan = Yok Bu parametre max_leaf_nodes ile en iyi şekilde bir ağaç büyümesine izin verecektir. Varsayılan hiçbiri'dir, bu da sınırsız sayıda yaprak düğüm olacağı anlamına gelir. |
10 | min_impurity_decrease - float, isteğe bağlı varsayılan = 0. Bu değer, bir düğümün bölünmesi için bir kriter olarak çalışır, çünkü bu bölünme safsızlıkta daha büyük veya buna eşit bir azalmaya neden olursa model bir düğümü böler. min_impurity_decrease value. |
11 | min_impurity_split - float, varsayılan = 1e-7 Ağaç büyümesinde erken durma eşiğini temsil eder. |
12 | class_weight - dikte, dikteler listesi, "dengeli" veya Yok, varsayılan = Yok Sınıflarla ilişkili ağırlıkları temsil eder. Form, {class_label: weight} şeklindedir. Varsayılan seçeneği kullanırsak, bu, tüm sınıfların bir ağırlığa sahip olması gerektiği anlamına gelir. Öte yandan, seçersenizclass_weight: balanced, ağırlıkları otomatik olarak ayarlamak için y'nin değerlerini kullanacaktır. |
13 | presort - bool, isteğe bağlı varsayılan = Yanlış Modele, uydurmada en iyi bölünmeleri bulmayı hızlandırmak için verileri önceden sıralayıp sınıflandırmayacağını söyler. Varsayılan değer yanlıştır ancak doğru olarak ayarlandığında eğitim sürecini yavaşlatabilir. |
Öznitellikler
Aşağıdaki tablo, tarafından kullanılan öznitelikleri içermektedir. sklearn.tree.DecisionTreeClassifier modül -
Sr.No | Parametre ve Açıklama |
---|---|
1 | feature_importances_ - şekil dizisi = [n_features] Bu özellik, özelliğin önemini döndürecektir. |
2 | classes_: - şekil dizisi = [n_sınıflar] veya bu tür dizilerin listesi Sınıf etiketlerini, yani tek çıkış problemini veya sınıf etiketleri dizilerinin bir listesini, yani çoklu çıkış problemini temsil eder. |
3 | max_features_ - int Max_features parametresinin çıkarılan değerini temsil eder. |
4 | n_classes_ - int veya list Sınıfların sayısını, yani tek çıkış problemini veya her çıkış için sınıfların bir listesini, yani çoklu çıkış problemini temsil eder. |
5 | n_features_ - int Sayısını verir features fit () yöntemi uygulandığında. |
6 | n_outputs_ - int Sayısını verir outputs fit () yöntemi uygulandığında. |
Yöntemler
Aşağıdaki tablo, sklearn.tree.DecisionTreeClassifier modül -
Sr.No | Parametre ve Açıklama |
---|---|
1 | apply(self, X [, check_input]) Bu yöntem yaprağın indeksini döndürecektir. |
2 | decision_path(self, X [, check_input]) Adından da anlaşılacağı gibi, bu yöntem ağaçtaki karar yolunu döndürecektir. |
3 | fit(öz, X, y [, örnek_ağırlık,…]) fit () yöntemi, verilen eğitim setinden (X, y) bir karar ağacı sınıflandırıcısı oluşturacaktır. |
4 | get_depth(öz) Adından da anlaşılacağı gibi, bu yöntem karar ağacının derinliğini döndürecektir. |
5 | get_n_leaves(öz) Adından da anlaşılacağı gibi, bu yöntem karar ağacının yaprak sayısını döndürecektir. |
6 | get_params(öz [, derin]) Tahmin edicinin parametrelerini almak için bu yöntemi kullanabiliriz. |
7 | predict(self, X [, check_input]) X için sınıf değerini tahmin edecektir. |
8 | predict_log_proba(öz, X) Bizim tarafımızdan sağlanan girdi örneklerinin sınıf log-olasılıklarını tahmin edecek, X. |
9 | predict_proba(self, X [, check_input]) Bizim tarafımızdan sağlanan girdi örneklerinin sınıf olasılıklarını tahmin edecek, X. |
10 | score(öz, X, y [, örnek_ağırlığı]) Adından da anlaşılacağı gibi, score () yöntemi verilen test verileri ve etiketlerdeki ortalama doğruluğu döndürecektir. |
11 | set_params(öz, \ * \ * parametreler) Tahmin edicinin parametrelerini bu yöntemle ayarlayabiliriz. |
Uygulama Örneği
Aşağıdaki Python betiği kullanacak sklearn.tree.DecisionTreeClassifier 25 örnek ve iki özellik, yani 'yükseklik' ve 'saç uzunluğu' olan veri setimizden erkek veya dişi tahmin etmek için bir sınıflandırıcı oluşturmak için modül -
from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)
Çıktı
['Woman']
Aşağıdaki python tahmin_proba () yöntemini kullanarak her bir sınıfın olasılığını da tahmin edebiliriz -
Misal
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
Çıktı
[[0. 1.]]
Karar ağaçları ile regresyon
Bu durumda karar değişkenleri süreklidir.
Sklearn Module - Scikit-learn kitaplığı modül adını sağlar DecisionTreeRegressor regresyon problemlerine karar ağaçları uygulamak için.
Parametreler
Tarafından kullanılan parametreler DecisionTreeRegressor neredeyse aynı DecisionTreeClassifiermodül. Fark, 'ölçüt' parametresindedir. İçinDecisionTreeRegressor modüller ‘criterion: string, isteğe bağlı default = "mse" 'parametresi aşağıdaki değerlere sahiptir -
mse- Ortalama karesel hata anlamına gelir. Özellik seçme kriteri olarak varyans azaltmaya eşittir. Her bir terminal düğümünün ortalamasını kullanarak L2 kaybını en aza indirir.
freidman_mse - Aynı zamanda ortalama kare hatası kullanır, ancak Friedman'ın iyileştirme puanıyla.
mae- Ortalama mutlak hata anlamına gelir. Her bir terminal düğümünün medyanını kullanarak L1 kaybını en aza indirir.
Diğer bir fark, sahip olmamasıdır. ‘class_weight’ parametre.
Öznitellikler
Öznitelikleri DecisionTreeRegressor aynı zamanda olduğu gibi DecisionTreeClassifiermodül. Aradaki fark, sahip olmamasıdır‘classes_’ ve ‘n_classes_' Öznitellikler.
Yöntemler
Yöntemleri DecisionTreeRegressor aynı zamanda olduğu gibi DecisionTreeClassifiermodül. Aradaki fark, sahip olmamasıdır‘predict_log_proba()’ ve ‘predict_proba()’' Öznitellikler.
Uygulama Örneği
Karar ağacı regresyon modelindeki fit () yöntemi y'nin kayan nokta değerlerini alacaktır. kullanarak basit bir uygulama örneği görelimSklearn.tree.DecisionTreeRegressor -
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
Takıldıktan sonra, aşağıdaki gibi tahmin yapmak için bu regresyon modelini kullanabiliriz -
DTreg.predict([[4, 5]])
Çıktı
array([1.5])