Analisis diskriminan linier dengan python (langkah demi langkah)


Analisis diskriminan linier adalah metode yang dapat Anda gunakan ketika Anda memiliki sekumpulan variabel prediktor dan ingin mengklasifikasikan variabel respons ke dalam dua kelas atau lebih.

Tutorial ini memberikan contoh langkah demi langkah tentang cara melakukan analisis diskriminan linier dengan Python.

Langkah 1: Muat Perpustakaan yang Diperlukan

Pertama, kita akan memuat fungsi dan perpustakaan yang diperlukan untuk contoh ini:

 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

Langkah 2: Muat data

Untuk contoh ini, kita akan menggunakan dataset iris dari perpustakaan sklearn. Kode berikut menunjukkan cara memuat kumpulan data ini dan mengonversinya menjadi DataFrame pandas untuk kemudahan penggunaan:

 #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

Kita dapat melihat bahwa dataset tersebut berisi total 150 observasi.

Untuk contoh ini, kita akan membangun model analisis diskriminan linier untuk mengklasifikasikan spesies bunga tertentu.

Kami akan menggunakan variabel prediktor berikut dalam model:

  • Panjang sepal
  • Lebar sepal
  • Panjang kelopak
  • Lebar kelopak

Dan kita akan menggunakannya untuk memprediksi variabel respon Spesies , yang mendukung tiga kelas potensial berikut:

  • setosa
  • versikolor
  • Virginia

Langkah 3: Sesuaikan model LDA

Selanjutnya, kita akan menyesuaikan model LDA ke data kita menggunakan fungsi LinearDiscriminantAnalsys sklearn:

 #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)

Langkah 4: Gunakan model untuk membuat prediksi

Setelah kami memasang model menggunakan data kami, kami dapat mengevaluasi performa model menggunakan validasi silang k-fold bertingkat berulang.

Untuk contoh ini, kita akan menggunakan 10 lipatan dan 3 pengulangan:

 #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

Kita dapat melihat bahwa model tersebut mencapai akurasi rata-rata sebesar 97,78% .

Kita juga dapat menggunakan model ini untuk memprediksi kelas mana yang dimiliki bunga baru, berdasarkan nilai masukan:

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

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

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

Kita melihat bahwa model tersebut memperkirakan bahwa pengamatan baru ini milik spesies yang disebut setosa .

Langkah 5: Visualisasikan hasilnya

Terakhir, kita dapat membuat plot LDA untuk memvisualisasikan diskriminan linier model dan memvisualisasikan seberapa baik model tersebut memisahkan tiga spesies berbeda dalam kumpulan data kita:

 #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 ()

analisis diskriminan linier dengan Python

Anda dapat menemukan kode Python lengkap yang digunakan dalam tutorial ini di sini .

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *