Квадратичний дискримінантний аналіз у python (крок за кроком)
Квадратичний дискримінантний аналіз — це метод, який можна використовувати, якщо у вас є набір змінних-прогнозів і ви хочете класифікувати змінну відповіді на два або більше класів.
Він вважається нелінійним еквівалентом лінійного дискримінантного аналізу .
Цей підручник надає покроковий приклад того, як виконувати квадратичний дискримінантний аналіз у Python.
Крок 1. Завантажте необхідні бібліотеки
Спочатку ми завантажимо функції та бібліотеки, необхідні для цього прикладу:
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
Крок 2. Завантажте дані
Для цього прикладу ми використаємо набір даних райдужної оболонки ока з бібліотеки sklearn. Наступний код показує, як завантажити цей набір даних і перетворити його на pandas DataFrame для зручності використання:
#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
Ми бачимо, що загалом набір даних містить 150 спостережень.
Для цього прикладу ми створимо модель квадратичного дискримінантного аналізу, щоб класифікувати види, до яких належить дана квітка.
У моделі ми будемо використовувати наступні змінні предиктора:
- Довжина чашолистка
- Ширина чашолистка
- Довжина пелюстки
- Ширина пелюстки
І ми використаємо їх, щоб передбачити змінну відповіді Species , яка підтримує такі три потенційні класи:
- сетоза
- лишай
- Вірджинія
Крок 3: Налаштуйте модель QDA
Далі ми підберемо модель QDA до наших даних за допомогою функції QuadraticDiscriminantAnalsys від 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)
Крок 4. Використовуйте модель для прогнозування
Коли ми підігнали модель за допомогою наших даних, ми можемо оцінити продуктивність моделі за допомогою повторної стратифікованої k-кратної перехресної перевірки.
Для цього прикладу ми будемо використовувати 10 згинань і 3 повторення:
#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
Ми бачимо, що модель досягла середньої точності 97,33% .
Ми також можемо використовувати модель, щоб передбачити, до якого класу належить нова квітка, на основі вхідних значень:
#define new observation new = [5, 3, 1, .4] #predict which class the new observation belongs to model. predict ([new]) array(['setosa'], dtype='<U10')
Ми бачимо, що модель передбачає, що це нове спостереження належить до виду під назвою setosa .
Ви можете знайти повний код Python, використаний у цьому посібнику, тут .