Özellik Oluşumu ve Özellik Seçimi(Feature Selection)-2

Merhaba Arkadaşlar,

Özellik seçimi ile ilgili yazı serisinin 2.yazısını okumaktasınız, eğer ilk yazıyı okumadıysanız ilk yazıyı okumanız konu bütünlüğünü anlamak adına faydanıza olacaktır. İlk yazıda temel temizlik ve bazı istatistiksel yöntemleri açıklamaya çalıştım. En basit yöntem olan tüm değişkenlerin tüm kombinasyonlarını kullanarak karar verme süreci çok uzun ve maliyetli bir işlem olduğunu söylemiştim.

1.yazıda anlattığımız filtre yöntemlerinde değişkenler ile hedef değişken arasındaki ilişkiye tek başına bakılırdı. Yani tek elemanlı olan alt küme denemeleri gibi düşünebiliriz. Peki o anlamlı olmayan değişken başka bir değişken ile bir araya geldiğinde hedef değişken üzerinde bir anlam ifade edebilirmi diye bakmıyordu. Bu da bazı şeyleri gözden kaçırmamıza sebep olabilir. İşte bu farklı kombinasyonları beraber kullanıp sonrasında o değişkeni kullanıp kullanmayacağımıza karar vermek için sarmal yöntemler var.

Sarmal yöntemler dediğimiz yöntemler de tüm değişkenlerin tüm o alt kümelerin bazılarını dener ama bu deneme sürecinde bazı akıllı seçimler yapar ki mümkün olan en kısa sürede en doğru seçimi yapalım.

Ardışık olarak değişkenleri ekleyerek ve çıkartarak seçme (Sarmal Yöntemler- Wrapped Methods)
i) Ardışık İleri Yönde Seçim ( Sequential Forward Selection (SFS))
ii) Ardışık Geri Yönde Seçim ( Sequential Backward Selection (SBS))
iii) L ekle- R Çıkar ( plus l – minus r)
iv) Ardışık İleri Yönde Kayan Seçim ( Sequential Forward Floating Selection (SFFS))
v) Ardışık Geri Yönde Kayan Seçim ( Sequential Backward Floating Selection (SBFS)

i. Ardışık İleri Yönde Seçim ( Sequential Forward Selection (SFS))

Bu yöntemin adı step forward selection (İleri yönlü arama seçimi) olarakta geçiyor.

Bu yöntemde ilk olarak tüm özellikleri hedef değişken ile arasındaki ilişkiye bakarak en fazla hedef değişkeni etkileyen yani açıklayan özelliği seçerek başlar. Tüm özellikleri teker teker model sürecine sokar. En iyi performansı gösteren özellik bu ilk seçtiğin özellik olur.

Bu ilk özellik yanına hangi diğer değişkeni koyarsak en iyi sonucu elde ederiz sorusunun peşine düşerek tekrar tüm değişkenleri deneyerek en iyi 2’li performans gösteren değişkenleri bulmaya çalışır. Sonrasında en iyi 3. değişken ne olacaktır diye aynı şekilde denenmeye devam eder. Önceden verilen durdurma kriteri yani tamamdır diyebileceğimiz kritere gelene kadar bu döngü devam eder.

Python kodunda göreceğiniz SFS içindeki algoritmayı probleminize göre belirleyeceksiniz. Sınıflandırma problemi veya regresyon problemine göre uygun bir algoritma seçmeniz gerekir tabi ki. Scoring için de aynı şekilde, sınıflandırma probleminiz için accuracy ve roc-auc gibi metricleri regresyon için r2 ve root mean suqared error gibi metricler kullanılabilir.

SFS içindeki tanımlanacak parametreler aslında (estimator, k_features, forward, floating, scoring , cv) tüm çalışacak yapıyı açıklıyor.

Yöntem direk hazır bir kod ile 30 özellikten kaç adet özelliği seçeciğini otomatik olarak belirlemiyor. K_features’a 5 yazarsanız en iyi 5’liyi seçmek için uğraşıyor fakat bu en ideal çözüm olmayabilir. En ideal çözüm 10’lu veya 15’li bir kombinasyonda olabilir. Bu yüzden k_features parametresini max tutup her adetteki en iyi kombinasyonun sonuçlarını sıraladıktan sonra en doğru sonuca varabiliriz. Bunu daha anlaşılır olması için kullanılan özellik sayısı ve performans sonuca göre bir görselleştirme kullanılabilir.

Örnek:

import pandas as pd
from sklearn.datasets import load_breast_cancer
cancer= load_breast_cancer()
can=pd.DataFrame(cancer.data, columns=cancer.feature_names)
X, y = load_breast_cancer(return_X_y=True)
import mlxtend
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from mlxtend.plotting import plot_sequential_feature_selection as plot_sfs
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.linear_model import LogisticRegression
# Sequential Forward Selection(sfs)
sfs = SFS(LogisticRegression(),
           k_features=30,
           forward=True,
           floating=False,
           scoring = 'accuracy',
           cv = 0)
sfs1=sfs.fit(X, y)
fig1 = plot_sfs(sfs1.get_metric_dict(), kind='std_dev')
result_LR = pd.DataFrame.from_dict(sfs1.get_metric_dict(confidence_interval=0.90)).T
result_LR.sort_values('avg_score', ascending=0, inplace=True)
result_LR.head()

best_features_LR = result_LR.feature_idx.head(1).tolist()
select_features_LR = can.columns[best_features_LR]
select_features_LR

ii. Ardışık Geri Yönde Seçim ( Sequential Backward Selection (SBS))

Bu yöntemin adı backward feature elimination ( Geri yönlü arama seçimi) olarakta geçiyor.
Bu yöntem ilk olarak ilk olarak tüm özellikleri aynı anda kullanarak bir model performansı hesaplar. Sonrasında sırasıyla her bir değişkeni çıkartarak model kurmayı dener ve en kötü performansa sebep olan o değişkeni eler. Sonrasında tekrar değişkenleri sırasıyla çıkartarak model performansını en kötü etkileyen özelliği tespit eder ve o değişkeni eler. Ne zaman model performansı artık değişken çıkardığında artış değil azalış gösterirse o zaman durma işlemi gerçekleşir.

 

İleri yönde seçim için verdiğim örnekte forward=False olarak yazarsanız, geri yönde seçim olarak çalışır. O yüzden aynı kodu tekrar buraya yazmıyorum. Burada dikkat edilecek nokta k_features olarak max değişken adedi yerine min olan 1 değişkenini yazmak gerekir, algoritma geriye doğru geldiği için tüm değişkenlerden en az değişken kullanmaya kadar gelmesini sağlıyoruz.

SFS & SBS ile çalışırken dikkat edilmesi gereken başka noktalar da vardır:
SFS’nin her yinelemede özellik eklediğini bildiğimiz için, başlangıçta eklediğimizde yararlı olan bir özellik ancak daha fazla özellik ekledikten sonra artık yararlı olmayan bir sorun oluşabilir. Bu noktada, bu tür özellikleri kaldırmanın bir yolu yoktur.
Aynı şey SBS için de geçerlidir. SFS ve SBS tek yönlü çalışır o yüzden sonradan o yöntemin tersi bir hareketi gerçekleştirmez.
İşte bu yöntemleri biraz harmanlayacak 3 seçenek vardır.

iii. L ekle- R Çıkar ( plus l – minus r selection)

Bu yöntem SFS ve SBS yöntemini birleştiyor. Aslında ardarda iki yöntemi uyguluyoruz. Algoritmanın iki çalışma şekli var. Algoritma boş bir kümeden başlar, önce her turda L adetteki özellikleri ekler ve sonra metrik değerlendirme değerinin optimum olmasını sağlamak için R adetteki özelliklerini kaldırır. Alternatif olarak, algoritma tüm kümeden başlar, her turdaki R adetteki özelliklerini ortadan kaldırır ve daha sonra değerlendirme fonksiyonu değerini en uygun hale getirmek için L adetteki özellikleri ekler. L ve R sabittir, yani bir optimum seçilip oluşturulmamıştır. Kullanıcı tarafından girilen sabitlerdir. Dolayısıyla doğru adetler girilmediği sürece en optimum sonuca gidilmez. Bu adetlerin kullanıcı dışında algoritmanın en doğru adetlere karar vererek ilerlemesi de kayan yapılarda mümkündür.

iv) Ardışık İleri Yönde Kayan Seçim ( Sequential Forward Floating Selection (SFFS))
Ardışık ileri yönde kayan seçim (Sequential Forward Floating Selection- SFFS) yöntemi, l ekle- r çıkar yöntemine alternatif olarak Pudil tarafından önerilmiştir.
l ekle – r çıkar algoritmasında yer alan l ve r değerleri belirlenirken herhangi bir teorik yapı kullanılmadığından elde edilen sonuç belirlenen alan l ve r değerlerine bağlı kalmaktadır. Bu sorunu giderebilmek adına ardışık ileri yönde kayan seçim algoritmasında alan l ve r değerlerini sabitlemek yerine kayan bir yapı önerilmiştir. Bu sayede, özellik seçiminin herhangi bir adımında mevcut sınıflama başarısı daha yüksek bir değere ulaşıncaya kadar aynı yönde hareket edilir. Bu yöntemde boş kümeden başlayarak ilerler.

Bu yöntemle çalışmak için örnekte forward=true ve floating=True yapmanız yeterli olacaktır.

v) Ardışık Geri Yönde Kayan Seçim ( Sequential Backward Floating Selection (SBFS)

Ardışık ileri yönde kayan seçim (Sequential Forward
Floating Selection- SFFS) yöntemi ile aynı mantıkta çalışır. Bu yöntem tüm kümeden yani tüm özellikleri kullanarak başlar.

Bu yöntemle çalışmak için örnekte forward=false ve floating=True yapmanız yeterli olacaktır.

SONUÇ

Sarmal yöntemleri kullanarak daha akılcı bir seçme işlemi yaptık. Tüm değikenleri denemese de farklı algoritmalarda farklı adette çok sayıda kombinasyon denemeleri yapmıştır. Tabi ki bu denemelerin performans süreleri de olacaktır. Biz bu kadar seçme işleriyle uğraşacak mıyız peki? Kesinlikle evet. Özellik oluşumu ve özellik seçimi kısmını ne kadar akılcı yaparsanız modelleme süreciniz o kadar rahat ve kaliteli geçecektir.

Özellik seçiminin 3. yazısında görüşmek dileğiyle, gelişim için sorularınız ve yorumlarınız olursa çok memnun olurum.

Kaynak:
https://dergipark.org.tr/tr/download/article-file/552933
http://rasbt.github.io/mlxtend/user_guide/feature_selection/SequentialFeatureSelector/
http://epubs.surrey.ac.uk/mwg-internal/de5fs23hu73ds/progress?id=UXgzGMv4KhX0QJJ0WFNEba8JHYKFinPDObdMtrdy7Gg,&dl

Görsel Kaynak :
Photo by Tetiana SHYSHKINA on Unsplash
https://www.liberaldictionary.com/backward-and-forward

Yazar Hakkında
Toplam 8 yazı
Taner Kocakafa
Taner Kocakafa
Yıldız Teknik Üniversitesi İstatistik Bölümü Mezunu. 2012’den beri perakende ve sigorta sektöründe analitik konularında çalışmıştır. Şirket içi analitik bakış açısı ve analitik araçlarla ilgili eğitimler vermektedir.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara