判别分析是多元统计分析的内容,其作用在分类确定的条件下,根据某一研究对象的各种特征的值来判断其归属于哪一类(即总体)。实际上,这一类问题就是根据已有的样本数据与对应的类别,判断未知类别的数据属于哪一类。像逻辑回归、支持向量机等从某种意义上来说也属于是判别分析的一种,只不过这些算法需要根据样本对模型进行训练,从而能够利用未知数据的各个指标判断其属于哪一类;而统计学中的判别分析,并没有利用数据进行训练,而是按照一定的判别准则、建立判别函数来判断新的数据属于哪一类。
判别分析有许多的方法。本文讲述的是判别分析比较简单的一种方法:距离判别法。它属于一种线性判别方法。
(1)基本思想
距离判别法,顾名思义就是根据距离来判别数据归属于哪一类的一种方法。关于距离度量的方法,可以看兔兔之前的《相似性度量(距离度量)方法》系列文章。通常计算两个数据之间的距离,我们可以采用用欧式距离、马氏距离等,但马式距离能够消除量纲等因素的影响,所以用马式距离更多一些。
比如,我们已经知道了各个总体的样本G1、G2...Gn,每个总体的数据样本资料阵形式为:
其中数据的列数p表示变量个数(或指标个数),各个总体的p需要相同;n表示每个总体内数据个数,n可以各不相同。所以各个总体的均值可以表示为:
表示第i个总体的均值。先计算待判断的数据到各个总体的中心的距离(即到各个总体均值的距离)。到哪一个总体的距离最小,就判定归属于哪一类。
import numpy as np
class distance_discriminant:
def __init__(self,x,*data):
self.data=data
self.x=x #待判断的数据
self.mean=np.mean(data,axis=1) #求各个总体的均值
self.m=len(data) #总体个数
def distance(self,x,y):
'''求x,y之间的欧式距离'''
n=len(x)
s=0
for i in range(n):
s+=(x[i]-y[i])**2
return 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]] #总体1
data2=[[7,8],[8,9],[6,7]] #总体2
x=[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的情况,判别方法就是计算新样本到各个总体的距离,然后选择距离最近的那个总体。实际上就是前面代码的过程。兔兔在这里还是用马氏距离,把判别函数推导一下:
最终得到的判别函数为。判别规则就是选择使得判别函数最小的那个总体,即。文章来源:https://www.toymoban.com/news/detail-457011.html
总结:
距离判别作为判别分析的一种方法,其过程比较简单,容易理解,如果仅仅是用算法实现距离判别过程的话也是可以不用推导判别函数的,但是作为统计学的一种方法,也是有必要了解的。本文中使用马氏距离时并未详细介绍运用均值μ和协差阵时的注意事项。在实际问题中这两个参数往往是不知道的,所以需要利用总体样本数据来计算样本均值和协差阵进行无偏估计,兔兔把这个问题放在距离度量系列中详细讲解。文章来源地址https://www.toymoban.com/news/detail-457011.html
到了这里,关于判别分析(1)——距离判别法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!