"Enter"a basıp içeriğe geçin

Öznitelik Seçme Yöntemleri

Feature Selection Methods

Makine öğrenmesi modellerinin gerek performansını gerekse öğrenme süresini etkileyen diğer bir etken ise öğrenmeye katkı sağlamayan ve hatta kimi durumlarda olumsuz etki eden özniteliklerdir. Bu gibi veri setinde yer bulmuş özniteliklerden performans iyileştirme ya da eğitim süresini kısaltma gibi amaçlarla kurtulmak için öznitelik seçme (feature selection) yöntemleri geliştirilmiştir. Temel olarak ikiye ayrılmaktadırlar:

  • Filtre yöntemleri (Filtering methods)
  • Sarmalayıcı yöntemler (Wrapper methods)

Filtre Yöntemleri (Filtering methods)

Filtre yöntemleri herhangi bir öğrenme algoritması kullanılmadan, her bir öznitelik için çeşitli istatistik değerleri ile skor üreterek belirli skor üzerindeki özniteliklerin ya da en iyi skora sahip belirlenen sayıda özniteliğin seçimi sonucu gerçekleşir. Skorlar genellikle özniteliklerin birbiri ya da hedef değer ile ilişkisi üzerinden üretilir. Bu sayede yeni bir bilgi barındırma ihtimali zayıf olanlardan kurtulunmak hedeflenir.

Chi Square, Mutual Information, Anova F value bilindik yöntemler arasındadır. Elbetteki her yönteme özgü veri ile alakalı ön kabul ve beklentileri mevcut olduğunu hatırlatalım. Yani her yöntem her veriye uygulanabilir değil.

Sklearn.feature_selection ile bir örnek yapacak olursak:

Yine sklearn’ün kullanıma sunduğu hazır veri setlerinden fetch_covtype ile veri setini oluşturalım ve veri hakkında bilgilerin bulunduğu description’ı inceleyelim:

from sklearn.datasets import fetch_covtype

data = fetch_covtype()

features = data.data
labels = data.target

print(data.DESCR)

Description’dan anlaşılacağı üzere ABD’de bulunan 30×30 metrelik ağaçlık alanlara ait 54 farklı öznitelik ve bu öznitelikler yardımı ile tahminlenmesi beklenen 7 farklı baskın ağaç türü etiketlenmiş. 54 öznitelik ve 581012 gözlem kullanarak yapılacak bir model eğitimi oldukça uzun zaman alabilir. Üstelik sonuçla ilişkisiz öznitelikler skoru aşağı çekebilir ya da önemsenmeyecek miktarda artış sağlayabilir.

Aşağıdaki şekilde çok basit bir kullanım Mutual Information yöntemine göre en iyi skoru üretmiş 10 öznitelik seçilebilir:

from sklearn.feature_selection import chi2, SelectKBest, mutual_info_classif

features_filtered = SelectKBest(score_func=mutual_info_classif, k=10).fit_transform(features,labels)

Filtre yöntemlerinde problemli kısım kaç öznitelik seçeceğimize karar verme süreci. Dilenir ise doğrudan mutual information yöntemi uygulanıp skorlar kontrol edilerek k değerine karar verilebilir. Diğer bir yöntem ise verinin yeterli miktardaki küçük bir kısmı ile k değeri giderek artırılarak model eğitimi denenebilir ve model skorunun yeterli görüldüğü yerde durulabilir. Ardından k değeri tüm veri setine yukarıdaki şekilde uygulanabilir. Bu yöntem eğitilmiş model skoruna dayandığı için aşağıdaki başlıkta açıklanacak bir çeşit sarmalayıcı yöntem olarak kabul edilir

Sarmalayıcı yöntemler (Wrapper methods)

Yukarıda da belirtildiği üzere eğitilmiş model skoruna dayanan öznitelik seçme yöntemleri sarmalayıcı (wrapper) yöntemleri olarak adlandırılmaktadır. Çeşitli yöntemler ile öznitelik alt kümeleri seçilerek yöntemin merkezine oturtulmak üzere seçilen makine öğrenmesi modeli eğitilir. Oluşan skora göre belirli öznitelikler seçilerek optimal (ya da suboptimal) öznitelik kümesine karar verilir. Anlaşılacağı üzere veri setine uygun olduğuna karar verilen bir öğrenme algoritması seçilerek yöntemin merkezine oturtulur.

Başlıca sarmalayıcı yöntemler arasında recursive feature elimination, ve sequential feature selection sayılabilir.

Recursive feature elimination (RFE) yöntemi ile başlangıçtaki veri seti ile seçilen bir modelin eğitimine başlanır ve öğrenme algoritmalarının sunduğu feature importance ya da coef değerlerine bakılarak en önemsiz özniteliğin elenmesi ile devam eder. Seçilen sayıda özniteliğe ulaşıldığında ise durulur.

Sequential feature selection yöntemi ise kendi içinde forward ve backward olarak iki ana başlığa ayrılmaktadır. Forward yöntemlerde belirli kriteri sağlayan öznitelikler seçilerek öznitelik sayısı giderek artırılırken backward yöntemlerde ise tüm veri seti içerisinden çıkarılarak skora etkisi kriterler dahilinde kontrol edilerek öznitelik alt kümesinde tutulup tutulmayacağına karar verilir.

Recursive feature elimination için bir örnek yapmak üzere önceki örneklerimizde de kullandığımız görece küçük boyutlardaki load_wine veri setini kullanalım:

from sklearn.datasets import load_wine

data = load_wine()

features = data.data
labels = data.target

Decision Tree merkezli bir RFE yöntemi aşağıdaki şekilde basitçe uygulanabilir:

from sklearn.feature_selection import RFE
from sklearn.tree import DecisionTreeClassifier

classifier = DecisionTreeClassifier()
selector = RFE(classifier, n_features_to_select=4, step=1)
selector = selector.fit(features, labels)
features_filtered = selector.transform(features)

Anlaşılacağı üzere sarmalayıcı yöntemler öğrenme süresi sebebi ile maliyetli iken optimal alt küme seçimi ve genelleştirme performansı açısından oldukça kuvvetlidir. Filtre yöntemlerinde ise öğrenme performansı dikkate alınmadan çeşitli istatistiki skorlamalarla hızlı bir şekilde seçme fikrine dayanmaktadır.

İlgili github repo’su için tıklayınız.

Keyifli öğrenmeler 🙂

İlk Yorumu Siz Yapın

Bir Cevap Yazın

Translate »
%d blogcu bunu beğendi: