判别分析是多元统计分析的内容,其作用在分类确定的条件下,根据某一研究对象的各种特征的值来判断其归属于哪一类(即总体)。实际上,这一类问题就是根据已有的样本数据与对应的类别,判断未知类别的数据属于哪一类。像逻辑回归、支持向量机等从某种意义上来说也属于是判别分析的一种,只不过这些算法需要根据样本对模型进行训练,从而能够利用未知数据的各个指标判断其属于哪一类;而统计学中的判别分析,并没有利用数据进行训练,而是按照一定的判别准则、建立判别函数来判断新的数据属于哪一类。

判别分析有许多的方法。本文讲述的是判别分析比较简单的一种方法:距离判别法。它属于一种线性判别方法。

(1)基本思想

距离判别法,顾名思义就是根据距离来判别数据归属于哪一类的一种方法。关于距离度量的方法,可以看兔兔之前的《相似性度量(距离度量)方法》系列文章。通常计算两个数据之间的距离,我们可以采用用欧式距离、马氏距离等,但马式距离能够消除量纲等因素的影响,所以用马式距离更多一些。

比如,我们已经知道了各个总体的样本G1、G2...Gn,每个总体的数据样本资料阵形式为:

其中数据的列数p表示变量个数(或指标个数),各个总体的p需要相同;n表示每个总体内数据个数,n可以各不相同。所以各个总体的均值可以表示为:

表示第i个总体的均值。先计算待判断的数据到各个总体的中心的距离(即到各个总体均值的距离)。到哪一个总体的距离最小,就判定归属于哪一类。

import numpy as np
class distance_discriminant:def __init__(self,x,*data):self.data=dataself.x=x #待判断的数据self.mean=np.mean(data,axis=1) #求各个总体的均值self.m=len(data) #总体个数def distance(self,x,y):'''求x,y之间的欧式距离'''n=len(x)s=0for i in range(n):s+=(x[i]-y[i])**2return np.sqrt(s)def main(self):d=[] #储存x到各个总体的距离for i in range(self.m):d.append(self.distance(self.x,self.mean[i]))r=d.index(min(d)) #找距离最短的那一个总体return r
if __name__=='__main__':data1=[[1,2],[2,2],[2,3]] #总体1data2=[[7,8],[8,9],[6,7]] #总体2x=[3,5]d=distance_discriminant(x,data1,data2)result=d.main()print(result)

以上是进行距离判别的算法实现。

而在多元统计中,对于两个总体的判别问题,记X到G1,G2的距离分别为,。那么判别规则就是:

根据这个判别规则,我们可以构造判别函数W(X)=。如果W(X)小于零,就属于G1类,否则就是G2类。

以平方马式距离为例,推导过程如下:

最终的推导结果就是,即最终所得的判别函数。由于它是X的线性函数,所以也叫做线性判别函数,其中α称为判别系数。之后就可以根据判别函数的正负来判断X属于哪一总体了。

(2)多个总体的距离判别。

多个总体G1、G2...Gn的情况,判别方法就是计算新样本到各个总体的距离,然后选择距离最近的那个总体。实际上就是前面代码的过程。兔兔在这里还是用马氏距离,把判别函数推导一下:

最终得到的判别函数为。判别规则就是选择使得判别函数最小的那个总体,即

总结:

距离判别作为判别分析的一种方法,其过程比较简单,容易理解,如果仅仅是用算法实现距离判别过程的话也是可以不用推导判别函数的,但是作为统计学的一种方法,也是有必要了解的。本文中使用马氏距离时并未详细介绍运用均值μ和协差阵时的注意事项。在实际问题中这两个参数往往是不知道的,所以需要利用总体样本数据来计算样本均值和协差阵进行无偏估计,兔兔把这个问题放在距离度量系列中详细讲解。

判别分析(1)——距离判别法相关推荐

  1. R语言应用实战-基于R语言的判别分析:fisher判别法,距离判别法以及Bayers判别法(附源代码)

    前言 判别分析(Discriminat Analysis)是多变量统计分析中用于判别样本所属类型的一种统计分析法.它所要解决的问题是在一些已知研究对象用某种方法已经分成若干类的情况下确定新的样本属于已 ...

  2. 关于判别分析的学习-距离判别法

    关于判别分析的学习-距离判别法 距离判别法 距离判别法的基本思想是依据样品x和总体G的距离来判断样品所属的总体. 所以很显然的是我们需要首先定义一个距离函数,来表示样本和总体的距离. 其实很容易首先去 ...

  3. matlab求距离判别函数,马氏距离判别法matlab

    -2.7137 -3.9604 2.两个总体协方差矩阵不相等 在MATLAB中mahal 计算马氏距离平方 d = mahal(Y,X) 输入:Y是要判别的 样本点,通常是矩阵Ymn X是已知总体的. ...

  4. R语言马氏距离判别法

    没啥好解释的,就放个代码和运行结果吧 #数据准备 x1<-c(3,3,2,3,3,3,3,3,2,2,1,3,2,1,2,2,2,3,3,2,2,2,2,2) x2<-c(28,45,55 ...

  5. 【多元统计分析】13.直接判别法

    文章目录 十三.直接判别法 1.马氏距离 2.直接判别法的使用 回顾总结 十三.直接判别法 1.马氏距离 判别分析指的是将某个对象归类,即判别某个对象属于哪一类,在实际生活中,判别分析的适用范围十分宽 ...

  6. 机器学习(六)——高斯判别法(GDA)

    6.高斯判别法(GDA) 多元正态分布 p(x;μ,Σ)=1(2π)n/2∣Σ∣1/2exp(−12(x−μ)TΣ−1(x−μ))p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{n/ ...

  7. 【多元统计分析】14.贝叶斯判别法

    文章目录 十四.贝叶斯判别法 1.贝叶斯判别的定义 2.贝叶斯判别的解 3.广义马氏距离 回顾总结 十四.贝叶斯判别法 1.贝叶斯判别的定义 贝叶斯判别的定义,是找到一个错判平均损失最小的判别准则,这 ...

  8. 解析函数论 Page 22 达朗贝尔判别法 VS 柯西判别法

    之所以柯西判别法比达朗贝尔判别法更普遍,是因为根据达朗贝尔判别法,只能得出$|w_{n+m}|\leq q^m |w_n|$,即$\sqrt[m]{|w_{n+m}|}\leq q\sqrt[m]{| ...

  9. 为什么绝对收敛级数具有可交换性+为什么一般项级数不能使用比较判别法/等价判别法?

    >绝对收敛,可以认为是级数某种"本质上"是收敛的,即其正项和负项的和分别是收敛的:而条件收敛,往往是正项负项的和不收敛,因为在级数中的排列导致互相抵消,所以"看起来 ...

最新文章

  1. 35岁,工作十几年,被开除15次,面试被拒200多次,还有必要继续做程序员吗?...
  2. 【中文模板】Latex如何写中文文档
  3. Python学习笔记:Io编程序列化
  4. 自定义函数变量的设置(*/**),lambda匿名函数(map/filter/zip/enumerate)
  5. Hive权限与HDFS权限分离导致的一些问题
  6. 基于 MaxCompute + Hologres 的人群圈选和数据服务实践
  7. 测试运维该学些什么?怎么入门,怎么进阶?
  8. 免费ftp网站服务器软件,免费ftp服务器软件,免费ftp服务器软件有哪些呢?好用推荐...
  9. Ubuntu安装python3虚拟环境
  10. QT之Win10安装(五)
  11. 为什么不建议学python贴吧_为什么那么多自学Python的后来都放弃了,分析起来就这些原因...
  12. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 zipkin 链路跟踪
  13. 三维观察---三维裁剪算法
  14. C# 在服务器生成文件/文件夹并压缩下载到本地
  15. 基于xml的c语言项目,Spring基于XML装配Bean
  16. 学前端需要什么基础知识(前端需要掌握什么 )
  17. matlab 连续傅里叶变换,matlab快速傅里叶变换.ppt
  18. html如何修改按钮样式,css怎么设置按钮样式?
  19. pandownload使用
  20. python 代码格式_python代码格式

热门文章

  1. JS获取url参数 返回一个对象
  2. 3D Slicer将分割结果保存
  3. [webrtc_ndk开发]在调用流程错误导致的ndk音频模块崩溃问题的解决
  4. PHP echo ‘\n‘ 无效 无法不能换行的 一个简单解决方法
  5. 关于iOS多线程,你看我就够了
  6. 如何把自己包装成程序员大佬?这里有一份「装 X 指南」
  7. MySQL的高级应用之Explain(完美详细版,看这一篇就够了)
  8. 四月四日服务器维护,绝地求生测试服4月4日停机维护 今天更新什么内容介绍
  9. BUG 和 BUG_ON
  10. 百度地图如何去除路网图,建筑物,建筑物名称