Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Filtreleme Yöntemleri ve Python Kodları

Yiğit Şener
5 min readNov 1, 2020

--

Makine öğrenmesi değişken seçimi (feature selection) serisinin bu yazısında filtreleme (süzme) yöntemlerine değineceğiniz. Serinin diğer yazılarına aşağıdaki başlıklardan ulaşabilirsiniz.

Serinin Diğer Yazıları:

  1. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Genel Bakış
  2. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Filtreleme Yöntemleri ve Python Kodları
  3. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Sarmal (Wrapper) Yöntemler ve Python Kodları
  4. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Gömülü (Embedded) Yöntemler ve Python Kodları

Filtreleme yöntemleri makine öğrenmesi veri ön hazırlık kısmında sıklıkla kullanılmaktadır. En basitinden ID (müşteri numarası) değişkeninin veri setinden çıkarılmasından tutunda değişkenler arası istatistiksel testlere varıncaya kadar uzanan bir yelpazeye sahiptir. Anlaşılması ve uygulanması gayet basit olduğu gibi anlatılması ve açıklanması da bir o kadar kolay yöntemlerden oluşur.

  • Girdi değişken: Bağımsız değişken, öznitelik, input, predictor, yordayan, feature, attribute
  • Çıktı değişken: Bağımlı değişken, hedef değişken, output, target, yordanan

Filtreleme Yöntemlerinin Avantajları

  1. Her hangi bir makine öğrenmesi algoritmasında kullanılabilir. Dolayısıyla modelden bağımsız oluşturulabilen bir süreçtir.
  2. Hesaplama maliyeti düşüktür. Yani hem zaman hem de harcanan efor açısından, süreç içerisinde çok fazla yoran bir dizi işlemler serisine sahip değildir.
  3. Farklı istatistiksel yöntemler kullanılabilir

Filtreleme Yöntemlerinin Dezavantajları

Değişkenlerin her biri tek başına ele alınarak çıktı olan değişken ile olan ilişkisi ölçümlenir. Bu bize o değişkenin önemini gösterir. Ancak ya önemsiz gibi görünen birden fazla değişken bir araya geldiğinde çıktı üzerinde önemli bir etkiye sahip olma gücüne sahipse? Tam bu noktada filtreleme yöntemlerinin dezavantajı ortaya çıkmış oluyor.

Filtreleme Yöntemlerinin Varsayımları

Aşağıdaki varsayımlar ile model içerisindeki girdi ve çıktı değişkenler filtreleme yöntemleri ile ele alınırlar.

  1. Girdi değişken ile çıktı değişken arasında yüksek ilişki beklenir.
  2. Girdi değişkenleri arasında düşük ilişki beklenir.
  3. Girdi değişkenler arasında yüksek karşılıklı açıklayıcı kazanım beklenir.

Hangi Yöntemi Seçileceğine Nasıl Karar Verilir?

Bilindiği üzere gözetimli (supervised) makine öğrenmesinin iki tipi bulunur.

  1. Çıktı değişken sayısal ise Regresyon
  2. Çıktı değişken kategorik ise Sınıflandırma

Bu çıktıları yordayan girdi değişkenlerinin de kategorik ve sayısal olmak üzere iki türü bulunur. Dolayısı ile iki farklı girdi ve iki farklı çıktı değişken türü için toplamda 4 ana yöntemden bahsedebiliriz.

Yukarıdaki şekilde de görüldüğü üzere girdi ve çıktı değişkenlere göre farklı tipteki istatistiksel yöntemler seçilebilmektedir.

Aşağıdaki başlıklarda bu istatistiksel yöntemleri açıklayarak kod örneklerini verelim.

Pearson Korelasyon Yöntemi

Girdi ve çıktı değişkenlerinin sayısal olduğu durumlarda kullanılır. Değişkenlerin doğrusal ve normal dağılım olması şartı aranır. Testin sonucu iki değişken arasındaki ilişkinin kuvvetini verir. Regresyon ile korelasyonun en çok karıştırılan yönü; regresyonda girdi değişkenin çıktı değişken üzerindeki etkisi saptanırken, korelasyonda iki değişken arasındaki ilişkinin değeri ve yönü belirtilir.

  • -1 ile 1 arasında sonuç döndürür.
  • 0 veya 0'a yaklaşan değerler ilişki olmadığını yansıdır.
  • 1'e yakın bir değer pozitif ilişki olduğu varsayılır. Örneğin yaş arttıkça maaşın artması.
  • -1'e yakın bir değer ters/negatif bir ilişki olduğunu gösterir. Örneğin yaş arttıkça, bir dakika içindeki kalp atış sayısı azalır.
import pandas as pd
df = pd.read_excel("input/ornek.csv")
def corrResult(min_corr, max_corr, data):
'''
:param min_corr: minimum ilişki düzeyinin belirlenmesi
:param max_corr: maksimum ilişki düzeyi
:param data: veri seti
:return: sonuç doğrudan print edilir
'''
for i in range(0, len(data.columns)):
for j in range(0, len(data.columns)):
if i != j:
corr_1 = np.abs(data[data.columns[i]].corr(data[data.columns[j]]
,method = "spearman"))
if corr_1 < min_corr:
print(data.columns[i], " ile ", data.columns[j], "arasında bir ilişki yoktur")
elif corr_1 > max_corr:
print(data.columns[i], " ile ", data.columns[j]," arasında yüksek bir ilişki vardır")

corrResult(min_corr = 0.3, max_corr = 0.75, data = df)

Yukarıdaki fonksiyon ile belirlenen alt ve üst korelasyon değerleri ile sonuçlar doğrudan yazdırılmaktadır.

Python’da kütüphane kullanmadan korelasyon hesaplayan fonksiyonun nasıl kodlandığına aşağıdaki yazıdan ulaşabilirsiniz.

Spearman Korelasyon Yöntemi

Aslında Pearson korelasyon yöntemi ile sonuçların yorumlanması bezerdir. En büyük farkı parametrik olmayan veri setleri için uygulanabilirdir. Bunun yanında parametrik olan değişkenler için de uygulanabilir. Ancak Pearson testi parametrik olmayan değişkenlerde uygulanmaz.

Bu test sayısal ve kategorik değişkenler için düşünülebilir.

Yukarıda Pearson için verilen kodun içerisindeki corr() fonksiyonuna aşağıdaki değeri vererek Spearman korelasyon sonucunu elde edebilirsiniz.

corr_1 = np.abs(data[data.columns[i]].corr(data[data.columns[j]]
,method = "spearman"))

Kendall Korelasyon Yöntemi

Yine parametrik olmayan veriler için uygulanır. Özellikle ordinal (sıralı) veri yapılarında kullanılır. Yine temel korelasyon mantığında olduğu gibi -1 ile 1 arasında değer alarak değerlendirilir. Yukarıdaki kod içinde aşağıdaki parametre verildiğinde sonuçlar elde edilebilir.

corr_1 = np.abs(data[data.columns[i]].corr(data[data.columns[j]]
,method = "kendall"))

ANOVA Yöntemin

ANOVA (Analysis of Variance), varyansların analizi anlamına gelmektedir. Bu test varsayımları değişkenler arasında doğrusal bir ilişki ve normal dağılımdır. Genellikle Girdi veya çıktı değişkenlerinden birisinin kategorik olması durumlarında kullanılır. ANOVA testi kategorik değişken içinde yer alan gruplarının ortalamasının istatistiksel olarak birbirinden farklı olup olmadığını söyler.

Eğer ANOVA sonucu örneğin girdi değişkenindeki gruplar çıktı değişkene göre istatistiksel anlamlılık düzeyinde (P) farklılaşmıyorsa bu değişken modelden çıkarılabilir.

# Gerekli kütüphanelerin kurulması
from sklearn.feature_selection import f_classif
from sklearn.feature_selection import SelectKBest

# Kalmasını istediğiniz değişken sayısı
select_k = 10

# Değişkenlerin seçim stratejisi belirlenir
# f_classif = ANOVA yönteminin kullanılmasıdır
selection = SelectKBest(f_classif, k=select_k).fit(x_train, y_train)

# İlişkili olan değişkenler gösterilir.
features = x_train.columns[selection.get_support()]
print(features)

Chi-Squared (Ki-kare) Yöntemi

Chi-squared (ki-kare) testi girdi ve çıktı iki kategorik değişken arasında istatistiksel anlamlılık düzeyinde ilişki olup olmadığını ölçümler.

Çıktı değişken ile yapılan analizde değişkenin ikili (binary) olması beklenir.

# Gerekli kütüphanelerin kurulması
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest

# Kalmasını istediğiniz değişken sayısı
select_k = 10

# Değişkenlerin seçim stratejisi belirlenir
# chi2 = Ki-kare yönteminin kullanılmasıdır
selection = SelectKBest(chi2, k=select_k).fit(x_train, y_train)

# İlişkili olan değişkenler gösterilir.
features = x_train.columns[selection.get_support()]
print(features)

Yukarıdaki kodun ANOVA için kullanılandan tek farklı selectKbest fonksiyonu içinde chi2 parametresinin kullanılmasıdır.

Mutual Information (Ortaklı Bilgi) Yöntemi

Bilgi teorisi alanından gelen ortaklı bilgi (mutual information), bilgi kazanımının (tipik olarak karar ağaçlarının yapımında kullanılır) özellik seçimine uygulanmasıdır.

Ortaklı bilgi iki değişken arasında hesaplanır ve diğer değişkenin bilinen bir değeri verildiğinde bir değişken için belirsizlikteki azalmayı ölçer.

# import the required functions and object.
from sklearn.feature_selection import mutual_info_classif
from sklearn.feature_selection import SelectKBest

# Kalmasını istediğiniz değişken sayısı
select_k = 10

# Değişkenlerin seçim stratejisi belirlenir
# mutual_info_classif = ortalı bilgi yönteminin kullanılmasıdır
selection = SelectKBest(mutual_info_classif, k=select_k).fit(x_train, y_train)

# İlişkili olan değişkenler gösterilir.
features = x_train.columns[selection.get_support()]
print(features)

Yine SelectKBest fonksiyonu içerisinde mutual_info_classif metodunu kullandığımızda istenilen değişken sayısı kadar çıktı değişken için anlamlı olanları bizim için seçer.

Sonuç

Yukarıdaki kodların arka taraflarında istatistiksel analizler ve anlamlılık düzeyleri yer almaktadır. Her hangi bir filtreleme yönteminin seçiminde girdi değişkenin veya çıktı değişkeninin kategorik mi yoksa sayısal mı olduğu önemlidir. Makine öğrenmesi algoritmalarında sürecin ta başında kullanılabilecek yöntemlerin mantığını kavramak son derece önemlidir.

Serinin Diğer Yazıları:

  1. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Genel Bakış
  2. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Filtreleme Yöntemleri ve Python Kodları
  3. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Sarmal (Wrapper) Yöntemler ve Python Kodları
  4. Makine Öğrenmesinde Değişken Seçimi (Feature Selection) Yazı Serisi: Gömülü (Embedded) Yöntemler ve Python Kodları

--

--