İçeriğe geç

Makine Öğrenmesi Boyut İndirgeme

Bir veri setindeki veriler yüksek boyutlu olabilirler ve bu veriler ile çalışmak zaman açısından uzun süreler mal olabilir. Bunun önüne geçmek için veri setinin boyutu indirgenebilir bunu lineer ve lineer olmayanlar olarak ikiye ayırabiliriz. Performans açısından lineer indirgeme daha hızlı çalışmaktadır. Bunlar hakkında detaylı yazılı bir makale mevcut buradan ulaşabilirsiniz.

Python içerisinde güncel olarak sıkça kullanılan 2 adet indirgeme yöntemi mevcut bunlardan birisi PCA, LDA’dır.

İlk olarak PCA hakkında teorik bilgilere buradan ulaşabilirsiniz.

Kullanılacak olan veri seti sklearn içerisinde bulunan şaraplara ait veri seti.

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
X = load_wine().data#Şaraplara ait data kolonları
y = load_wine().target#Şaraplara ait etiket kolonu

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)#Test ve eğitim verilerinin ayrılması

pca = PCA(n_components=2)#indirgenecek kolon sayısı
X_train_pca=pca.fit_transform(X_train)#X_train öğrenilip indirgeniyor
X_test_pca=pca.transform(X_test)#Daha önce öğrendiğini X_test için uyguluyor
lr = LogisticRegression(random_state=0)#Log. reg. algoritması ile test
lr.fit(X_train,y_train)#önce normal hali ile eğitim
lr_pca = LogisticRegression(random_state=0)
lr_pca.fit(X_train_pca,y_train) #2'ye indirgenmiş hali ile eğitim
y_pred = lr.predict(X_test)#Normal halini test ediliyor
y_pred_pca = lr_pca.predict(X_test_pca)#İndirgenmiş hali test ediliyor
print("PCA Kullanılmadan CM")
print(confusion_matrix(y_test,y_pred))#İlki yani ham hali ile conf. matrisi
print(accuracy_score(y_test, y_pred))#İlk hal başarı
print("PCA Kullanılan CM")
print(confusion_matrix(y_test,y_pred_pca))#İndirgenmiş hali ile conf. matris
print(accuracy_score(y_test, y_pred_pca))#İndirgenmiş hal ile accuracy skoru

Ekran çıktısı

PCA Kullanılmadan CM
[[18  1  0]
 [ 1 20  1]
 [ 0  0 13]]
0.9444444444444444
PCA Kullanılan CM
[[17  1  1]
 [ 1 21  0]
 [ 2 11  0]]
0.7037037037037037

Görüldüğü gibi başarı büyük oranda azalmıştır. Buradaki n_components yani indirgenecek olan kolon sayısını 4 çekersek ise aşağıdaki gibi bir sonuç elde ederiz.

PCA Kullanılmadan CM
[[18  1  0]
 [ 1 20  1]
 [ 0  0 13]]
0.9444444444444444
PCA Kullanılan CM
[[17  2  0]
 [ 0 20  2]
 [ 0  0 13]]
0.9259259259259259

Büyük oranda ilkine yaklaştığı görülmektedir. 5 yapılırsa aşağıdaki gibi olur.

PCA Kullanılmadan CM
[[18  1  0]
 [ 1 20  1]
 [ 0  0 13]]
0.9444444444444444
PCA Kullanılan CM
[[17  2  0]
 [ 0 21  1]
 [ 0  0 13]]
0.9444444444444444

Şuanda başarıları birbirlerine eşit gibi bir durum söz konusu burada değer 6 yapılır ise aşağıdaki gibi olacaktır.

PCA Kullanılmadan CM
[[18  1  0]
 [ 1 20  1]
 [ 0  0 13]]
0.9444444444444444
PCA Kullanılan CM
[[18  1  0]
 [ 0 21  1]
 [ 0  0 13]]
0.9629629629629629

Burada farklı olarak artık PCA üzerinden işlem gören daha başarılı olduğu görülüyor yani biz 13 kolonluk veri setini 6 kolona indirdiğimiz de daha başarılı bir sonuç elde etmiş olduk indirgeme işlemi başarımımızı da etkiledi.

PCA görüldüğü gibi sadece veri setini alır arka planda matematiksel işlemler ile indirger ve bize geri döndürür. Bizden etiket kolonu istemez yani etiket kolonuna bağımlu değildir.

LDA’da ise farklı olarak bizden etiket kolonunu isteyecektir.

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
lda = LDA(n_components = 2)
X_train_lda = lda.fit_transform(X_train,y_train)
X_test_lda = lda.transform(X_test)
lr_lda = LogisticRegression(random_state=0)
lr_lda.fit(X_train_lda,y_train)
y_pred_lda = lr_lda.predict(X_test_lda)
print("LDA Kullanılarak CM")
print(confusion_matrix(y_test,y_pred_lda))
print(accuracy_score(y_test, y_pred_lda))

LDA’de görünürde PCA gibidir tek farkı etiket yani y_train kolonunu gözeterek işlem yapar. Bonun sonunda ekran görüntüsü aşağıdaki gibi olmaktadır.

PCA Kullanılmadan CM
[[18  1  0]
 [ 1 20  1]
 [ 0  0 13]]
0.9444444444444444
PCA Kullanılan CM
[[18  1  0]
 [ 0 21  1]
 [ 0  0 13]]
0.9629629629629629
LDA Kullanılarak CM
[[19  0  0]
 [ 0 22  0]
 [ 0  0 13]]
1.0

Gördüldüğü gibi LDA kullanılarak %100 başarı elde edilmiştir.

Tarih:Makine Öğrenmesi

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir