我们将在本文中介绍的模型属于称为高斯判别分析(GDA)模型的类别。 请注意,高斯判别分析模型是生成模型! 尽管它的名字叫做判别模型,但是他是生成模型。 给定N个输入变量x和相应的目标变量t的训练数据集,GDA模型假设类条件密度是正态分布的

其中μ为类特有的均值向量,σ为类特有的协方差矩阵。利用贝叶斯定理,我们现在可以计算类后验

然后我们将把x分类

数学推导

对于每个输入变量,我们定义k个二元指标变量。此外,让t表示所有的目标变量,π表示先验,用下标表示类。假设数据点是独立绘制的,似然函数为

为了简化符号,让θ表示所有的类先验、类特定的平均向量和协方差矩阵。我们知道,最大化可能性等于最大化对数可能性。对数似是

扩展(1)将极大地帮助我们在接下来的推导:

我们必须找到类特定的先验、均值和协方差矩阵的最大似然解。从先验开始,我们需要对(2)求导,让它等于0,然后解出先验。然而,我们必须保持约束

这是通过使用拉格朗日乘数λ来实现的

利用(2)的结果,然后对(3)求关于类特定先验的导数,使其等于0,求解

其中Nc是c类中数据点的个数。利用约束知识,我们可以求出λ

将λ=−N代回(4)得到

(5)告诉我们类先验只是属于类的数据点的比例,直观上也有意义。

现在我们转向最大化关于类特定的平均值的对数可能性。再一次,利用(2)的结果让我们很容易求导,让它等于0,然后求解

为了计算这个导数,我们使用矩阵演算单位,然后,我们得到

让我们花点时间来理解(6)说的是什么。(6)左边的和只包括属于c类的输入变量x。然后,我们用这些向量的和除以类中的数据点的个数,这和取这些向量的平均值是一样的。这意味着特定于类的平均向量是属于类的输入变量的平均值。

最后,我们必须最大化关于类特定协方差矩阵的对数似然。再一次,我们用(2)的结果求导,让它等于0,然后解

然后,我们得到

就像特定于类别的均值向量只是该类别的向量的均值一样,特定于类别的协方差矩阵只是该类别的向量的协方差,因此我们得出了最大似然解(5),( 6)和(7)。 因此,我们可以使用以下方法进行分类

Python实现

让我们从一些数据开始-您可以在下面的图中看到它们。 您可以在此处下载数据。

下面的代码是我们刚刚讨论过的QDA的一个简单实现。

import numpyclass QDA:def fit(self, X, t):self.priors = dict()self.means = dict()self.covs = dict()self.classes = np.unique(t)for c in self.classes:X_c = X[t == c]self.priors[c] = X_c.shape[0] / X.shape[0]self.means[c] = np.mean(X_c, axis=0)self.covs[c] = np.cov(X_c, rowvar=False)def predict(self, X):preds = list()for x in X:posts = list()for c in self.classes:prior = np.log(self.priors[c])inv_cov = np.linalg.inv(self.covs[c])inv_cov_det = np.linalg.det(inv_cov)diff = x-self.means[c]likelihood = 0.5*np.log(inv_cov_det) - 0.5*diff.T @ inv_cov @ diffpost = prior + likelihoodposts.append(post)pred = self.classes[np.argmax(posts)]preds.append(pred)return np.array(preds)

现在我们可以用下面的代码进行预测。

data = np.loadtxt("../data.csv", delimiter=",", skiprows=1)X = data[:, 0:2]
t = data[:, 2]qda = QDA()
qda.fit(X, t)
preds = qda.predict(X)

这给了我们高斯分布以及如下所示的预测。

为了便于说明QDA的工作原理和工作效果,我们可以在决策边界上绘制数据点的原始类。这是下面显示的。

总结

二次判别分析(QDA)是一种生成模型。

QDA假设每个类服从高斯分布。

特定于类的先验只是属于该类的数据点的比例

特定于类的平均向量只是该类的输入变量的平均值

特定于类的协方差矩阵只是该类的向量的协方差。

作者:Stefan Hrouda-Rasmussen

deephub翻译组

二次判别分析(QDA)和Python实现相关推荐

  1. R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化

    最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...

  2. 线性判别分析LDA(linear discriminant analysis)与二次判别分析QDA(quadratic discriminant analysis)

    文章目录 什么是LDA LDA与PCA 相同 不同 LDA python实现 使用sklearn实现LDA 再进一步QDA QDA数学原理 QDA与LDA比较 Source: Python Machi ...

  3. R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

    判别分析包括可用于分类和降维的方法.线性判别分析(LDA)特别受欢迎,因为它既是分类器又是降维技术.二次判别分析(QDA)是LDA的变体,允许数据的非线性分离.最后,正则化判别分析(RDA)是LDA和 ...

  4. 线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

    判别分析包括可用于分类和降维的方法.线性判别分析(LDA)特别受欢迎,因为它既是分类器又是降维技术.二次判别分析(QDA)是LDA的变体,允许数据的非线性分离.最后,正则化判别分析(RDA)是LDA和 ...

  5. python判别分析_二次判别分析Quadratic Discriminant Analysis(QDA)

    与线性判别分析类似,二次判别分析是另外一种线性判别分析算法,二者拥有类似的算法特征,区别仅在于:当不同分类样本的协方差矩阵相同时,使用线性判别分析:当不同分类样本的协方差矩阵不同时,则应该使用二次判别 ...

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

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

  7. 判别器loss为0_scikitlearn—线性判别分析和二次判别分析

    线性判别分析(discriminant_analysis.LinearDiscriminantAnalysis)和二次判别分析(discriminant_analysis.QuadraticDiscr ...

  8. 【数学建模】Matlab实现判别分析(线性判别和二次判别分析)

    Matlab实现判别分析(线性判别和二次判别分析) 一.简介 二.判别分析的方法 2.1 费歇(FISHER)判别思想 2.1 贝叶斯(BAYES)判别思想 三.Matlab 实现判别分析 3.1 代 ...

  9. python实验二报告_20172304 2019-2020-2 《Python程序设计》实验二报告

    20172304 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1723 姓名: 段志轩 学号:20172304 实验教师 ...

最新文章

  1. 马化腾:人工智能的“大社交”时代
  2. spring boot中利用mybatis-generator插件生成代码
  3. 整个互联网真的是呈现出一种勃勃的生机
  4. docker安装Oracle 11g
  5. 圆周卷积(circular convolution)
  6. 跨平台的网络通信中间件:ICE和ACE
  7. linux dig命令
  8. java wsdl文件生成_Spring Web Services 生成 WSDL 文件
  9. 新兴研究将如何更好地应对社会挑战?我们等你来共同探讨!
  10. linux下jmeter性能测试
  11. C/C++ 如何构造出强悍的宏
  12. Go语言并发安全与锁
  13. 美通社企业新闻汇总 | 2019.1.18 | 联通与中兴打通全球首个5G智能终端;碧桂园化身产城运营服务商...
  14. C语言 - 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。(用switch实现)
  15. 我的网龙面试经历(2013年c++程序员技术面试)
  16. 《最优状态估计-卡尔曼,H∞及非线性滤波》:第10章 有关卡尔曼滤波的其他讨论
  17. mac vim常用简单命令
  18. 自顶向下语法分析方法
  19. TCP/IP详解 (12)广播和多播
  20. 视频教程-清华-尹成老师-java基础-Day17-Java

热门文章

  1. 从零开始搭建个人大数据集群——环境准备篇
  2. CSP201803-4棋局评估
  3. 如何利用PPT制作九宫格图片效果
  4. 【亡羊补牢】JS灵魂之问 第23期 修炼内功 关于闭包的回顾
  5. 阿里巴巴、腾讯、百度和京东金融落户雄安新区 | 亚马逊加入FB与微软阵营,共同支持开源AI平台ONNX
  6. 基于virtuoso IC 618的LDO仿真实验
  7. 认计算机电源,电脑硬件认识之什么是电脑的电源[图文]
  8. 闲谈“个人核心竞争力”与“危机感”
  9. 红米k20pro可升级到鸿蒙系统,小米9系列Redmi K20 Pro迎MIUI 12稳定版更新
  10. java随笔三,真正的class大总结