上一篇我们介绍了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)))

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

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

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

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

  2. (数据科学学习手札13)K-medoids聚类算法原理简介&Python与R的实现

    前几篇我们较为详细地介绍了K-means聚类法的实现方法和具体实战,这种方法虽然快速高效,是大规模数据聚类分析中首选的方法,但是它也有一些短板,比如在数据集中有脏数据时,由于其对每一个类的准则函数为平 ...

  3. (数据科学学习手札16)K-modes聚类法的简介&Python与R的实现

    我们之前经常提起的K-means算法虽然比较经典,但其有不少的局限,为了改变K-means对异常值的敏感情况,我们介绍了K-medoids算法,而为了解决K-means只能处理数值型数据的情况,本篇便 ...

  4. (数据科学学习手札29)KNN分类的原理详解&Python与R实现

    一.简介 KNN(k-nearst neighbors,KNN)作为机器学习算法中的一种非常基本的算法,也正是因为其原理简单,被广泛应用于电影/音乐推荐等方面,即有些时候我们很难去建立确切的模型来描述 ...

  5. (数据科学学习手札26)随机森林分类器原理详解&Python与R实现

    一.简介 作为集成学习中非常著名的方法,随机森林被誉为“代表集成学习技术水平的方法”,由于其简单.容易实现.计算开销小,使得它在现实任务中得到广泛使用,因为其来源于决策树和bagging,决策树我在前 ...

  6. (数据科学学习手札24)逻辑回归分类器原理详解&Python与R实现

    一.简介 逻辑回归(Logistic Regression),与它的名字恰恰相反,它是一个分类器而非回归方法,在一些文献里它也被称为logit回归.最大熵分类器(MaxEnt).对数线性分类器等:我们 ...

  7. (数据科学学习手札144)使用管道操作符高效书写Python代码

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,一些比较熟悉pandas的读者 ...

  8. (数据科学学习手札94)QGIS+Conda+jupyter玩转Python GIS

    本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 QGIS随着近些年的发展,得益于其开源免费 ...

  9. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

随机推荐

  1. visual studio 调试 不进断点 断点失效 提示当前不会命中该断点等问题解决

    1.首先看一下  当前调试模式是否为debug 2. 点击[调试]>[选项和设置] 将[要求源文件与原始文件完全匹配]勾选掉 3.点击调试的最后一个选项 点击[web] 将调试器内部勾选上需要测 ...

  2. (LaTex)CTex的初次使用心得及入门教程

    摘要 最近要发论文了,被知乎里人推荐使用论文编译软件(CTex.LaTex和Overleaf之类),瞬间感觉自己用Word简直Out了(书读少). 学校里也听说过LaTex,不过因为当时没怎么写过论文 ...

  3. IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)

    ●  什么是JPush ●  一套远程推送解决方案,支持android和iOS两个平台 ●  它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ●  更多的信息,可 ...

  4. “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法

    “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> 接口或 IQueryable& ...

  5. mxnet数据操作

    # coding: utf-8 # In[2]: from mxnet import nd # In[3]: x = nd.arange(12) x # In[4]: x.shape,x.size # ...

  6. react中 props,state与render函数的关系

    我们很明显的能够感受到,react是一门数据驱动的框架,当数据发生变化,页面就会自动发生变化,他背后的原理是怎么样子的呢 比如todolist例子里面,inputValue变了,框里面的内容就会自动变 ...

  7. Spring管理连接池的几种方式

    第一种方式:.Spring常规的数据库连接方法: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations=&qu ...

  8. 【洛谷P1108】低价购买

    低价购买 题目链接 n<=5000 n^2的算法是可以接受的 第一个数字显然是求最长下降子序列,可以n^2或nlognDP 要求方案数,可以在n^2算法中做一些修改,DP求方案数 dp[i]表示 ...

  9. 【洛谷P3205】[HNOI2010]CHORUS 合唱队

    合唱队 区间DP f[l][r][0/1]表示生成目标序列中的区间[l,r],最后一个数是a[l]/a[r] 的方案数 边界: f[i][i][0]=1 转移: f[l][r][0]=(a[l]< ...

  10. 【题解】UVA756 Biorhythms (中国剩余定理)

    UVA756:https://www.luogu.org/problemnew/show/UVA756 思路 几乎是裸的中国剩余定理模板题 但是需要注意的是此题并不是求最小正整数解 而是求大于d的解 ...