专栏首页数据科学学习手札(数据科学学习手札18)二次判别分析的原理简介&Python与R实现

(数据科学学习手札18)二次判别分析的原理简介&Python与R实现

上一篇我们介绍了Fisher线性判别分析的原理及实现,而在判别分析中还有一个很重要的分支叫做二次判别,本文就对二次判别进行介绍:

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

R

在R中,常用的二次判别函数qda(formula,data)集成在MASS包中,其中formula形式为G~x1+x2+x3,G表示类别变量所在列的名称,~右端连接的累加式表示用来作为特征变量的元素对应的列名称,data为包含前面所述各变量的数据框,下面对鸢尾花数据进行二次判别,这里因为样本量较小,故采用bootstrap自助法进行抽样以扩充训练集与验证集,具体过程如下:

rm(list=ls())
library(MASS)

#挂载鸢尾花数据
data(iris)
data <- iris

#bootstrap法产生训练集
sam <- sample(1:length(data[,1]),10000,replace = T)
train_data <- data[sam,]

#bootstrap法产生测试集
sam <- sample(1:length(data[,1]),2000,replace = T)
test_data <- data[sam,]

#训练二次判别模型
qd <- qda(Species~.,data=train_data)

#保存预测结果
pr <- predict(qd,test_data[,1:4])
#打印混淆矩阵
(tab <- table(test_data[,5],pr$class))
#打印分类正确率
cat('正确率:',sum(diag(tab))/length(test_data[,1]))

分类结果如下:

Python

这里和前一篇线性判别相似,我们使用sklearn包中的discriminant_analysis.QuadraticDiscriminantAnalysis来进行二次判别,依旧是对鸢尾花数据进行分类,这里和前一篇一样采用留出法分割训练集与验证集,具体代码如下:

'''Fisher线性判别分析'''
import numpy as np
from sklearn import datasets
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()

X = iris.data
y = iris.target

'''二次判别器'''

'''利用sklearn自带的样本集划分方法进行分类,这里选择训练集测试集73开'''
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)
'''搭建LDA模型'''
qda = QuadraticDiscriminantAnalysis()
'''利用分割好的训练集进行模型训练并对测试集进行预测'''
qd = qda.fit(X_train,y_train).predict(X_test)
'''比较预测结果与真实分类结果'''
print(np.array([qd,y_test]))
'''打印正确率'''
print('正确率:',str(round(qda.score(X_test,y_test),2)))

以上就是关于二次判别的简要内容,如有笔误之处望指出。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (数据科学学习手札17)线性判别分析的原理简介&Python与R实现

    之前数篇博客我们比较了几种具有代表性的聚类算法,但现实工作中,最多的问题是分类与定性预测,即通过基于已标注类型的数据的各显著特征值,通过大量样本训练出的模型,来...

    Feffery
  • (数据科学学习手札56)利用机器学习破解大众点评文字反爬

      爬取过大众点评的朋友应该会遇到这样的问题,在网页中看起来正常的文字,在其源代码中变成了下面这样:

    Feffery
  • (数据科学学习手札22)主成分分析法在Python与R中的基本功能实现

    上一篇中我们详细介绍推导了主成分分析法的原理,并基于Python通过自编函数实现了挑选主成分的过程,而在Python与R中都有比较成熟的主成分分析函数,本篇我们...

    Feffery
  • 对于数据库操作的敬畏小案例

    之前一直在说对于线上运维操作的敬畏之心,但是话说了,有时候没有案例的说明其实是苍白的。刚好借着最近同事碰到的一个案例来做下说明。

    jeanron100
  • 时间戳

    时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。它也被称为 Unix 时间戳(Unix Timestamp)。

    KEVINGUO_CN
  • 使用swiper的coverflowEffect遇到的几个问题

    需要写一个下图这样的轮播效果,使用的是 Swiper 4.3 ,在使用过程中遇到了几个问题,记录一下。

    德顺
  • Python中文件的读取和写入

    这里假设在当前目录下有一个文件名为’pi_digits.txt’的文本文件,里面的数据如下:

    py3study
  • 一个SAP cds view test double的例子

    Jerry Wang
  • CODING 敏捷项目管理全新改版上线

    CODING 敏捷项目管理全新版本现已上线,新版本深度结合敏捷开发理念,完美支持 Scrum 迭代式增量开发过程,可根据团队需要设计独一无二的工作流,适应不同...

    CODING研发管理系统
  • Pythonic:递归、回溯等5种方法生成不重复数字整数

    问题描述:从0到9这10个数字任选3个不重复的数字,能构成哪些三位数? So easy!看到这样的问题,很多人会写出类似(注意,只是类似,我为了使得本文几个函...

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券