Quadratische diskriminanzanalyse in python (schritt für schritt)


Die quadratische Diskriminanzanalyse ist eine Methode, die Sie verwenden können, wenn Sie über eine Reihe von Prädiktorvariablen verfügen und eine Antwortvariable in zwei oder mehr Klassen klassifizieren möchten.

Sie gilt als nichtlineares Äquivalent der linearen Diskriminanzanalyse .

Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer quadratischen Diskriminanzanalyse in Python.

Schritt 1: Laden Sie die erforderlichen Bibliotheken

Zuerst laden wir die für dieses Beispiel benötigten Funktionen und Bibliotheken:

 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

Schritt 2: Daten laden

Für dieses Beispiel verwenden wir den Iris- Datensatz aus der Sklearn-Bibliothek. Der folgende Code zeigt, wie dieser Datensatz geladen und zur einfacheren Verwendung in einen Pandas-DataFrame konvertiert wird:

 #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

Wir können sehen, dass der Datensatz insgesamt 150 Beobachtungen enthält.

Für dieses Beispiel erstellen wir ein quadratisches Diskriminanzanalysemodell, um die Art zu klassifizieren, zu der eine bestimmte Blume gehört.

Wir werden die folgenden Prädiktorvariablen im Modell verwenden:

  • Kelchlänge
  • Kelchblattbreite
  • Blütenblattlänge
  • Blütenblattbreite

Und wir werden sie verwenden, um die Antwortvariable „Species“ vorherzusagen, die die folgenden drei möglichen Klassen unterstützt:

  • setosa
  • versicolor
  • Virginia

Schritt 3: Passen Sie das QDA-Modell an

Als Nächstes passen wir das QDA-Modell mithilfe der QuadraticDiscriminantAnalsys- Funktion von sklearn an unsere Daten an:

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

Schritt 4: Verwenden Sie das Modell, um Vorhersagen zu treffen

Sobald wir das Modell mithilfe unserer Daten angepasst haben, können wir die Leistung des Modells mithilfe einer wiederholten geschichteten k-fachen Kreuzvalidierung bewerten.

Für dieses Beispiel verwenden wir 10 Faltungen und 3 Wiederholungen:

 #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

Wir können sehen, dass das Modell eine durchschnittliche Genauigkeit von 97,33 % erreichte.

Wir können das Modell auch verwenden, um basierend auf den Eingabewerten vorherzusagen, zu welcher Klasse eine neue Blume gehört:

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

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

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

Wir sehen, dass das Modell vorhersagt, dass diese neue Beobachtung zu der Art namens Setosa gehört.

Den vollständigen Python-Code, der in diesem Tutorial verwendet wird, finden Sie hier .

Einen Kommentar hinzufügen

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