Analisi discriminante quadratica in python (passo dopo passo)


L’analisi discriminante quadratica è un metodo che è possibile utilizzare quando si dispone di un insieme di variabili predittive e si desidera classificare una variabile di risposta in due o più classi.

È considerato l’equivalente non lineare dell’analisi discriminante lineare .

Questo tutorial fornisce un esempio passo passo di come eseguire l’analisi discriminante quadratica in Python.

Passaggio 1: caricare le librerie necessarie

Innanzitutto, caricheremo le funzioni e le librerie necessarie per questo esempio:

 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 QuadraticDiscriminantAnalysis 
from sklearn import datasets
import matplotlib. pyplot as plt
import pandas as pd
import numpy as np

Passaggio 2: caricare i dati

Per questo esempio, utilizzeremo il set di dati iris dalla libreria sklearn. Il codice seguente mostra come caricare questo set di dati e convertirlo in un DataFrame panda per facilità d’uso:

 #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

Possiamo vedere che il set di dati contiene 150 osservazioni in totale.

Per questo esempio, costruiremo un modello di analisi discriminante quadratica per classificare la specie a cui appartiene un dato fiore.

Utilizzeremo le seguenti variabili predittive nel modello:

  • Lunghezza del sepalo
  • Larghezza del sepalo
  • Lunghezza del petalo
  • Larghezza del petalo

E li useremo per prevedere la variabile di risposta Specie , che supporta le seguenti tre classi potenziali:

  • setosa
  • versicolor
  • Virginia

Passaggio 3: modificare il modello QDA

Successivamente, adatteremo il modello QDA ai nostri dati utilizzando la funzione QuadraticDiscriminantAnalsys di sklearn:

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

#Fit the QDA model
model = QuadraticDiscriminantAnalysis()
model. fit (x,y)

Passaggio 4: utilizzare il modello per fare previsioni

Una volta adattato il modello utilizzando i nostri dati, possiamo valutare le prestazioni del modello utilizzando ripetute validazioni incrociate stratificate k-fold.

Per questo esempio utilizzeremo 10 pieghe e 3 ripetizioni:

 #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.97333333333334

Possiamo vedere che il modello ha raggiunto una precisione media del 97,33% .

Possiamo anche utilizzare il modello per prevedere a quale classe appartiene un nuovo fiore, in base ai valori di input:

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

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

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

Vediamo che il modello prevede che questa nuova osservazione appartenga alla specie chiamata setosa .

Puoi trovare il codice Python completo utilizzato in questo tutorial qui .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *