【统计分析数学模型】判别分析(二):Fisher判别法

在这里插入图片描述


一、Fisher判别法

1. 基本思想

Fisher判别法的基本思想是“投影”,即将高维空间中的样本点投影到低维空间,从而简化问题。

Fisher判别最重要的就是选出适当的投影轴,保证投影后每一类之内的样本点的离散程度尽可能小,而不同类之间的样本点的离散程度尽可能大。

2. 类别

Fisher判别有线性判别、二次判别等多种判别方法。

对于线性判别,先将样本点投影到一维空间(即直线)上,若效果不好,则可以增加一个维度,即投影到二维空间中,以此类推。

二次判别与线性判别的区别在于投影面的形状不同,线性判别的投影面为直线或平面,而二次判别使用若干二次曲面将样本点划分到相应的类别中。

3. R语言MASS包

MASS包里的函数lda()可用于线性判别,函数qda()可用于二次判别。

  1. 线性判别函数
    lda(x, ...)
  2. 二次判别函数
    qda(x, ...)

二、R语言实现Fisher判别法

1. 使用 lda() 获得线性判别函数

在公式里Diagnosis为因变量,其余5个变量为自变量;先验概率的默认值为各个类别所占的比例

library(MASS)
thyroid.ld<-lda(Diagnosis~RT3U+T4+T3+TSH+DTSH,data=thyroid)
thyroid.ld

输出中包括函数lda()里所用的公式、先验概率、各类的均值向量、线性判别函数的系数、两个判别式对区分总体的贡献大小等:

> thyroid.ld
Call:
lda(Diagnosis ~ RT3U + T4 + T3 + TSH + DTSH, data = thyroid)

Prior probabilities of groups:
   Normal     Hyper      Hypo 
0.6976744 0.1627907 0.1395349 

Group means:
            RT3U        T4       T3        TSH      DTSH
Normal 110.51333  9.192667 1.731333  1.3166667  2.516667
Hyper   95.28571 17.745714 4.262857  0.9742857 -0.020000
Hypo   121.70000  3.600000 1.063333 12.9200000 17.533333

Coefficients of linear discriminants:
             LD1          LD2
RT3U  0.02501083  0.001974564
T4   -0.30544670 -0.103495742
T3   -0.11588398 -0.434103730
TSH   0.03831828 -0.147419858
DTSH  0.07288461 -0.074044771

Proportion of trace:
   LD1    LD2 
0.8398 0.1602 
> 

两个线性判别函数分别为:

LD1 = 0.025×RT3U - 0.305×T4 - 0.116×T3 + 0.038×TSH + 0.073×DTSH

LD2 = 0.002×RT3U - 0.103×T4 - 0.434×T3 - 0.147×TSH - 0.074×DTSH

2. 对样本进行回判分类

将泛型函数predict()作用于线性判别对象可以得到各个样品的回判分类:

thyroid.pred<-predict(thyroid.ld)
thyroid.pred$class

结果如下:

> thyroid.pred$class
  [1] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [11] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [21] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [31] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [41] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [51] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [61] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [71] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [81] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
 [91] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[101] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[111] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[121] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[131] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[141] Normal Normal Normal Normal Normal Normal Normal Normal Normal Normal
[151] Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Normal
[161] Hyper  Hyper  Normal Hyper  Hyper  Normal Hyper  Hyper  Normal Hyper 
[171] Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Hyper  Normal Hyper  Normal
[181] Hyper  Normal Normal Hyper  Normal Hypo   Hypo   Normal Normal Hypo  
[191] Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Normal Hypo   Hypo   Hypo  
[201] Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo   Hypo  
[211] Normal Normal Normal Normal Normal
Levels: Normal Hyper Hypo

3. 混淆矩阵

与上一篇文章(距离判别法)类似,我们可以通过混淆矩阵查看判别效果:

table(thyroid.pred$class,thyroid$Diagnosis)

结果如下:

> table(thyroid.pred$class,thyroid$Diagnosis)
        
         Normal Hyper Hypo
  Normal    150     9    8
  Hyper       0    26    0
  Hypo        0     0   22

结果表明,有17个样品判别错误,错误率为7.9%,正确率为92.1%。

被错判的对象所处的行号:

e1<-which(thyroid.pred$class=="Normal"&thyroid$Diagnosis=="Hyper")
e2<-which(thyroid.pred$class=="Normal"&thyroid$Diagnosis=="Hypo")
> e1
[1] 160 163 166 169 178 180 182 183 185

> e2
[1] 188 189 197 211 212 213 214 215

4. 绘制散点图

以两个线性判别函数为坐标轴绘制散点图,并用不同颜色和形状的点表示患者的诊断类型:

LD1<-thyroid.pred$x[,1]
LD2<-thyroid.pred$x[,2]
col<-as.numeric(thyroid$Diagnosis)
pch<-as.numeric(thyroid$Diagnosis)
plot(LD1,LD2,col=col,pch=pch)
legend("bottom",legend=c("Normal","Hyper","Hypo"),
        +col=1:3,pch=1:3)
points(LD1[e1],LD2[e1],cex=2,col=4)
points(LD1[e2],LD2[e2],cex=2,col=4)

如图所示,两个线性判别函数较好地区分了3类患者。其中判错的对象位于两类别的邻近区域(图中的圆圈)。
在这里插入图片描述

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值