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

Scikit-learn ile lojistik regresyon nasıl uygulanır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
İ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 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.
  1. 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.
  1. Veriyi ve hedef değişkeni hazırlayın. X modelin kullanacağı sayısal özellikleri, y ise tahmin edilmek istenen sınıfı içerir. Bu örnekte hedef değerler 0 ve 1'dir.
  2. Veriyi eğitim ve test kümelerine ayırın. test_size=0.25 verinin dörtte birini test için ayırır. stratify=y sınıfların iki kümeye mümkün olduğunca dengeli dağılmasına yardımcı olur.
  3. Ölçekleme ve modeli tek işlem hattında birleştirin. StandardScaler özellikleri benzer ölçeğe getirir. Pipeline kullanılması, test verisinin ölçekleme sırasında yanlışlıkla eğitime sızmasını önler.
  4. 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.
  5. Test verisi üzerinde tahmin yapın. predict sınıf etiketlerini, predict_proba ise 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.
  6. 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:

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.
Robotlar:
  • Anthropic
Geri
Üst