Recursive elimination
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 84/112
- 5 dk
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
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
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.
rfe = RFE(model, n_features_to_select=5, ____=2)
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 |