Python'da doğrusal diskriminant analizi (adım adım)


Doğrusal diskriminant analizi, bir dizi öngörücü değişkeniniz olduğunda ve bir yanıt değişkenini iki veya daha fazla sınıfa sınıflandırmak istediğinizde kullanabileceğiniz bir yöntemdir.

Bu eğitimde Python’da doğrusal diskriminant analizinin nasıl gerçekleştirileceğine ilişkin adım adım bir örnek sunulmaktadır.

Adım 1: Gerekli Kitaplıkları Yükleyin

Öncelikle bu örnek için gereken fonksiyonları ve kütüphaneleri yükleyeceğiz:

 from sklearn. model_selection import train_test_split
from sklearn. model_selection import RepeatedStratifiedKFold
from sklearn. model_selection import cross_val_score
from sklearn. discriminant_analysis import LinearDiscriminantAnalysis 
from sklearn import datasets
import matplotlib. pyplot as plt
import pandas as pd
import numpy as np

2. Adım: Verileri yükleyin

Bu örnek için sklearn kütüphanesindeki iris veri setini kullanacağız. Aşağıdaki kod, bu veri kümesinin nasıl yükleneceğini ve kullanım kolaylığı için onu bir pandas DataFrame’e nasıl dönüştüreceğinizi gösterir:

 #load iris dataset
iris = datasets. load_iris ()

#convert dataset to pandas DataFrame
df = pd.DataFrame(data = np.c_[iris[' data '], iris[' target ']],
                 columns = iris[' feature_names '] + [' target '])
df[' species '] = pd. Categorical . from_codes (iris.target, iris.target_names)
df.columns = [' s_length ', ' s_width ', ' p_length ', ' p_width ', ' target ', ' species ']

#view first six rows of DataFrame
df. head ()

   s_length s_width p_length p_width target species
0 5.1 3.5 1.4 0.2 0.0 setosa
1 4.9 3.0 1.4 0.2 0.0 setosa
2 4.7 3.2 1.3 0.2 0.0 setosa
3 4.6 3.1 1.5 0.2 0.0 setosa
4 5.0 3.6 1.4 0.2 0.0 setosa

#find how many total observations are in dataset
len( df.index )

150

Veri setinin toplamda 150 gözlem içerdiğini görebiliriz.

Bu örnekte, belirli bir çiçeğin hangi türe ait olduğunu sınıflandırmak için doğrusal bir diskriminant analiz modeli oluşturacağız.

Modelde aşağıdaki tahmin değişkenlerini kullanacağız:

  • Sepal uzunluğu
  • Sepal genişliği
  • Petal uzunluğu
  • Yaprak genişliği

Bunları, aşağıdaki üç potansiyel sınıfı destekleyen Tür yanıt değişkenini tahmin etmek için kullanacağız:

  • setosa
  • çok renkli
  • Virjinya

3. Adım: LDA modelini ayarlayın

Daha sonra, sklearn’in LinearDiscriminantAnalsys fonksiyonunu kullanarak LDA modelini verilerimize uyarlayacağız:

 #define predictor and response variables
X = df[[' s_length ',' s_width ',' p_length ',' p_width ']]
y = df[' species ']

#Fit the LDA model
model = LinearDiscriminantAnalysis()
model. fit (x,y)

Adım 4: Tahminlerde bulunmak için modeli kullanın

Verilerimizi kullanarak modeli yerleştirdikten sonra, tekrarlanan katmanlı k-katlı çapraz doğrulamayı kullanarak modelin performansını değerlendirebiliriz.

Bu örnek için 10 katlama ve 3 tekrar kullanacağız:

 #Define method to evaluate model
cv = RepeatedStratifiedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 )

#evaluate model
scores = cross_val_score(model, X, y, scoring=' accuracy ', cv=cv, n_jobs=-1)
print( np.mean (scores))  

0.9777777777777779

Modelin ortalama %97,78 doğruluk oranına ulaştığını görebiliyoruz.

Modeli, giriş değerlerine dayanarak yeni bir çiçeğin hangi sınıfa ait olduğunu tahmin etmek için de kullanabiliriz:

 #define new observation
new = [5, 3, 1, .4]

#predict which class the new observation belongs to
model. predict ([new])

array(['setosa'], dtype='<U10')

Modelin bu yeni gözlemin setosa adı verilen türe ait olduğunu öngördüğünü görüyoruz.

5. Adım: Sonuçları görselleştirin

Son olarak, modelin doğrusal ayırıcılarını görselleştirmek ve veri setimizdeki üç farklı türü ne kadar iyi ayırdığını görselleştirmek için bir LDA grafiği oluşturabiliriz:

 #define data to plot
X = iris.data
y = iris.target
model = LinearDiscriminantAnalysis()
data_plot = model. fit (x,y). transform (X)
target_names = iris. target_names

#create LDA plot
plt. figure ()
colors = [' red ', ' green ', ' blue ']
lw = 2
for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt. scatter (data_plot[y == i, 0], data_plot[y == i, 1], alpha=.8, color=color,
                label=target_name)

#add legend to plot
plt. legend (loc=' best ', shadow= False , scatterpoints=1)

#display LDA plot
plt. show ()

Python'da doğrusal diskriminant analizi

Bu eğitimde kullanılan Python kodunun tamamını burada bulabilirsiniz.

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir