Garfield
YZF Admin
İkili sınıflandırma için scikit-learn kullanarak lojistik regresyon uygulamanın temel yolu; veriyi eğitim ve test kümelerine ayırmak, özellikleri ölçeklemek, modeli eğitmek ve tahminleri uygun metriklerle değerlendirmektir. Aşağıdaki varsayımsal örnekte model, öğrencinin sınav puanı ve çalışma saati bilgisine göre başarılı olup olmayacağını tahmin eder. Çalıştırıldığında test kümesindeki doğruluk, kesinlik, duyarlılık ve F1 skoru görüntülenir.
Lojistik regresyon, bir gözlemin belirli bir sınıfa ait olma olasılığını hesaplayan sınıflandırma yöntemidir. Örneğin çıktı 0 ve 1 ise model, 1 sınıfına ait olasılığı üretir; varsayılan karar eşiği olan 0,5'in üzerindeki olasılıklar genellikle 1, altındakiler 0 olarak sınıflandırılır.
Bu yöntem, özellikle iki sınıflı problemlerde iyi bir başlangıç modelidir. Ancak modelin yüksek doğruluk vermesi tek başına bütün tahminlerin doğru olduğunu kanıtlamaz. Sınıflar dengesizse kesinlik, duyarlılık, F1 skoru ve karışıklık matrisi de incelenmelidir.
Python ortamında pandas ve scikit-learn paketlerinin kurulu olması gerekir. Verinizde hedef sütun ile modele girdi olacak özellik sütunlarını belirleyin. Hedef sütunun iki sınıftan oluşması ve eksik değerlerin işlemden önce ele alınması gerekir.
Aşağıdaki kod, en küçük çalışır örnektir. Veriler varsayımsaldır; kendi çalışmanızda
Kod bloğunda girintinin korunması gerekir.
Karışıklık matrisi gerçek sınıflarla tahmin edilen sınıfları karşılaştırır. Yanlış negatif sayısı yüksekse model gerçek 1 sınıflarını kaçırıyor olabilir; bu durumda yalnızca doğruluğa bakmak yerine duyarlılığı artıracak bir karar eşiği veya sınıf ağırlığı değerlendirilmelidir. Yanlış pozitiflerin maliyeti daha yüksekse kesinlik öncelikli incelenmelidir.
İki sınıfın sayıları belirgin biçimde farklıysa
Bu seçenek her veri setinde sonucu iyileştirmez.
Sayısal olmayan sütunlar doğrudan
Sonraki adım, test sonuçlarını problemdeki hata maliyetleriyle birlikte değerlendirmektir. Yanlış tahminlerin hangi türünün daha önemli olduğunu belirlemeden yalnızca en yüksek doğruluk değerini seçmek, gerçekte daha yararlı modeli bulmayı garanti etmez.
Lojistik regresyon ne yapar?
Lojistik regresyon, bir gözlemin belirli bir sınıfa ait olma olasılığını hesaplayan sınıflandırma yöntemidir. Örneğin çıktı 0 ve 1 ise model, 1 sınıfına ait olasılığı üretir; varsayılan karar eşiği olan 0,5'in üzerindeki olasılıklar genellikle 1, altındakiler 0 olarak sınıflandırılır.
Bu yöntem, özellikle iki sınıflı problemlerde iyi bir başlangıç modelidir. Ancak modelin yüksek doğruluk vermesi tek başına bütün tahminlerin doğru olduğunu kanıtlamaz. Sınıflar dengesizse kesinlik, duyarlılık, F1 skoru ve karışıklık matrisi de incelenmelidir.
Gerekli hazırlık
Python ortamında pandas ve scikit-learn paketlerinin kurulu olması gerekir. Verinizde hedef sütun ile modele girdi olacak özellik sütunlarını belirleyin. Hedef sütunun iki sınıftan oluşması ve eksik değerlerin işlemden önce ele alınması gerekir.
- Gerekli paketleri kurun. Komut satırında aşağıdaki komutu çalıştırın. Paketler zaten kuruluysa bu adımı tekrar etmeniz gerekmez.
Python:
pip install pandas scikit-learn
Adım adım lojistik regresyon uygulaması
Aşağıdaki kod, en küçük çalışır örnektir. Veriler varsayımsaldır; kendi çalışmanızda
X değişkenini özelliklerinizle, y değişkenini hedef sütununuzla değiştirin.- Veriyi ve hedef değişkeni hazırlayın.
Xmodelin kullanacağı sayısal özellikleri,yise tahmin edilmek istenen sınıfı içerir. Bu örnekte hedef değerler 0 ve 1'dir. - Veriyi eğitim ve test kümelerine ayırın.
test_size=0.25verinin dörtte birini test için ayırır.stratify=ysınıfların iki kümeye mümkün olduğunca dengeli dağılmasına yardımcı olur. - Ölçekleme ve modeli tek işlem hattında birleştirin.
StandardScalerözellikleri benzer ölçeğe getirir.Pipelinekullanılması, test verisinin ölçekleme sırasında yanlışlıkla eğitime sızmasını önler. - Modeli yalnızca eğitim verisiyle eğitin.
fitçağrısından sonra model, özelliklerle hedef sınıflar arasındaki ilişkiyi öğrenir. - Test verisi üzerinde tahmin yapın.
predictsınıf etiketlerini,predict_probaise sınıf olasılıklarını üretir. Olasılık sütunlarının sırasımodel.classes_ile aynıdır. Bu örnekte sınıflar[0, 1]olduğundan[:, 1], 1 sınıfının olasılığını seçer; farklı etiketlerde ilgili sınıfın sütun indeksini kontrol edin. - Sonuçları birden fazla metrikle değerlendirin. Doğruluk genel başarıyı, kesinlik 1 tahminlerinin ne kadarının doğru olduğunu, duyarlılık gerçek 1'lerin ne kadarının yakalandığını, F1 skoru ise kesinlik ve duyarlılığın dengeli özetini gösterir.
Python:
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import (
accuracy_score,
classification_report,
confusion_matrix,
)
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
# Varsayımsal veri: çalışma saati, sınav puanı ve başarı etiketi
veri = pd.DataFrame({
"calisma_saati": [1, 2, 2, 3, 4, 5, 6, 7, 8, 9],
"sinav_puani": [35, 42, 48, 50, 58, 65, 70, 78, 85, 92],
"basarili": [0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
})
X = veri[["calisma_saati", "sinav_puani"]]
y = veri["basarili"]
X_egitim, X_test, y_egitim, y_test = train_test_split(
X,
y,
test_size=0.25,
random_state=42,
stratify=y,
)
model = Pipeline([
("olcekleme", StandardScaler()),
("lojistik_regresyon", LogisticRegression(max_iter=1000)),
])
model.fit(X_egitim, y_egitim)
tahmin = model.predict(X_test)
olasilik = model.predict_proba(X_test)[:, 1]
print("Doğruluk:", accuracy_score(y_test, tahmin))
print("Karışıklık matrisi:")
print(confusion_matrix(y_test, tahmin))
print("Sınıflandırma raporu:")
print(classification_report(y_test, tahmin, zero_division=0))
print("1 sınıfı olasılıkları:", olasilik)
Kod bloğunda girintinin korunması gerekir.
tahmin ve olasilik satırlarının başında fazladan boşluk bulunmamalıdır. Düzeltilmiş bölüm şu biçimde olmalıdır:
Python:
tahmin = model.predict(X_test)
olasilik = model.predict_proba(X_test)[:, 1]
Sonuçları nasıl yorumlamalısınız?
accuracy_score örneğin 0,80 çıkarsa test kümesindeki gözlemlerin yüzde 80'inin doğru sınıflandırıldığı anlamına gelir. Bu değer, modelin yeni ve farklı verilerde de aynı başarıyı göstereceğini kanıtlamaz; test kümesinin küçük olması sonucu değişken hâle getirebilir.Karışıklık matrisi gerçek sınıflarla tahmin edilen sınıfları karşılaştırır. Yanlış negatif sayısı yüksekse model gerçek 1 sınıflarını kaçırıyor olabilir; bu durumda yalnızca doğruluğa bakmak yerine duyarlılığı artıracak bir karar eşiği veya sınıf ağırlığı değerlendirilmelidir. Yanlış pozitiflerin maliyeti daha yüksekse kesinlik öncelikli incelenmelidir.
İki sınıfın sayıları belirgin biçimde farklıysa
class_weight="balanced" seçeneği denenebilir:
Python:
LogisticRegression(max_iter=1000, class_weight="balanced")
Bu seçenek her veri setinde sonucu iyileştirmez.
class_weight ayarını ve karar eşiğini eğitim verisi içindeki çapraz doğrulama veya ayrı doğrulama kümesiyle seçin; önem verdiğiniz metriği burada karşılaştırın. Test kümesini ayar seçimine katmayın, seçilen son modelin bağımsız değerlendirmesine ayırın.Gerçek veriye uyarlarken dikkat edilecek noktalar
Sayısal olmayan sütunlar doğrudan
StandardScaler içine verilemez; kategorik sütunlar için uygun kodlama gerekir. Eksik değerleri eğitim ve test kümeleri ayrıldıktan sonra tutarlı bir yöntemle işlemek, veri sızıntısını önlemek açısından önemlidir. Modeli tek bir eğitim-test bölmesi yerine çapraz doğrulama ile karşılaştırmak daha güvenilir bir değerlendirme sağlayabilir.Sonraki adım, test sonuçlarını problemdeki hata maliyetleriyle birlikte değerlendirmektir. Yanlış tahminlerin hangi türünün daha önemli olduğunu belirlemeden yalnızca en yüksek doğruluk değerini seçmek, gerçekte daha yararlı modeli bulmayı garanti etmez.
Son düzenleme: