CodeBlanks Logo Icon CodeBlanks

Recursive elimination

RFE, en az önemli özelliği yinelemeli olarak çıkarır.

Recursive feature elimination

RFE bir modeli tüm özelliklerle eğitir, en önemsiz özelliği (en küçük katsayı ya da önem) atar ve istenen sayıya kadar tekrarlar. Özellikleri birlikte değerlendirdiği için tek değişkenli filtrelerden daha akıllıdır:

from sklearn.feature_selection import RFE
rfe = RFE(LogisticRegression(max_iter=1000), n_features_to_select=6, step=1).fit(Xs, y)
print(rfe.support_)
print(rfe.ranking_)   # 1 = seçildi, büyük sayı = erken atıldı

Model katsayılarına dayandığı için ölçekleme önemlidir; step her turda kaç özellik atılacağıdır.

RFECV

Kaç özellik tutulacağı bilinmiyorsa RFECV her adımda CV skorunu ölçer ve en iyi sayıyı kendisi seçer:

from sklearn.feature_selection import RFECV
rc = RFECV(LogisticRegression(max_iter=1000), step=1, cv=5).fit(Xs, y)
print(rc.n_features_)
print(rc.cv_results_["mean_test_score"].round(3))

Maliyeti yüksektir: her özellik sayısı için CV yapılır. Çok sütunlu veride step büyütülür.

Uygulama RFE ile seçim

Ölçekli yapay veride RFE(LogisticRegression(max_iter=1000), n_features_to_select=6) eğit. Seçilen indeksleri (np.where(rfe.support_)[0]) ve bunlardan kaçının ilk 6 sütunda olduğunu alt alta yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=400, n_features=20, n_informative=4, n_redundant=2, shuffle=False, random_state=0)
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE

Xs = StandardScaler().fit_transform(X)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=400, n_features=20, n_informative=4, n_redundant=2, shuffle=False, random_state=0)
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE

Xs = StandardScaler().fit_transform(X)

rfe = RFE(LogisticRegression(max_iter=1000), n_features_to_select=6).fit(Xs, y)
idx = np.where(rfe.support_)[0]
print(idx)
print((idx < 6).sum())

Beklenen çıktı

[ 0  1  2  3  4 19]
5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>ranking_</code> değeri 1 olan özellik ne anlama gelir?

  • İlk atılandır
  • En kötüsüdür
  • Hesaplanmamıştır
  • Seçilen özelliklerdendir Doğru cevap

Açıklama: Seçilenlerin hepsi 1 sırasını alır; atılanlar atılma sırasına göre büyür.

2 Her turda 2 özellik at.

Soru
rfe = RFE(model, n_features_to_select=5, ____=2)
Cevap
rfe = RFE(model, n_features_to_select=5, step=2)

Açıklama: step tam sayı ya da oran olabilir.

3 Öznitelikleri eşleştir.

Kavram Anlamı
support_ Seçilenlerin maskesi
ranking_ Atılma sırası
n_features_ RFECV'nin seçtiği sayı
step Tur başına atılan

Orta seviye bölümündeki tüm dersler