Miuul İnceleme

Makine Öğrenmesinde Değişken Seçimi: Sarmal Yöntemler

Bu makalede değişken seçiminde kullanılan sarmal yöntemleri anlatıyor ve uygulamalarla model performansına olan etkilerini değerlendiriyorum.

Sarmal yöntemler, veri seti içerisindeki değişken alt küme kombinasyonlarından hangisinin makine öğrenmesi modelinde daha iyi performans gösterdiğini bulmak için tüm olası değişken kombinasyonlarını tarayarak çalışmaktadır. Tüm değişken kombinasyonlarını deneyeceği için hesaplama açısından pahalıdır. Bu yöntem greedy algoritması olarak da adlandırılır.
Artist: Studio Process

Tüm olası kombinasyonların performansı değerlendirilirken çeşitli sınıflandırıcılar ve kriterler kullanılır. Makine öğrenmesi probleminin türüne göre değerlendirme metrikleri veya seçilecek değişken sayısı sınıflandırıcı ve kriterlere örnektir. Eğer bir sınıflandırma problemi ise accuracy, recall, precision, f1-score’u vb. metrikler kullanılabilir. Hangi sarmal yöntemin kullanıldığına göre değişken çıkartarak veya ekleyerek seçilen sınıflandırma metriğinde en iyi performansı gösteren değişken kombinasyonu bulma işlemi belirlenen değişken sayısı kriterine ulaşana kadar devam eder.


Sarmal yöntemler :

  • Step Forward
  • Step Backward
  • Exhaustive Search
     

1. Step Forward Feature Selection
Tek bir değişkenden oluşan tüm alt kümeleri değerlendirerek başlar. Her bir feature için modeller kurulur.Bütün bu modellerin performansları değerlendirilir ve en iyi performansı gösteren değişken seçilir.

Seçilen değişkene veri kümesindeki diğer değişkenler tek tek eklenerek yeni alt kümeler oluşturulup, yeniden modeller kurulur. Bütün modellerin performansı değerlendirilip en iyi performansı gösteren seçilir.

Bu aşamalar belirlenen kritere ulaşılana kadar devam eder.

Uygulama

Sarmal yöntemleri uygulamak için Python kütüphanesinden MLXtend’i kullanacağız. 

Uygulamada house price veri seti (https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data) üzerinden ilerleyeceğiz . Ev fiyat tahmin modeli oluşturulması istenmektedir.

İlk olarak gerekli kütüphaneleri import ediyoruz ve veri ön işlemelerini gerçekleştiriyoruz. Basit şekilde ilerlemek istediğim için sadece sayısal değişkenleri seçip, boş değer içeren değişkenleri veri setinden çıkarttım. Veri setinin son hali 1460 gözlem, 34 değişkenden oluşmaktadır.

Output:

Veri setini eğitim ve test olarak ikiye ayırıyoruz. Step forward feature selection için MLXtend kütüphanesinden SFS’yi kullanıyoruz. SFS’nin içerisinde belirtilmesi gereken parametreler:

  • Kullanılacak model
  • k_features, durdurma kriteri, belirtilen sayıda değişkene ulaşıldığında durur
  • forward, True is forward selection yapılacağı False ise backward selection yapılacağını ifade eder
  • scoring, değerlendirme metriği
  • cv, cross validation için fold değeri

Aşağıdaki kodu incelediğimizde, random forest algoritmasını kullanıldığını, forward selection yapıldığını, feature sayısı 20'ye ulaşıldığında duracağını, değerlendirme metriğinin r2 , cross validation için fold değerinin ise 5 olduğunu görüyoruz.


Output:

Çıktıyı incelediğimizde, 17. özelliği ekledikten sonra performansın düştüğü görülüyor. 18., 19. ve 20. özelliğin eklenmesi modelin performansını arttırmadı. 

plotting.plot_sequential_feature_selection ile sonuçların performanısı görselleştirebiliriz.

Output:

subsets_ aracılığıyla gerçekleşen 20 adımın her birinde seçilen değişkenleri görebiliriz. 


Output:

k_features’i 20 seçtiğimiz için 20 değişken seçilene kadar süreç devam etmekte ama çıktı olarak sadece ilk 8 adımı gösterdim. İncelediğimizde ilk adımda tek başına en iyi performansı gösteren değişkenin OverallQual olduğunu görüyoruz. OverallQual değişkeniyle beraber en iyi model performansını gösteren ikinci değişken ise GarageCars. Her adımda model performansını en iyi yapan değişken seçilerek devam edilmekte.

En iyi performans 17 değişken ile gerçekleşmişti. 17.adımdaki değişkenlerin isimlerini bir listeye atalım.

Output:

Veri setindeki tüm değişkenlerle oluşturulan model ile seçilen 17 değişkenle oluşturulan modelin performansını kıyaslıyalım.


Output:

Output:

17 değişkenle oluşturulan modelin 33 değişkenle oluşturulan model kadar iyi performans gösterdiğini gözlemlemiş olduk.



 

2. Step Backward Feature Selection
Tüm değişkenlerle tek bir model oluşturulur ardından veri setindeki tüm değişkenler ilk modelden ayrı ayrı çıkarılır ve tekrar yeni modeller oluşturulur.

Çıkarıldıktan sonra en iyi model performansını sağlayan değişken çıkarılacak ilk değişken olarak seçilir. Ve onun çıkarıldığı model üzerinden İşlem aynı şekilde tekrarlanır.

Uygulama
Step backward feature selection uygulamasını da house price verisi üzerinde gerçekleştireceğiz. Gerekli kütüphanelere yükleyip, veriyi hızlı şekilde uygulama yapabileceğimiz bir hale getiriyoruz.

Output:

Veri setini train ve test olarak ayırıyoruz. Random forest algoritmasını kullanarak, backward selection yapıyoruz. Değişken sayısı 13'e ulaşıldığında sona erecek.

Output:

plotting.plot_sequential_feature_selection ile sonuçların performansını görselleştirelim.

Output:

Değişken sayısını 13'e indirmemiz model performansında önemli bir azalmaya sebep olmadığını görüyoruz. 13'un altı da gözlemlenebilir.

Seçilen 13 değişkenin hangi değişkenler olduğuna bakalım.

Output:

Kalan 13 değişkenle kurulan model ile, tüm değişkenlerin olduğu modelin karşılaştırması için modellemeleri ve değerlendirmeleri yapalım.

Output:

Output:

Performansları neredeyse aynı.

 

3. Exhaustive Feature Selection

Veri setindeki tüm değişkenlerin olası tüm kombinasyonlarının modellerini oluşturulur ve performansları değerlendirir. 

Dört değişkenden oluşan bir veri seti olsun. Bir değişkenli olası tüm kombinasyonlar oluşturulur ve modellenir.

2 değişkenli olası tüm kombinasyonlar oluşturulur ve modellenir.


3 değişkenli olası tüm kombinasyonlar oluşturulur ve modellenir.

4 değişkenli olası tüm kombinasyonlar oluşturulur ve modellenir.

Oluşan tüm kombinasyonlardan en iyi performansı gösteren değişken kombinasyonu seçilir.

 

Uygulama
House price verisi üzerinde devam edeceğiz. Gerekli kütüphanelere yükleyip, veriyi hızlı şekilde uygulama yapabileceğimiz bir hale getiriyoruz.

Output:

Veri setini eğitim ve test olarak ikiye ayırıyoruz. Exhaustive feature selection için MLXtend kütüphanesinden EFS’yi kullanıyoruz. EFS’nin içerisinde belirtilmesi gereken parametreler:

  • Kullanılacak model
  • min_features, modelin sahip olması istenilen minimum değer
  • max_features, modelin sahip olması istenilen maksimum değer
  • scoring, değerlendirme metriği



Output:

Minimum 1 ve maksimum 2 değişkenliği tüm olaslı değişken kombinasyonları yapıldı. Çıktıda da görüldüğü gibi toplam kombinasyon sayısı 561.

En iyi kombinasyonu bulmak için best_idx_’i kullanalım.
Output:

En iyi değişken kombinasyonuyla kurulan model ile, tüm değişkenlerin olduğu modelin karşılaştırması için modellemeleri ve değerlendirmeleri yapalım.


Output:

Output:

Exhaustive değişken seçimi hesaplama açısından pahalı olduğu için maksimum değişken sayısını az seçtim, bu nedenle modelin performansının düşük olması kaçınılmaz. Eğer isterseniz maksimum değişken sayısını değiştirerek, performansını daha iyi gözlemleyebilirsiniz.

Umarım faydalı olmuştur, başka yazılarda görüşmek üzere.
 

Referanslar: I - II  

Trigram ile SQL Server'da Aşırı Hızlı Text Arama

Ömer Çolakoğlu

Makine Öğrenmesinde Değişken Seçimi: Filtreleme Yöntemleri

Simge Erek

Graf Teorisi: Bir Resim Bin Kelimeye Bedeldir

Kader Durak

SON İNCELEMELER

GİRİŞ

Aşağıya kaydolduğunuz e-postayı girin. Şifrenizi sıfırlamanız için size bir bağlantı göndereceğiz.

Giriş Ekranına Dön
Şifre sıfırlama talimatları
adresine gönderildi.