CodeBlanks Logo Icon CodeBlanks

Feature importance

Random forest, özellik önem derecesini hesaplar.

Özellik önemi (safsızlık)

feature_importances_, her özelliğin tüm ağaçlardaki bölmelerde safsızlığı ne kadar azalttığının ortalamasıdır. Hızlıdır ama iki zayıflığı vardır: çok farklı değerli (yüksek kardinaliteli) özellikleri kayırır ve eğitim verisine dayanır.

d = load_breast_cancer()
rf.fit(d.data, d.target)
sira = np.argsort(rf.feature_importances_)[::-1][:3]
for i in sira:
    print(d.feature_names[i], round(rf.feature_importances_[i], 3))

Önemler toplamı 1'dir; ilişkili özellikler önemi aralarında paylaşır.

Permütasyon önemi

Daha güvenilir yöntem: bir sütunun değerlerini karıştırıp (ilişkisini bozup) test skorunun ne kadar düştüğüne bakmak. Düşüş büyükse model o özelliğe gerçekten dayanıyordur:

from sklearn.inspection import permutation_importance
r = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=0)
print(r.importances_mean.round(3))

Test verisinde hesaplandığı için ezberlenmiş gürültüyü önemli göstermez; her model türüyle çalışır.

Uygulama Gürültü sütunu

Veriye rastgele sayılardan oluşan bir sütun ekle (son sütun). Orman eğit; gürültü sütununun safsızlık önemini ve permütasyon önemini (n_repeats=5, random_state=0, test verisinde) round(..., 3) ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance

X, y = load_breast_cancer(return_X_y=True)
rng = np.random.default_rng(0)
X = np.column_stack([X[:, :5], rng.random(len(X))])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance

X, y = load_breast_cancer(return_X_y=True)
rng = np.random.default_rng(0)
X = np.column_stack([X[:, :5], rng.random(len(X))])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)

rf = RandomForestClassifier(n_estimators=200, random_state=0).fit(X_train, y_train)
r = permutation_importance(rf, X_test, y_test, n_repeats=5, random_state=0)
print(round(rf.feature_importances_[-1], 3), round(r.importances_mean[-1], 3))

Beklenen çıktı

0.035 -0.014

Soru ve cevaplar

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

1 Rastgele kimlik numarası gibi çok farklı değerli anlamsız bir sütun safsızlık önemini nasıl etkiler?

  • Önemi hep sıfır olur
  • Hata verir
  • Diğer önemleri artırır
  • Yapay olarak yüksek önem alabilir Doğru cevap

Açıklama: Çok değerli sütun ağaçlara çok sayıda bölme fırsatı verir; eğitimde gürültüyü ayırır.

2 Permütasyon önemini hesapla.

Soru
r = ____(rf, X_test, y_test, n_repeats=10, random_state=0)
Cevap
r = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=0)

Açıklama: permutation_importance sklearn.inspection içindedir.

3 Yöntemleri eşleştir.

Kavram Anlamı
feature_importances_ Safsızlık azalması
permutation_importance Karıştırınca skor düşüşü
yüksek kardinalite Safsızlık önemini şişirir
test verisi Permütasyonun güvencesi

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