Python ile Lojistik Regresyon Uygulaması: Adım Adım Kılavuz

Lojistik Regresyon Nedir?

Lojistik regresyon, sınıflandırma problemleri için yaygın olarak kullanılan bir istatistiksel yöntemdir. Temelde, bir bağımlı değişkenin belirli bir bağımsız değişkenler kümesine bağlı olarak iki veya daha fazla sınıfa ait olma olasılığını tahmin etmek için kullanılır. İkili sınıflandırma problemlerinde sıklıkla tercih edilen bu yöntem, verilerdeki belirli özelliklerin (özelliklerin değişmesi) belirli bir sonucun olasılığını nasıl etkilediğini anlamamıza yardımcı olur.

Lojistik regresyonun temel mantığı, veriyi bir doğrusal fonksiyonla temsil etmektir, ancak bu fonksiyonun çıktısını bir olasılığa dönüştürmek için sigmoid fonksiyonu gibi bir aktivasyon fonksiyonu kullanır. Sonuç olarak, modelin çıktısını 0 ile 1 arasında bir değer olarak alırız; bu, belirli bir sınıfa ait olma olasılığını temsil eder. Örneğin, bir e-posta iletisinin spam olup olmadığını tahmin etmek gibi uygulamalarda lojistik regresyon sıkça kullanılmaktadır.

Peki, Python’da lojistik regresyon uygulamak için nasıl bir yol izlemelisiniz? Şimdi, bu süreci adım adım inceleyeceğiz. Python’da lojistik regresyon uygulamak için popüler kütüphaneler arasında Scikit-learn bulunmaktadır. Bu kütüphane, makine öğrenimi algoritmalarını oldukça basit bir şekilde kullanmanıza olanak sağlar.

Gerekli Kütüphanelerin Yüklenmesi

Pythonda lojistik regresyon uygulaması geliştirmek için önce gerekli kütüphaneleri yüklememiz gerekiyor. Hem veriyi yönetmek hem de modelimizi kurmak için aşağıdaki kütüphaneleri kullanacağız:

  • Pandas: Veri analizi ve manipülasyonu için.
  • Numpy: İstatistiksel hesaplamalar ve matematiksel işlemler için.
  • Scikit-learn: Makine öğrenimi algoritmalarını doğrulamak ve uygulamak için.

Aşağıdaki komutu kullanarak gerekli kütüphaneleri yükleyebilirsiniz:

pip install pandas numpy scikit-learn

Kurulum tamamlandığında, lojistik regresyon için uygun verilerle başlayabiliriz. Genellikle, klasik bir veri kümesi olan İris veri seti gibi açık bir veri kümesi kullanmak oldukça yararlıdır. Bu veri seti, bitki türlerini sınıflandırmak amacıyla üç farklı çiçek türü için belirli özellikleri içerir.

Veri Setimizin Yüklenmesi ve İncelenmesi

Veri setini incelemek için öncelikle Pandas kütüphanesi ile verimizi yükleyelim. Aşağıdaki kod parçacığı ile İris veri setini Pandas veri çerçevesine yükleyebiliriz:

import pandas as pd

dataset = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                     header=None,
                     names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])

Veri çerçevesini yükledikten sonra, verilerimizi gözlemleyelim. Aşağıdaki komutla veri çerçevemizin ilk birkaç satırını görüntüleyebilirsiniz:

print(dataset.head())

Bu kod parçası, veri çerçevesinin ilk beş satırını gösterecektir. Verimizin düzgün bir şekilde yüklendiğinden ve her bir özellik ile sınıfın doğru bir şekilde temsil edildiğinden emin olun.

Veri Ön İşleme Aşamaları

Modelimizi geliştirmeden önce verilerimizin belirli ön işleme adımlarına tabi tutulması gerekmektedir. Özellikle, verileri normalize etmek, eksik verileri kontrol etmek ve kategorik değişkenleri sayısal bir forma dönüştürmek önemli bir adımdır. Veride eksik değer olup olmadığını kontrol etmek için aşağıdaki kodu kullanabilirsiniz:

print(dataset.isnull().sum())

Eğer eksik değerler varsa bunları doldurmak veya o satırları atmak iyi bir yaklaşımdır. Ayrıca, sınıf değeri (class) kategorik bir değişken olduğundan, bunu sayısal formata dönüştürmemiz gerekecektir. Bunu gerçekleştirmek için aşağıdaki kodu kullanabilirsiniz:

from sklearn.preprocessing import LabelEncoder

label_encoder = LabelEncoder()
dataset['class'] = label_encoder.fit_transform(dataset['class'])

Artık verilerimiz sayısal forma dönüştüğüne göre, verimimizi modelimiz için uygun hale getirebiliriz. Özelliklerimizi ve hedef değişkenimizi tanımlayıp, verimizi eğitim ve test setlerine ayırmalıyız. Bunu yaparken, Scikit-learn kütüphanesinin train_test_split fonksiyonunu kullanacağız:

from sklearn.model_selection import train_test_split

X = dataset.iloc[:, :-1].values  # özellikler
Y = dataset.iloc[:, -1].values   # hedef
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

Lojistik Regresyon Modelinin Oluşturulması

Artık verimizi eğitim ve test setlerine ayırdığına göre, lojistik regresyon modelimizi oluşturabiliriz. Scikit-learn, Lojistik Regresyon sınıfı ile yapmamızı sağlayan kullanıcı dostu bir arayüz sunmaktadır. Modelimizi aşağıdaki kod parçacığı ile oluşturabiliriz:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train, Y_train)

Modelimizi oluşturduktan sonra, eğitmek için eğitim verimizi kullanıyoruz. Eğitim süreci tamamlandığında, modelin ne kadar başarılı olduğunu anlamak için bazı tahminlerde bulunmalıyız. Test verimizi kullanarak tahminler yapabiliriz:

Y_pred = model.predict(X_test)

Y_pred değişkenimiz, test verisinin tahmin edilen sınıflarını içerecektir. Şimdi, modelimizin doğruluğunu değerlendirmek için Scikit-learn kütüphanesinden bir metrik kullanabiliriz:

from sklearn.metrics import accuracy_score

dogru_oran = accuracy_score(Y_test, Y_pred)
print(f'Model Doğruluğu: {dogru_oran * 100:.2f}%')

Bu kod parçacığı, modelimizin test verisi üzerindeki doğruluğunu yüzdelik olarak gösterir. Böylece modelimizin başarısını değerlendirmiş oluyoruz.

Sonuçların Analizi ve Karşılaştırma

Modelimizin doğruluğunu belirledikten sonra, tahminlerimizi daha iyi analiz etmek amacıyla bir karışıklık matrisine göz atabiliriz. Karışıklık matrisi, modelimizin hangi sınıflarda doğru tahmin yaptığını ve hangi sınıflarda hata yaptığını gösterir. Bunu elde etmek için aşağıdaki kodu kullanabilirsiniz:

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(Y_test, Y_pred)
print('Karışıklık Matrisine Göz Atalım:')
print(cm)

Karışıklık matrisinin gösterdiği şekilde doğru ve yanlış sınıflandırılmaları analiz edebiliriz. Bu analiz, modelimizin hangi sınıflarda daha güçlü olduğunu ve hangi sınıflarda sorun yaşadığını anlamamıza yardımcı olur.

Bununla birlikte, modelimizin performansını daha iyi anlamak için ROC eğrisi ve AUC değerini de hesaplayabiliriz. ROC eğrisi, duyarlılık ve özgüllüğün bir grafiğidir ve AUC (Area Under Curve) değeri de modelin genel başarısını temsil eder. Aşağıdaki kod parçacığı, ROC eğrisini çizmek için kullanılabilir:

from sklearn.metrics import roc_curve, auc

y_scores = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(Y_test, y_scores)
roc_auc = auc(fpr, tpr)

import matplotlib.pyplot as plt

plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC Eğrisi (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Yanlış Pozitif Oranı')
plt.ylabel('Doğru Pozitif Oranı')
plt.title('Alıcı İşletim Karakteristik Eğrisi (ROC)')
plt.legend(loc='lower right')
plt.show()

Sonuç ve İleriye Dönük Adımlar

Lojistik regresyon, veri bilimi ve makine öğrenimi alanlarında önemli bir yer tutan basit ve etkili bir modeldir. Bu yazımızda Python ile lojistik regresyon uygulamasını adım adım inceleyerek, gerekli kütüphaneleri yüklemeyi, verileri işlemeyi, modeli oluşturmayı ve sonuçları analiz etmeyi öğrendik.

Veri setimizin basit olması nedeniyle elde ettiğimiz doğruluk oranı tatmin edici olabilir, ama gerçek hayatta karşılaşabileceğimiz daha karmaşık veri kümeleri ile çalışacaksınız. Bu durumda, hiperparametre optimizasyonu gibi daha ileri düzey teknikler kullanarak modelinizin performansını artırmanın yollarını keşfetmek önemlidir.

Bundan sonraki adımlarınız, farklı veri kümeleri ile denemeler yapmak, modelin sonuçlarını geliştirmek ve kendi projelerinizde lojistik regresyonu uygulamak olabilir. Unutmayın ki, sürekli pratik yaparak ve yeni bilgiler edinerek kendinizi geliştirebilirsiniz.

Scroll to Top