Kwadratische discriminantanalyse in python (stap voor stap)


Kwadratische discriminantanalyse is een methode die u kunt gebruiken als u over een reeks voorspellende variabelen beschikt en u een responsvariabele in twee of meer klassen wilt indelen.

Het wordt beschouwd als het niet-lineaire equivalent van lineaire discriminantanalyse .

Deze tutorial biedt een stapsgewijs voorbeeld van het uitvoeren van kwadratische discriminantanalyse in Python.

Stap 1: Laad de benodigde bibliotheken

Eerst laden we de functies en bibliotheken die nodig zijn voor dit voorbeeld:

 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

Stap 2: Gegevens laden

Voor dit voorbeeld gebruiken we de irisgegevensset uit de sklearn-bibliotheek. De volgende code laat zien hoe u deze gegevensset laadt en converteert naar een Panda DataFrame voor gebruiksgemak:

 #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

We kunnen zien dat de dataset in totaal 150 waarnemingen bevat.

Voor dit voorbeeld zullen we een kwadratisch discriminantanalysemodel bouwen om de soort te classificeren waartoe een bepaalde bloem behoort.

We zullen de volgende voorspellende variabelen in het model gebruiken:

  • Lengte van het kelkblad
  • Kelkblad breedte
  • Bloemblaadje lengte
  • Bloemblaadje breedte

En we zullen ze gebruiken om de responsvariabele Species te voorspellen, die de volgende drie potentiële klassen ondersteunt:

  • setosa
  • veelkleurig
  • Virginia

Stap 3: Pas het QDA-model aan

Vervolgens passen we het QDA-model aan onze gegevens aan met behulp van de QuadraticDiscriminantAnalsys- functie van 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)

Stap 4: Gebruik het model om voorspellingen te doen

Zodra we het model hebben aangepast met behulp van onze gegevens, kunnen we de prestaties van het model evalueren met behulp van herhaalde gestratificeerde k-voudige kruisvalidatie.

Voor dit voorbeeld gebruiken we 10 vouwen en 3 herhalingen:

 #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

We kunnen zien dat het model een gemiddelde nauwkeurigheid van 97,33% behaalde.

We kunnen het model ook gebruiken om te voorspellen tot welke klasse een nieuwe bloem behoort, op basis van de invoerwaarden:

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

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

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

We zien dat het model voorspelt dat deze nieuwe waarneming tot de soort behoort die setosa wordt genoemd.

Je kunt de volledige Python-code die in deze tutorial wordt gebruikt hier vinden.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert