Makine Öğrenimi Modellerinin Performansını İyileştirme

Topluluklarla Performans İyileştirme

Topluluklar, birkaç modeli birleştirerek bize makine öğrenimi sonucunu artırabilir. Temel olarak, topluluk modelleri, bireysel olarak eğitilmiş birkaç denetimli öğrenme modelinden oluşur ve sonuçları, tek bir modele kıyasla daha iyi tahmin performansı elde etmek için çeşitli şekillerde birleştirilir. Topluluk yöntemleri aşağıdaki iki gruba ayrılabilir -

Sıralı topluluk yöntemleri

Adından da anlaşılacağı gibi, bu tür toplu yöntemlerde, temel öğrenenler sırayla oluşturulur. Bu tür yöntemlerin motivasyonu, temel öğrenenler arasındaki bağımlılıktan yararlanmaktır.

Paralel topluluk yöntemleri

Adından da anlaşılacağı gibi, bu tür toplu yöntemlerde temel öğrenenler paralel olarak üretilir. Bu tür yöntemlerin motivasyonu, temel öğrenenler arasındaki bağımsızlıktan yararlanmaktır.

Topluluk Öğrenme Yöntemleri

Aşağıdakiler en popüler toplu öğrenme yöntemidir, yani farklı modellerden tahminleri birleştirmek için yöntemler -

Torbalama

Torbalama terimi, önyükleme toplama olarak da bilinir. Torbalama yöntemlerinde, topluluk modeli, rastgele oluşturulmuş eğitim örnekleri üzerinden eğitilen bireysel modellerin tahminlerini birleştirerek tahmin doğruluğunu iyileştirmeye ve model varyansını azaltmaya çalışır. Topluluk modelinin nihai tahmini, tek tek tahmin edicilerden gelen tüm tahminlerin ortalaması hesaplanarak verilecektir. Torbalama yöntemlerinin en iyi örneklerinden biri rastgele ormanlardır.

Artırma

Arttırma yönteminde, topluluk modeli oluşturmanın ana ilkesi, her bir temel model tahmin edicisini sırayla eğiterek onu aşamalı olarak oluşturmaktır. Adından da anlaşılacağı gibi, güçlü bir topluluk oluşturmak için temelde birkaç haftalık temel öğreniciyi, birden fazla eğitim verisi yinelemesi üzerinden sırayla eğitilmiş olarak birleştirir. Haftalık temel öğrencilerin eğitimi sırasında, daha önce yanlış sınıflandırılan öğrencilere daha yüksek ağırlıklar verilir. Artırma yöntemine örnek AdaBoost'tur.

Oylama

Bu toplu öğrenme modelinde, farklı türlerde birden fazla model oluşturulur ve tahminleri birleştirmek için ortalama veya medyan hesaplama gibi bazı basit istatistikler kullanılır. Bu tahmin, nihai tahminin yapılması için eğitim için ek girdi görevi görecektir.

Torbalama Topluluğu Algoritmaları

Aşağıdakiler üç torbalama topluluğu algoritmasıdır -

Torbalı Karar Ağacı

Torbalama topluluğu yöntemlerinin yüksek varyansa sahip algoritmalarla iyi çalıştığını bildiğimiz için ve bu bağlamda en iyisi karar ağacı algoritmasıdır. Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde DecisionTreeClasifier (bir sınıflandırma ve regresyon ağaçları algoritması) ile sklearn'ın BaggingClassifier işlevini kullanarak torbalı karar ağacı topluluk modeli oluşturacağız.

İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

Şimdi, önceki örneklerde yaptığımız gibi Pima diyabet veri setini yüklememiz gerekiyor -

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]

Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()

İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 150 ağaç inşa ediyoruz -

num_trees = 150

Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -

model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)

Sonucu şu şekilde hesaplayın ve yazdırın -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Çıktı

0.7733766233766234

Yukarıdaki çıktı, torbalı karar ağacı sınıflandırıcı modelimizin yaklaşık% 77 oranında doğruluğunu elde ettiğimizi göstermektedir.

Rastgele Orman

Torbalı karar ağaçlarının bir uzantısıdır. Bireysel sınıflandırıcılar için, eğitim veri setinin örnekleri değiştirilerek alınır, ancak ağaçlar aralarındaki korelasyonu azaltacak şekilde inşa edilir. Ayrıca, her ağacın yapımında en iyi bölünme noktasını açgözlülükle seçmek yerine, rastgele bir özellik alt kümesinin her bir bölünme noktasını seçtiği kabul edilir.

Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde RandomForestClassifier sklearn sınıfını kullanarak torbalı rasgele orman topluluk modeli oluşturacağız.

İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -

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]

Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -

num_trees = 150
max_features = 5

Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -

model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)

Sonucu şu şekilde hesaplayın ve yazdırın -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Çıktı

0.7629357484620642

Yukarıdaki çıktı, torbalı rastgele orman sınıflandırıcı modelimizin yaklaşık% 76 oranında doğruluğunu elde ettiğimizi göstermektedir.

Ekstra Ağaçlar

Torbalı karar ağacı topluluk yönteminin bir başka uzantısıdır. Bu yöntemde, rastgele ağaçlar eğitim veri setinin örneklerinden oluşturulur.

Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde ExtraTreesClassifier sklearn sınıfını kullanarak ekstra ağaç topluluk modeli oluşturacağız.

İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier

Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -

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]

Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -

num_trees = 150
max_features = 5

Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -

model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)

Sonucu şu şekilde hesaplayın ve yazdırın -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Çıktı

0.7551435406698566

Yukarıdaki çıktı, torbalanmış ekstra ağaç sınıflandırıcı modelimizin yaklaşık% 75,5 doğruluğunu elde ettiğimizi göstermektedir.

Topluluk Algoritmalarını Güçlendirme

Aşağıdakiler en yaygın iki artırıcı topluluk algoritmasıdır -

AdaBoost

En başarılı artırıcı topluluk algoritmasıdır. Bu algoritmanın ana anahtarı, veri kümesindeki örneklere ağırlık vermeleridir. Bundan dolayı, algoritmanın sonraki modelleri oluştururken örneklere daha az dikkat etmesi gerekir.

Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde AdaBoostClassifier sklearn sınıfını kullanarak sınıflandırma için Ada Boost topluluk modelini oluşturacağız.

İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier

Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -

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]

Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -

num_trees = 50

Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -

model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)

Sonucu şu şekilde hesaplayın ve yazdırın -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Çıktı

0.7539473684210527

Yukarıdaki çıktı, AdaBoost sınıflandırıcı topluluk modelimizin yaklaşık% 75 doğruluğuna sahip olduğumuzu göstermektedir.

Stokastik Gradyan Arttırma

Gradient Boosting Machines olarak da adlandırılır. Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde GradientBoostingClassifier sklearn sınıfını kullanarak sınıflandırma için Stokastik Gradient Boostingensemble modelini oluşturacağız.

İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier

Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -

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]

Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -

num_trees = 50

Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -

model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)

Sonucu şu şekilde hesaplayın ve yazdırın -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Çıktı

0.7746582365003418

Yukarıdaki çıktı, Gradient Boosting sınıflandırıcı topluluk modelimizin yaklaşık% 77,5 doğruluğunu elde ettiğimizi gösteriyor.

Topluluk Algoritmalarını Oylama

Tartışıldığı gibi, oylama önce eğitim veri setinden iki veya daha fazla bağımsız model oluşturur ve ardından bir oylama sınıflandırıcı, yeni verilere ihtiyaç duyulduğunda alt model tahminlerinin ortalamasını alarak modeli sarar.

Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde VotingClassifier sklearn sınıfını kullanarak sınıflandırma için Oylama topluluk modelini oluşturacağız. Lojistik regresyon, Karar Ağacı sınıflandırıcı ve SVM tahminlerini bir sınıflandırma problemi için aşağıdaki gibi bir araya getiriyoruz -

İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -

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]

Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -

kfold = KFold(n_splits=10, random_state=7)

Ardından, aşağıdaki gibi alt modeller oluşturmamız gerekiyor -

estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))

Şimdi, yukarıda oluşturulan alt modellerin tahminlerini birleştirerek oylama topluluğu modelini oluşturun.

ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())

Çıktı

0.7382262474367738

Yukarıdaki çıktı, oylama sınıflandırıcı topluluk modelimizin yaklaşık% 74 doğruluğuna sahip olduğumuzu gösteriyor.