• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Scikit-learn ile özellik seçimi nasıl yapılır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
Özellik seçimi için önce eğitim verisini ve hedef değişkeni ayırın, ardından seçme işlemini yalnızca eğitim katında öğrenen bir Pipeline içine koyun. Başlangıç için SelectKBest ile en iyi k özelliği seçebilir, daha gelişmiş bir seçim için RFE veya çapraz doğrulamalı RFECV kullanabilirsiniz. Seçimden sonra modeli test verisinde değerlendirin; seçilen özellikler modelin performansını artırabilir veya gereksiz değişkenleri azaltabilir, ancak tek başına daha iyi genelleme garantisi vermez.

Hangi özellik seçimi yöntemi kullanılmalı?​


Özellik seçimi, veri kümesindeki bütün sütunları kullanmak yerine modele daha yararlı olanları bırakma işlemidir. Amaç; gürültüyü azaltmak, modeli sadeleştirmek, eğitim süresini kısaltmak ve bazı durumlarda aşırı öğrenme riskini düşürmektir.
YöntemNasıl çalışır?Ne zaman tercih edilir?
SelectKBestHer özelliği istatistiksel skoruna göre değerlendirir ve en iyi k tanesini bırakır.Hızlı bir başlangıç ve çok sayıda sütunun ön elemesi için.
RFEModeli tekrar tekrar eğitir ve daha az önemli özellikleri eler.Belirli bir modelin önem sıralamasını kullanmak için.
RFECVFarklı özellik sayısını çapraz doğrulamayla karşılaştırır.Kaç özellik bırakılacağı bilinmiyorsa.

SelectKBest ile temel uygulama​


Aşağıdaki örnek varsayımsaldır. Sınıflandırma problemi için sayısal özelliklerden en iyi beşini seçer ve seçimi model eğitiminden önce değil, Pipeline içinde gerçekleştirir. Böylece test verisinin özellik seçimini etkilemesi engellenir.

Ön koşul olarak scikit-learn kurulu olmalıdır. Verinizde metin veya kategorik sütunlar varsa önce uygun kodlama yapılmalı; örnekteki X matrisi sayısal ve eksik değerleri işlenmiş özelliklerden oluşmalıdır.
  1. Veriyi özellikler ve hedef olarak ayırın. X özellik sütunlarını, y ise tahmin edilmek istenen sınıfı içermelidir.
  2. Eğitim ve test kümelerini ayırın. Test kümesini özellik seçimi dahil hiçbir eğitim işlemine katmayın; test kümesi yalnızca en son değerlendirme için kullanılmalıdır.
  3. Seçim ve modeli aynı Pipeline içine alın. SelectKBest(score_func=f_classif, k=5) sınıflandırma için en yüksek istatistiksel skora sahip beş özelliği seçer.
  4. Pipeline’ı yalnızca eğitim verisiyle eğitin. fit çağrısından sonra seçici, hangi sütunların tutulacağını eğitim verisinden öğrenir ve model bu dönüştürülmüş veride eğitilir.
  5. Test kümesinde tahmin yapın ve metriği hesaplayın. Test verisi aynı seçim adımlarından otomatik olarak geçirilir; doğruluk gibi metriği, seçimin daha önce görülmemiş verideki etkisini gösterir.
Python:
from sklearn.datasets import load_breast_cancer
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

veri = load_breast_cancer()
X, y = veri.data, veri.target

X_egitim, X_test, y_egitim, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

model = Pipeline([
    ("secim", SelectKBest(score_func=f_classif, k=5)),
    ("olcekleme", StandardScaler()),
    ("siniflandirici", LogisticRegression(max_iter=2000))
])

model.fit(X_egitim, y_egitim)
tahmin = model.predict(X_test)

print("Doğruluk:", accuracy_score(y_test, tahmin))
print("Seçilen sütunlar:", model.named_steps["secim"].get_support())

Çıktıdaki Seçilen sütunlar dizisi, her sütun için True veya False değerleri verir. True olan sütunlar modelde kullanılmıştır. Bu çıktı yalnızca seçimin hangi sütunları tuttuğunu gösterir; bu sütunların nedensel olarak önemli olduğunu veya başka bir veri kümesinde mutlaka en iyi sonucu vereceğini kanıtlamaz.

Özellik sayısı bilinmiyorsa RFECV kullanın​


SelectKBest kullanırken k değerini sizin belirlemeniz gerekir. Uygun sayı bilinmiyorsa RFECV, farklı özellik sayılarının çapraz doğrulama sonuçlarını karşılaştırarak uygun sayıyı seçebilir. Bu yöntem daha fazla model eğitimi gerektirdiğinden, çok büyük veri kümelerinde daha yavaş çalışabilir. Ölçeklendirmeyi RFECV’nin içindeki model Pipeline’ına koyun; böylece her çapraz doğrulama katı ölçekleme parametrelerini yalnız kendi eğitim bölümünden öğrenir. RFECV’den önce bütün eğitim verisini ölçeklemek, iç doğrulama katlarına bilgi sızdırabilir.

Python:
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

# RFECV'nin her eğitim katında ölçeklemeyi yeniden öğrenin.
taban_model = Pipeline([
    ("olcekleme", StandardScaler()),
    ("model", LogisticRegression(max_iter=2000))
])

secici = RFECV(
    estimator=taban_model,
    importance_getter="named_steps.model.coef_",
    cv=StratifiedKFold(n_splits=5, shuffle=True, random_state=42),
    scoring="accuracy",
    min_features_to_select=5
)

model = Pipeline([
    ("secim", secici),
    ("olcekleme", StandardScaler()),
    ("siniflandirici", LogisticRegression(max_iter=2000))
])

model.fit(X_egitim, y_egitim)
print("Seçilen özellik sayısı:", model.named_steps["secim"].n_features_)
print("Seçilen sütunlar:", model.named_steps["secim"].support_)

RFECV sonucunda seçilen özellik sayısı, kullanılan model, çapraz doğrulama düzeni ve değerlendirme metriğine bağlıdır. Sonuç beklenenden fazla veya az özellik içeriyorsa scoring, çapraz doğrulama bölme yöntemi ve min_features_to_select değerlerini veri kümenizin amacına göre yeniden değerlendirin.

En sık yapılan hata: seçimi test verisine göre yapmak​


Örneğin SelectKBest nesnesini bütün X üzerinde fit_transform etmek, test verisinin sütun seçiminde kullanılmasına yol açabilir. Bu, test sonucunu gerçekte olduğundan iyimser gösterebilir. Seçiciyi ve modeli Pipeline içine koymak bu veri sızıntısını önleyen temel uygulamadır.

Son değerlendirmede yalnızca doğruluk değerine bakmayın. Sınıflar dengesizse kesinlik, duyarlılık, F1 skoru veya uygun başka bir metrik de incelenmelidir. Özellik seçimi performansı düşürüyorsa daha fazla özellik kullanmayı, farklı bir seçim yöntemi denemeyi veya modelin özellik seçimine zaten duyarlı olup olmadığını kontrol etmeyi düşünün.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Geri
Üst