python使用QDA进行二次判别分析

什么是二次判别法

二次判别属于距离判别法中的内容,以两总体距离判别法为例,对总体G1,,G2,当他们各自的协方差矩阵Σ1,Σ2不相等时,判别函数因为表达式不可化简而不再是线性的而是二次的,这时使用的构造二次判别函数进行判别类别的方法叫做二次判别法。

python中使用sklearn中的QuadraticDiscriminantAnalysis来进行二次判别分析,这里采用鸢尾花数据进行分类。

train_test_split切分训练集和测试集

这是sklearn中对数据进行切分的一个方法

X_train, X_test, y_train, y_test=sklearn.model_selection.train_test_split(
        X,y train_size=None, random_state=None)

X:数据的特征集
y:数据的目标值
trani_size:表示训练集和测试集的划分,trani_size=0.4表示训练集和测试集
4/6分
random_state:random_state=int表示每次划分的训练集和测试集是相同的,若没有设置或者int=0就是每次划分训练集和测试集是随机的

二次判别法

from sklearn.datasets import load_iris
import numpy as np
from sklearn import datasets
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
from sklearn.model_selection import train_test_split
iris_data = load_iris()  
X = iris_data.data
y = iris_data.target


X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state=3)

QDA = QuadraticDiscriminantAnalysis()

QDA_fit = QDA.fit(X_train,y_train)
QDA_pre = QDA_fit.predict(X_test)

print(np.array([QDA_pre,y_test]))#比较训练集和测试机的结果

print('准确率:'+str(QDA.score(X_test,y_test)))#准确率

结果:

[[0 0 0 0 0 2 1 0 2 1 1 0 1 1 2 0 2 2 2 0 2 2 2 1 0 2 2 1 1 1 0 0 2 1 0 0
  1 0 2 2 2 1 0 0 2 1 0 2 2 1 0 0 2 1 1 0 2 0 2 1]
 [0 0 0 0 0 2 1 0 2 1 1 0 1 1 2 0 1 2 2 0 2 2 2 1 0 2 2 1 1 1 0 0 2 1 0 0
  1 0 2 1 2 1 0 0 2 1 0 1 2 1 0 0 2 1 1 0 2 0 2 1]]
准确率:0.95

你可能感兴趣的:(python,sklearn,机器学习)