精华内容
下载资源
问答
  • matlab距离判别

    2018-03-06 14:47:08
    使用matlab处理数据,实现数学建模中的距离判别法,达到数据处理的目的
  • 距离判别法以及fisher判别法等的讲解与程序实现(matlab)
  • matlab距离判别分析的应用

    千次阅读 2019-07-25 19:25:50
    距离判别法:距离判别分析方法是判别样品所属类别的一应用性很强的多因素决方法,其中包括两个样本总体距离判别法,多个样本距离判别法。 多个总体距离判别法:多个总体距离判别法是距离判别法的一种,是两个总体距离...

    matlab距离判别分析的应用

    一、定义

    距离判别法:距离判别分析方法是判别样品所属类别的一应用性很强的多因素决方法,其中包括两个样本总体距离判别法,多个样本距离判别法。
    多个总体距离判别法:多个总体距离判别法是距离判别法的一种,是两个总体距离判别法的推广,具有多个总体,将待测样本归为多个样本中的一类。

    1.1两个总体的距离判别法

    设有两个总体(或称两类)G1、G2,从第一个总体中抽取n1个样品,从第二个总体中抽取n2个样品,每个样品测量p个指标如下页表。
    今任取一个样品,实测指标值为,问X应判归为哪一类?
    在这里插入图片描述

    在这里插入图片描述

    如果距离定义采用欧氏距离,则可计算出
    在这里插入图片描述
    然后比较和大小,按距离最近准则判别归类。
    在这里插入图片描述

    1.2

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    二、多个总体的距离判别法

    设有k个总体G1, …, Gk,它们的均值和协方差阵分别为,从每个总体Gi中抽取ni个样品,i =1,…,k,每个样品测p个指标。今任取一个样品,实测指标值为,问X应判归为哪一类?
    在这里插入图片描述
    在这里插入图片描述

    三、实际问题

    3.1城市分类

    例 对全国30个省市自治区1994年影响各地区经济增长差异的制度变量:x1—经济增长率(%)、x2—非国有化水平(%)、x3—开放度(%)、x4—市场化程度(%)作判别分析。

    在这里插入图片描述
    我们首先判断两组协方差是否相等,相等用一种算法,不相等用另外一种算法。

    a=xlsread('keshe','sheet1','D2:G12');%第一类
    b=xlsread('keshe','Sheet1','D13:G28');%第二类
    x=xlsread('keshe','Sheet1','D29:G31');%待测数据
    n1=length(a(:,1));n2=length(b(:,1));  %样本容量
    n=n1+n2;s1=cov(a);s2=cov(b); %样本协方差
    p=3;s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2);
    q1=(n1-1)*(log(det(s))-log(det(s1))-p+trace(inv(s)*s1));
    q2=(n2-1)*(log(det(s))-log(det(s2))-p+trace(inv(s)*s2));%检验统计量
    if (q1<chi2inv(0.95,p*(p+1)/2))&(q2<chi2inv(0.95,p*(p+1)/2));
    disp('协方差矩阵相同,判别函数值为:')
    for i=1:3
    D(i)=(x(i,:)-mean(a))*inv(s)*(x(i,:)-mean(a))'-(x(i,:)-mean(b))*inv(s)*(x(i,:)-mean(b))';
    end
    D
    else  
    disp('协方差矩阵不相同')   
    end 
    

    在这里插入图片描述
    chi2inv(0.95,10)=18.3070,q1< 18.3070 q2>18.3070
    所以协方差不相等

    然后通过协方差不相同来调用函数进行判别:

    q2=(n2-1)*(log(det(s))-log(det(s2))-p+trace(inv(s)*s2)); %检验统计量
    chi2inv(0.95,10); %验证两总体的协方差矩阵相同
    W=mahal(x,a)-mahal(x,b)    %协方差不相等时,计算二次判别函数
    

    在这里插入图片描述

    得到以上结果,x1小于0,x2大于0。再根据判别准则可得 x1,属于第一类,x2,x3属于第二类,即待判样品中江苏被判属第一组,陕西和安徽被判属第二组
    第二种方法 用classify进行判别,此时协方差不相同,选用二次判别函数。

    n1=size(a,1);n2=size(b,1);
    group=[ones(n1,1);2*ones(n2,1)];
    training=[a;b];
    [class2,err,POSTERIOR,logp,coeff]=classify(x,training,group,'mahalanobis');
    class2  
    

    在这里插入图片描述
    得到以上结果,x1小于0,x2大于0。再根据判别准则可得 x1,属于第一类,x2,x3属于第二类,即待判样品中江苏被判属第一组,陕西和安徽被判属第二组

    对于判别结果的分析

    %回代误判率
    a=xlsread('keshe','sheet1','D2:G12');%第一类
    b=xlsread('keshe','Sheet1','D13:G28');%第二类
    x=xlsread('keshe','Sheet1','D29:G31');%待测数据
    for i=1:n1
    d11(i)=(a(i,:)-mean(a))*inv(s)*(a(i,:)-mean(a))'-(a(i,:)-mean(b))*inv(s)*(a(i,:)-mean(b))';end
    for i=1:n2
    d22(i)=(b(i,:)-mean(b))*inv(s)*(b(i,:)-mean(b))'-(b(i,:)-mean(a))*inv(s)*(b(i,:)-mean(a))';end
    n12=length(find(d11>0));n21=length(find(d22>0));p0=(n12+n21)/(n1+n2)  
    
     %计算交叉误判率
    for i=1:n1
     A=a([1:i-1,i+1:n1],:);
     n1=length(A(:,1));n2=length(b(:,1));
    s1=cov(a);s2=cov(b);P=3;
    s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2);
    D11(i)=(a(i,:)-mean(A))*inv(s)*(a(i,:)-mean(A))'-(a(i,:)-mean(b))*inv(s)*(a(i,:)-mean(b))';end  
    for i=1:n2 B=b([1:i-1,i+1:n2],:);
    n1=length(a(:,1));n2=length(B(:,1));
    s1=cov(A);s2=cov(B);P=3;
    s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2);
    D22(i)=(b(i,:)-mean(B))*inv(s)*(b(i,:)-mean(B))'-(b(i,:)-mean(a))*inv(s)*(b(i,:)-mean(a))';
    end
    N11=length(find(D11>0));
    N22=length(find(D22>0));
    p1=(N11+N22)/(n1+n2) 
    

    两个总体协方差相等判别

    n1=length(a(:,1));n2=length(b(:,1));s1=cov(a);s2=cov(b);
    p=3;s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2);q1=(n1-1)*(log(det(s))-log(det(s1))-p+trace(inv(s)*s1)) q2=(n2-1)*(log(det(s))-log(det(s2))-p+trace(inv(s)*s2))
    chi2inv(0.95,3)    %根据q1 q2与临界值的大小关系判断协方差是否相等
    

    在这里插入图片描述
    回归误判率是0.0370,交叉误判率是0.07690,两个误判率都比较小,因此可见这个判别是有效的

    那么再来一题多个总体的吧。

    3.2医疗应用

    为了研究某地区人口死亡状况,已按某种方法将15个已知样品分为三类(如下表所示),指标及原始数据见下表,试建立判别函数并判定另外4个待判样品分别属于哪类。
    在这里插入图片描述
    (1)判别协方差是否相等
    判别多个样本协方差是否相等

    a=xlsread('ks','sheet1','B1:G5');%第一组
    b=xlsread('ks','sheet1','B6:G10');%第二组
    c=xlsread('ks','sheet1','B11:G15');%第三组
    x=xlsread('ks','sheet1','B16:G19');%待测样本
     
    
    
    n=size(a,1)+ size(b,1)+ size(c,1);        %计算总的样本容量
    [n1,p]= size(a);
    k=3;
    f=p*(p+1)*(k-1)/2;                        %统计量自由度
    d=(2*p^2+3*p-1)*(k+1)/(6*(p+1)*(n-k));      %由(2.2.18)式计算
    s1=cov(a);                             %协方差矩阵
    s2=cov(b);                             %协方差矩阵
    s3=cov(c);                             %协方差矩阵
    s=(n1-1)*(s1+s2+s3)/(n-k);                 %总体协方差估计
    M=(n-k)*log(det(s))-19*(log(det(s1))+log(det(s2))+log(det(s3)));    %(2.2.17)中的M值
    T=(1-d)*M;                              % 统计量(2.2.17)
    P0=1-chi2cdf(T,f);                      % 卡方分布概率 
    if P0>0.1
    disp('协方差相同');
    else
        disp('协方差不相同');
    end
    

    结果是不相等蛤
    (2)调用classify判别
    在这里插入图片描述
    所以第一三个样本是属于第二类,第二四个样本属于第一类误差为0.1333%,这个误差很小,说明该判定是有效的。

    调用classify进行判别多个总体
    x=xlsread('ks_2','sheet1','C17:H20');%待测样本
    group=[ones(n1,1);2*ones(n2,1);3*ones(n3,1)];
    training=[a;b;c];
    [class2,err2,POSTERIOR2,logp2,coeff2]=classify(x,training,group,'diagquadratic');
    class2
    
    展开全文
  • 定义了各因子的判别权重和加权距离,并结合二次判别和两类判别,构造了二次加权距离判别。该方法既保留了所有因子又体现了不同因子的判别能力。经实际数据的计算验证,其判别效果优于马氏距离判别
  • 以某矿区为实例,确定了影响该矿区冲击地压的主要地质及开采技术因素,应用距离判别法建立了距离判别预测模型,并利用统计软件对该矿区的冲击地压实测数据进行模型预测,预测效果非常明显。结果表明,建立的距离判别分析...
  • 为了进行矿井突水水源预测,选用6种常规离子作为判别因子,并结合河南焦作矿区实测数据,建立了煤矿突水水源预测的距离判别分析模型;同时针对该模型自身检验的不足,采用灰色系统关联度法检验距离判别分析模型的准确性;...
  • 通过分析煤和瓦斯突出机理,运用距离判别分析法来建立煤与瓦斯突出预测的距离判别分析模型,以淮南淮北典型突出矿井的煤和瓦斯突出为例,建立判别函数,经过模型回判估计后的误差率为零。
  • 为了更加准确的预测煤与瓦斯突出的危险性,基于距离判别分析理论,选取电磁辐射预测指标(电磁辐射强度E和脉冲数N)和常规指标R指标、钻孔瓦斯涌出初速度q及钻屑量S作为判别因子,选取演马庄矿某掘进工作面2011年4、5月...
  • 广义距离判别分类方法的扩展,丁树良,罗芬,探讨了孙佳楠等人(2011)的广义距离判别方法具有很高判准率的原因,即认知诊断模型与认知模型紧密结合并且模型计算上尽量避免误�
  • 距离判别分析方法应用于矿区立井井筒非采动破裂的预测问题中,建立了井筒非采动破裂的距离判别分析模型.选用表土层厚度、底含厚度、底含水位速降、井筒外径、井壁厚度和井筒投入使用时间6项指标作为距离判别分析...
  • 距离判别

    千次阅读 2016-02-10 16:56:52
    距离判别法:距离判别方是通过计算待测点到各个分类的距离,在根据计算出距离的大小,进行判别该待测点属于那个分类。但是距离的计算是通过马氏距离进行计算的,而不是我们平常几何中用的欧式距离。 欧式...
    距离判别法:距离判别方是通过计算待测点到各个分类的距离,在根据计算出距离的大小,进行判别该待测点属于那个分类。但是距离的计算是通过马氏距离进行计算的,而不是我们平常几何中用的欧式距离。

    欧式距离的定义:

           欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。

    (1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:

     

    (2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:

     

    (3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:

     

      也可以用表示成向量运算的形式:



    马氏距离的定义:

           有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:

     

           而其中向量Xi与Xj之间的马氏距离定义为:

           若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:



    为什么使用马氏距离不使用欧式距离:



    从上图两个分类服从正态分布u1和u2,  u1 均值为0 方差为1   u2 均值为4 方差为2。A点在x轴的值为1.66

    按照欧式距离进行计算A 点跟接近u1分类,他离u1 的平均值跟接近

    按照马氏距离进行计算,我们对两个分类进行密度函数计算。

    正态分布概率密度计算公式为:

    计算A属于u1分类概率密度=0.10
    计算A 属于u2分类概率密度=0.33


    上图也很好的解释为什么要考虑使用马氏距离,上图黄色椭圆部分代表整个分类在直角坐标系的排布情况,u代表分类的中心。图中有圆上有两个点分别是A和B ,使用欧式距离计算到u的距离是一样。但是从图中可以看出A点已经快出整个分类的范围,而B却在中心很密的位置。

    距离判别法公式:

    这里要讨论两种情况
    情况1:分类来自一个总体,这样分类的协方差是一样的。
    情况2:分类是来不同的总体,这样他们的协方差就不一样。
    所以这里要考虑协方差相同的情况和不相同的情况

    公式推理:

    设总体x1 和x2,他们的均值分别是u1和u2,协方差分别是 Σ1和Σ2.
    x 为待测样本
    情况1,协方差相同
    μ1 μ2, Σ1 = Σ2 = Σ


    均值和协方差计算
    化简得

    情况2,协方差不相同
    μ1  μ2, Σ1   Σ2 


    R 实现代码
    #TrnX1类别1  TrnX2类别2 TstX测试集 var.equal方差是否一样
    discriminiant.distance <- function(TrnX1, TrnX2, TstX = NULL, var.equal = FALSE){
      if (is.null(TstX) == TRUE) TstX <- rbind(TrnX1,TrnX2)
      if (is.vector(TstX) == TRUE) TstX <- t(as.matrix(TstX))
      else if (is.matrix(TstX) != TRUE)
        TstX <- as.matrix(TstX)
      if (is.matrix(TrnX1) != TRUE) TrnX1 <- as.matrix(TrnX1)
      if (is.matrix(TrnX2) != TRUE) TrnX2 <- as.matrix(TrnX2)
      nx <- nrow(TstX)
      blong <- matrix(rep(0, nx), nrow=1, byrow=TRUE,
                      dimnames=list("blong", 1:nx))
      mu1 <- colMeans(TrnX1); mu2 <- colMeans(TrnX2)
      if (var.equal == TRUE || var.equal == T){
        S <- var(rbind(TrnX1,TrnX2))
        w <- mahalanobis(TstX, mu2, S)
        - mahalanobis(TstX, mu1, S)
      }
      else{
        S1 < -var(TrnX1); S2 <- var(TrnX2)
        w <- mahalanobis(TstX, mu2, S2)
        - mahalanobis(TstX, mu1, S1)
      }
      for (i in 1:nx){
        if (w[i] > 0)
          blong[i] <- 1
        else
          blong[i] <- 2
      }
      blong
    }

    classX1<-data.frame(
      x1=c(6.60, 6.60, 6.10, 6.10, 8.40, 7.2, 8.40, 7.50,7.50, 8.30, 7.80, 7.80),
      x2=c(39.00,39.00, 47.00, 47.00, 32.00, 6.0, 113.00, 52.00,52.00,113.00,172.00,172.00),
      x3=c(1.00, 1.00, 1.00, 1.00, 2.00, 1.0, 3.50, 1.00,3.50, 0.00, 1.00, 1.50),
      x4=c(6.00, 6.00, 6.00, 6.00, 7.50, 7.0, 6.00, 6.00,7.50, 7.50, 3.50, 3.00),
      x5=c(6.00, 12.00, 6.00, 12.00, 19.00, 28.0, 18.00, 12.00,6.00, 35.00, 14.00, 15.00),
      x6=c(0.12, 0.12, 0.08, 0.08, 0.35, 0.3, 0.15, 0.16,0.16, 0.12, 0.21, 0.21),
      x7=c(20.00,20.00, 12.00, 12.00, 75.00, 30.0, 75.00, 40.00,40.00,180.00, 45.00, 45.00)
    )
    classX2<-data.frame(
      x1=c(8.40, 8.40, 8.40, 6.3, 7.00, 7.00, 7.00, 8.30,8.30, 7.2, 7.2, 7.2, 5.50, 8.40, 8.40, 7.50,7.50, 8.30, 8.30, 8.30, 8.30, 7.80, 7.80),
      x2=c(32.0 ,32.00, 32.00, 11.0, 8.00, 8.00, 8.00,161.00,161.0, 6.0, 6.0, 6.0, 6.00,113.00,113.00, 52.00,52.00, 97.00, 97.00,89.00,56.00,172.00,283.00),
      x3=c(1.00, 2.00, 2.50, 4.5, 4.50, 6.00, 1.50, 1.50,0.50, 3.5, 1.0, 1.0, 2.50, 3.50, 3.50, 1.00,1.00, 0.00, 2.50, 0.00, 1.50, 1.00, 1.00),
      x4=c(5.00, 9.00, 4.00, 7.5, 4.50, 7.50, 6.00, 4.00,2.50, 4.0, 3.0, 6.0, 3.00, 4.50, 4.50, 6.00,7.50, 6.00, 6.00, 6.00, 6.00, 3.50, 4.50),
      x5=c(4.00, 10.00, 10.00, 3.0, 9.00, 4.00, 1.00, 4.00,1.00, 12.0, 3.0, 5.0, 7.00, 6.00, 8.00, 6.00,8.00, 5.00, 5.00,10.00,13.00, 6.00, 6.00),
      x6=c(0.35, 0.35, 0.35, 0.2, 0.25, 0.25, 0.25, 0.08,0.08, 0.30, 0.3, 0.3, 0.18, 0.15, 0.15, 0.16,0.16, 0.15, 0.15, 0.16, 0.25, 0.21, 0.18),
      x7=c(75.00,75.00, 75.00, 15.0,30.00, 30.00, 30.00, 70.00,70.00, 30.0, 30.0, 30.0,18.00, 75.00, 75.00, 40.00,40.00,180.00,180.00,180.00,180.00,45.00,45.00)
    )
    discriminiant.distance(classX1, classX2, var.equal=TRUE)
    discriminiant.distance(classX1, classX2)

    上述函数方法是解决两个分类的情况。如果出现多分类情况,可以通过分类的距离进行排序,取距离最近一个分类,即为当前待测变量的分类。

    实现代码如下:

    distinguish.distance <- function(TrnX, TrnG, TstX = NULL, var.equal = FALSE){
      if ( is.factor(TrnG) == FALSE){
        mx <- nrow(TrnX); mg <- nrow(TrnG)
        TrnX <- rbind(TrnX, TrnG)
        TrnG <- factor(rep(1:2, c(mx, mg)))
      }
      if (is.null(TstX) == TRUE) TstX <- TrnX
      if (is.vector(TstX) == TRUE) TstX <- t(as.matrix(TstX))
      else if (is.matrix(TstX) != TRUE)
        TstX <- as.matrix(TstX)
      if (is.matrix(TrnX) != TRUE) TrnX <- as.matrix(TrnX)
      nx <- nrow(TstX)
      blong <- matrix(rep(0, nx), nrow=1,
                      dimnames=list("blong", 1:nx))
      g <- length(levels(TrnG))
      mu <- matrix(0, nrow=g, ncol=ncol(TrnX))
      for (i in 1:g)
        mu[i,] <- colMeans(TrnX[TrnG==i,])
      D < -matrix(0, nrow=g, ncol=nx)
      if (var.equal == TRUE || var.equal == T){
        for (i in 1:g)
          D[i,] <- mahalanobis(TstX, mu[i,], var(TrnX))
      }
      else{
        for (i in 1:g)
          D[i,] <- mahalanobis(TstX, mu[i,], var(TrnX[TrnG==i,]))
      }
      for (j in 1:nx){
        dmin <- Inf
        for (i in 1:g)
          if (D[i,j] < dmin){
            dmin <- D[i,j]; blong[j] <- i
          }
      }
      blong
    }

    展开全文
  • 选取对底板突水影响最大的有无含水层、水压、隔水层厚度、底板采动破坏深度及断层落差等作为基本判别因子,选取国内15个有代表性的采煤工作面底板突水资料作为训练样本,利用距离判别分析理论,建立了煤层底板突水量...
  • 马氏距离判别法matlab

    2013-06-17 10:32:01
    matlab实现的马氏距离判别法,简单方便
  • 基于等级反应模型的广义距离判别
  • 将小波包分析与距离判别分析法相结合的方法应用于滚动轴承故障诊断问题中。利用小波包分析技术提取了滚动轴承典型故障的振动加速度信号的状态特征向量,选用此特征向量作为距离判别分析模型的判别因子,以滚动轴承故障...
  • 关于判别分析的学习-距离判别

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

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

    距离判别法

    距离判别法的基本思想是依据样品x和总体G的距离来判断样品所属的总体。 所以很显然的是我们需要首先定义一个距离函数,来表示样本和总体的距离。

    其实很容易首先去想到利用欧式距离来表示 d 2 ( x , G ) = ( x − μ ) ′ ( x − μ ) d^2(x,G)=(x-\mu)'(x-\mu) d2(x,G)=(xμ)(xμ)
    μ \mu μ是G的均值向量。

    但其实利用欧式距离存在一定的缺点,它将样品的不同属性之间的区别同等看待,存在着量纲问题,如果样品的变量测量值相差悬殊时(例如对汽车进行分类时,单个样品最高速度和安全指数),就需要首先标准化,来消除计量单位对结果的影响。

    所以我们这里可以考虑使用马氏(Mahalanobis)距离。 d 2 ( x , G ) = ( x − μ ) ′ ∑ − 1 ( x − μ ) d^2(x,G)=(x-\mu)'\sum\nolimits^{-1}(x-\mu) d2(x,G)=(xμ)1(xμ) ∑ \sum 是协方差矩阵, ∑ = ( σ i j ) m ∗ m \sum=(\sigma_{ij})_{m*m} =(σij)mm

    它是一种有效计算未知样本集相似度的一种方法。马氏距离的结果是将数据投影到N(0,1)区间并求其欧式距离,与标准化欧氏距离有区别的是它认为各个维度之间不是独立分布的,所以马氏距离考虑到各种属性之间的联系

    两个总体的距离判别

    假设有两个总体G1和G2,有一个新的样本X,判断它究竟属于哪个总体。判别原则是按照就近原则进行归类。判别规则如下
    { X ∈ G 1 , 如 果 d 2 ( X , G 1 ) < d 2 ( X , G 2 ) X ∈ G 2 , 如 果 d 2 ( X , G 1 ) > d 2 ( X , G 2 ) 待 判 , 如 果 d 2 ( X , G 1 ) = d 2 ( X , G 2 ) \left \{\begin{array}{cc} X\in G_1, &如果d^2(X,G_1)<d^2(X,G_2)\\ X\in G_2, & 如果d^2(X,G_1)>d^2(X,G_2)\\ 待判,&如果d^2(X,G_1)=d^2(X,G_2) \end{array}\right. XG1,XG2,d2(X,G1)<d2(X,G2)d2(X,G1)>d2(X,G2)d2(X,G1)=d2(X,G2)
    计算中两个总体的 μ \mu μ ∑ \sum 真实值均未知,要根据训练样本集计算它们的极大似然估计。
    特别的,假设出现两个总体的协方差矩阵相等,记 ∑ 1 = ∑ 2 = ∑ \sum\nolimits_1=\sum\nolimits_2=\sum 1=2=,对于马氏距离可以简化(注:协方差矩阵为对称矩阵)
    d 2 ( X , G ) = ( X − μ ) ′ ∑ − 1 ( X − μ ) = X ′ ∑ − 1 X − 2 [ ( ∑ − 1 μ ) ′ X − 1 2 μ ′ ∑ − 1 μ ] d^2(X,G)=(X-\mu)'\sum\nolimits^{-1}(X-\mu) =X'\sum\nolimits^{-1}X-2[(\sum\nolimits^{-1}\mu)'X-\frac{1}{2}\mu'\sum\nolimits^{-1}\mu] d2(X,G)=(Xμ)1(Xμ)=X1X2[(1μ)X21μ1μ]
    所以
    d 2 ( X , G 1 ) − d 2 ( X , G 2 ) = 2 ( X − μ 1 + μ 2 2 ) ′ ∑ − 1 ( μ 1 − μ 2 ) d^2(X,G_1)-d^2(X,G_2)=2(X-\frac{\mu_1+\mu_2}{2})'\sum\nolimits^{-1}(\mu_1-\mu_2) d2(X,G1)d2(X,G2)=2(X2μ1+μ2)1(μ1μ2)
    μ ˉ = μ 1 + μ 2 2 , α = ∑ − 1 ( μ 1 − μ 2 ) \bar{\mu}=\frac{\mu_1+\mu_2}{2},\alpha=\sum\nolimits^{-1}(\mu_1-\mu_2) μˉ=2μ1+μ2α=1(μ1μ2)称为判别系数,从而线性判别函数简化为
    W ( X ) = α ′ ( X − μ ˉ ) W(X)=\alpha'(X-\bar{\mu}) W(X)=α(Xμˉ)
    所以前面的判别规则可以改为
    { X ∈ G 1 , 如 果 W ( X ) > 0 X ∈ G 2 , 如 果 W ( X ) < 0 待 判 , 如 果 W ( X ) = 0 \left \{\begin{array}{cc} X\in G_1, &如果W(X)>0\\ X\in G_2, & 如果W(X)<0\\ 待判,&如果W(X)=0 \end{array}\right. XG1,XG2,W(X)>0W(X)<0W(X)=0

    多个总体的距离判别

    多个总体任然遵循就近原则。设有k个总体,X是一个待判样本,它与总体的距离即为判别函数,
    d 2 ( X , G i ) = ( X − μ i ) ′ ∑ − 1 ( X − μ i ) = X ′ ∑ − 1 X − 2 X ′ ∑ − 1 μ i + μ i ′ ∑ − 1 μ i d^2(X,G_i)=(X-\mu_i)'\sum\nolimits^{-1}(X-\mu_i)=X'\sum\nolimits^{-1}X-2X'\sum\nolimits^{-1}\mu_i+\mu_i'\sum\nolimits^{-1}\mu_i d2(X,Gi)=(Xμi)1(Xμi)=X1X2X1μi+μi1μi
    对应的判别规则为
    D i = { X : d 2 ( X , G i ) = min ⁡ 1 ≤ j ≤ k d 2 ( X , G j ) } , i = 1 , 2...... , k D_i= \{ X:d^2(X,G_i)=\min_{1\leq j \leq k}d^2(X,G_j)\},i=1,2......,k Di={X:d2(X,Gi)=1jkmind2(X,Gj)},i=1,2......,k
    若X落在区域Di内,那么可以判断 X ∈ G i X\in G_i XGi
    与两类总体类似一样可以去考虑 ∑ 1 = ∑ 2 = . . . . ∑ k \sum_1=\sum_2=....\sum_k 1=2=....k ∑ i \sum_i i各不相同的情况。

    R的实现

    了解相关函数
    mahalanobis(x,center,cov,inverted=FALSE,…):计算马氏距离
    x是样本数据的向量或者矩阵;
    center是分布的均值
    cov是分布的协方差矩阵,常使用样本值作为估计
    inverted是逻辑值,若为FALSE,则cov应该包含协方差阵的逆。

    WMDB包内wmd(TranX,TranG,Tweigh=NULL,TstX=NULL,var.equal=F)
    可以实现加权马氏距离判别分析。

    TranX是训练样品的矩阵或者数据框
    TranG用于表示已知训练样本的分类(注:必须是一个因子向量)
    Tweigh制定权重,是一个矩阵或者数据框,如果没有定义权重,将在主成分分析的基础上计算相应贡献度的百分比作为代替,当把所有的权重定义为等值时,就是传统的判别分析方法
    TstX,待测数据的矩阵或者数据框,默认NULL为没有指定,可直接对训练样本进行判别分析
    var.equal,指定总体是否用相等的协方差矩阵

    例(随便编的数据)

    因为数据是乱编的,结果比较迷,所以用来大概理解下过程就好

    X1X2X3类别
    5515821
    4431691
    1321701
    6201321
    3445272
    7766822
    4444302
    7357642
    322622待测
    >test <- read.csv("C:/Users/LENOVO/Desktop/test.csv", header=FALSE)
    > mu<-colMeans(test)#对列求均值
    > Sx=cov(test)#计算训练样本
    > distance=mahalanobis(test,mu,Sx)
    > options(digits = 2)#设置小数点格式
    > library(WMDB)
    > G=c(rep(1,4),rep(2,4))
    > G=as.factor(G)
    > wmd(test,G)
          1 2 3 4 5 6 7 8
    blong 2 2 2 2 1 2 2 1
    [1] "num of wrong judgement"
    [1] 1 2 3 4 5 8
    [1] "samples divided to"
    [1] 2 2 2 2 1 1
    [1] "samples actually belongs to"
    [1] 1 1 1 1 2 2
    Levels: 1 2
    [1] "percent of right judgement"
    [1] 0.25
    > newdata<-c(3,22,622)
    > wmd(test,G,TstX = newdata)
    
    展开全文
  • 针对基于传统统计学的企业资信评估方法的不足,提出基于距离判别法的企业资信评估方法,并用实例通过Matlab软件及其相应工具对其进行了计算判别。结果表明,基于距离判别法的企业资信评估方案,可快捷、准确、有效地...
  • 数据挖掘中的距离判别分析法.pdf
  • 探讨了急倾斜煤层放顶煤的工程特点,将距离判别分析方法用于急倾斜煤层顶煤可放性识别问题中,建立了急倾斜煤层顶煤可放性识别的距离判别分析模型.最后,将该模型用于工程实例,识别结果符合实际情况.研究表明,距离判别...
  • 应用距离判别分析理论,结合矿井含水层的水化学分析资料,选取6种离子组分的浓度作为突水水源识别的判别因子,建立矿井突水水源识别的距离判别分析模型;以35组采样的水源样品作为学习样本进行训练,建立相应线性判别函数...
  • 认知诊断中基于条件期望的距离判别方法
  • 在不对判别变量进行处理的条件下,对传统的距离判别方法进行改进,提出一种新的判别方法,试图解决复杂球形数据的判别问题,以提高判别的正确率。通过实例表明,该方法的判别效果良好,能较好地处理复杂球形数据的判别问题...
  • 时间相关单光子计数型激光雷达距离判别
  • 针对距离判别在处理复杂数据时的不足,提出了一种新的判别方法,该方法的主要思想是确定各总体的特征向量集后,以样品到各总体特征向量集的最短距离为准则对样品进行属类判别.然后利用此方法对多个实例进行检验,并...
  • 为建立硫化矿石自燃倾向性等级分类的统一标准,将距离判别分析理论应用到硫化矿石自燃倾向性等级划分的判定当中。结合已有的研究成果,选取最能反映硫化矿石自燃倾向性本质的室内低温氧化增重率、自热点温度、自燃点...
  • R语言分类算法之距离判别(Distance Discrimination).pdf
  • 距离判别分析方法应用于公路隧道围岩类别判定问题中,结合前人研究经验,选用隧道洞室围岩岩石单轴饱和抗压强度σc、节理平均间距d、岩石质量指标RQD、地下水情况作为围岩类别判定的距离判别分析模型判别因子,...
  • 研究了DNA序列的判别分类问题。通过分析20组已知类别人造 DNA...采用距离判别分类法建立了 ATCG判别分类模型、主要氨基酸判别分类模型,对未知类别的DNA序列进行了判别分类;实例表明,2种判别分类模型的误判概率均为5%。
  • 习题:根据经验,今天和昨天的湿度差...分别用距离判别、Bayes判别(考虑方差相同和方差不同两种情况)和Fisher判别来得到你所需要的结论。 数据: 雨天 非雨天 X1(湿度差) X2(压温差)...

     

    习题:根据经验,今天和昨天的湿度差X1及今天的压温差X2是预报天气下雨和不下雨的两个重要因素。现有数据如下,今测得x1=8.1,x2=2.0,试问预报明天下雨还是预报明天不下雨?分别用距离判别、Bayes判别(考虑方差相同和方差不同两种情况)和Fisher判别来得到你所需要的结论。

    数据:

    雨天

    非雨天

    X1(湿度差)

    X2(压温差)

    X1(湿度差)

    X2((压温差)

    -1.9

    3.2

    0.2

    0.2

    -6.9

    10.4

    -0.1

    7.5

    5.2

    2.0

    0.4

    14.6

    5.0

    2.5

    2.7

    8.3

    7.3

    0.0

    2.1

    0.8

    6.8

    12.7

    -4.6

    4.3

    0.9

    -15.4

    -1.7

    10.9

    -12.5

    -2.5

    -2.6

    13.1

    1.5

    1.3

    2.6

    12.8

    3.8

    6.8

    -2.8

    10.0

     

     

    解答:

    数据文件 Rain.txt:

    -1.9    3.2
    -6.9    10.4
    5.2    2.0
    5.0    2.5
    7.3    0.0
    6.8    12.7
    0.9    -15.4
    -12.5    -2.5
    1.5    1.3
    3.8    6.8

     

    数据文件  Fine.txt

    0.2    0.2
    -0.1    7.5
    0.4    14.6
    2.7    8.3
    2.1    0.8
    -4.6    4.3
    -1.7    10.9
    -2.6    13.1
    2.6    12.8
    -2.8    10.0

     

    函数文件 discriminiant.distance.R  

    discriminiant.distance<-function
       (TrnX1, TrnX2, TstX = NULL, var.equal = FALSE){
       if (is.null(TstX) == TRUE) TstX<-rbind(TrnX1,TrnX2)
       if (is.vector(TstX) == TRUE)  TstX<-t(as.matrix(TstX))
       else if (is.matrix(TstX) != TRUE)
          TstX<-as.matrix(TstX)
       if (is.matrix(TrnX1) != TRUE) TrnX1<-as.matrix(TrnX1)
       if (is.matrix(TrnX2) != TRUE) TrnX2<-as.matrix(TrnX2)
    
       nx<-nrow(TstX)
       blong<-matrix(rep(0, nx), nrow=1, byrow=TRUE, 
             dimnames=list("blong", 1:nx))
       mu1<-colMeans(TrnX1); mu2<-colMeans(TrnX2) 
       if (var.equal == TRUE  || var.equal == T){
          S<-var(rbind(TrnX1,TrnX2))
          w<-mahalanobis(TstX, mu2, S)-mahalanobis(TstX, mu1, S)
       }
       else{
          S1<-var(TrnX1); S2<-var(TrnX2)
          w<-mahalanobis(TstX, mu2, S2)-mahalanobis(TstX, mu1, S1)
       }
       for (i in 1:nx){
          if (w[i]>0)
              blong[i]<-1
          else
              blong[i]<-2
       }
       blong
    }
    

     

    函数文件 discriminiant.bayes.R

    discriminiant.bayes<-function
       (TrnX1, TrnX2, rate=1, TstX = NULL, var.equal = FALSE){
       if (is.null(TstX) == TRUE) TstX<-rbind(TrnX1,TrnX2)
       if (is.vector(TstX) == TRUE)  TstX<-t(as.matrix(TstX))
       else if (is.matrix(TstX) != TRUE)
          TstX<-as.matrix(TstX)
       if (is.matrix(TrnX1) != TRUE) TrnX1<-as.matrix(TrnX1)
       if (is.matrix(TrnX2) != TRUE) TrnX2<-as.matrix(TrnX2)
    
       nx<-nrow(TstX)
       blong<-matrix(rep(0, nx), nrow=1, byrow=TRUE, 
             dimnames=list("blong", 1:nx))
       mu1<-colMeans(TrnX1); mu2<-colMeans(TrnX2) 
       if (var.equal == TRUE  || var.equal == T){
          S<-var(rbind(TrnX1,TrnX2)); beta<-2*log(rate)
          w<-mahalanobis(TstX, mu2, S)-mahalanobis(TstX, mu1, S)
       }
       else{
          S1<-var(TrnX1); S2<-var(TrnX2)
          beta<-2*log(rate)+log(det(S1)/det(S2))
          w<-mahalanobis(TstX, mu2, S2)-mahalanobis(TstX, mu1, S1)
       }
       
       for (i in 1:nx){
          if (w[i]>beta)
              blong[i]<-1
          else
              blong[i]<-2
       }
       blong
    }
    

      

    函数文件 discriminiant.fisher.R

    discriminiant.fisher<-function(TrnX1, TrnX2, TstX = NULL){
       if (is.null(TstX) == TRUE)    TstX<-rbind(TrnX1,TrnX2)
       if (is.vector(TstX) == TRUE)  TstX<-t(as.matrix(TstX))
       else if (is.matrix(TstX) != TRUE)
          TstX<-as.matrix(TstX)
       if (is.matrix(TrnX1) != TRUE)  TrnX1<-as.matrix(TrnX1)
       if (is.matrix(TrnX2) != TRUE)  TrnX2<-as.matrix(TrnX2)
    
       nx<-nrow(TstX)
       blong<-matrix(rep(0, nx), nrow=1, byrow=TRUE, 
             dimnames=list("blong", 1:nx))
       n1<-nrow(TrnX1); n2<-nrow(TrnX2) 
       mu1<-colMeans(TrnX1); mu2<-colMeans(TrnX2) 
       S<-(n1-1)*var(TrnX1)+(n2-1)*var(TrnX2) 
       mu<-n1/(n1+n2)*mu1+n2/(n1+n2)*mu2
       w<-(TstX-rep(1,nx) %o% mu) %*% solve(S, mu2-mu1);
       for (i in 1:nx){
           if (w[i]<=0)
               blong[i]<-1
           else
               blong[i]<-2
       }
       blong
    }
    

      

    运行脚本:

    ##原始数据
    rain <- read.table("Rain.txt");
    fine <- read.table("Fine.txt");
    test <- c(8.1, 2.0);
    
    #距离判别
    source("discriminiant.distance.R")
    discriminiant.distance(rain, fine, test, var.equal=TRUE);
    # rain
    discriminiant.distance(rain, fine, test);
    #rain
    
    #Bayes判别
    source("discriminiant.bayes.R");
    discriminiant.bayes(rain, fine, 1, test, var.equal=TRUE);
    #rain
    discriminiant.bayes(rain, fine, 1, test);
    #rain
    
    #Fish 判别
    source("discriminiant.fisher.R");
    discriminiant.fisher(rain, fine, test);
    #rain
    
    #综上,预报明天下雨
    

      

    输出均为 第一种类型(1),也就是下雨(rain)。

     

    博文源代码和习题均来自于教材《统计建模与R软件》(ISBN:9787302143666,作者:薛毅)。

    转载于:https://www.cnblogs.com/liulele/p/9036468.html

    展开全文
  • 一、实验内容 思想:在一些已知研究对象用某种方法已经分成若干类的情况下,确定新的样本属于已知类别中的哪一类。...(2)分别建立距离判别(等方差和不等方差)、Fisher判别和Bayes判别分析模型,计算各自的判别符

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,862
精华内容 10,744
关键字:

距离判别