星期二, 十二月 27, 2011

R语言多元分析系列之四:判别分析

判别分析(discriminant analysis)是一种分类技术。它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类。

判别分析的方法大体上有三类,即Fisher判别、Bayes判别和距离判别。Fisher判别思想是投影降维,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一组内的投影值所形成的组内离差尽可能小,而不同组间的投影值所形成的类间离差尽可能大。Bayes判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断。距离判别思想是根据已知分类的数据计算各类别的重心,对未知分类的数据,计算它与各类重心的距离,与某个重心距离最近则归于该类。

1.线性判别
当不同类样本的协方差矩阵相同时,我们可以在R中使用MASS包的lda函数实现线性判别。lda函数以Bayes判别思想为基础。当分类只有两种且总体服从多元正态分布条件下,Bayes判别与Fisher判别、距离判别是等价的。本例使用iris数据集来对花的品种进行分类。首先载入MASS包,建立判别模型,其中的prior参数表示先验概率。然后利用table函数建立混淆矩阵,比对真实类别和预测类别。
library(MASS)
model1=lda(Species~.,data=iris,prior=c(1,1,1)/3)
table(Species,predict(model1)$class)

Species      setosa versicolor virginica
setosa         50          0         0
versicolor      0         48         2
virginica       0          1        49
从以上结果可观察到判断错误的样本只有三个。在判别函数建立后,还可以类似主成分分析那样对判别得分进行绘图
ld=predict(model1)$x
p=ggplot(cbind(iris,as.data.frame(ld))
,aes(x=LD1,y=LD2))
p+geom_point(aes(colour=Species),alpha=0.8,size=3)

2.二次判别
当不同类样本的协方差矩阵不同时,则应该使用二次判别。
model2=qda(Species~.,data=iris,cv=T)
这里将CV参数设置为T,是使用留一交叉检验(leave-one-out cross-validation),并自动生成预测值。这种条件下生成的混淆矩阵较为可靠。此外还可以使用predict(model)$posterior提取后验概率。

在使用lda和qda函数时注意:其假设是总体服从多元正态分布,若不满足的话则谨慎使用。

参考资料:
Modern Applied Statistics With S
Data_Analysis_and_Graphics_Using_R__An_Example_Based_Approach

8 条评论:

  1. 大爱这个博客啊!!!正在学习R,在这里可以学到好多东西

    回复删除
  2. 请问要怎么样用r求lda,qda,logistic的判别方程呢?

    回复删除
    回复
    1. 这个问题可以看薛毅老师的那本书

      删除
  3. table(Species,predict(model1)$class)
    Species应该是iris$Species
    -----------nord shenzhen

    回复删除
  4. 你好,有个问题想请教一下。当我做多元回归分析的时候,一个因变量和9个自变量,并且每一个自变量都是二维的时候,lm()函数该如何使用呢,有没有具体的例子可循?我在网上找到的例子,自变量都是一维的。

    回复删除
    回复
    1. 你所说的二维是不是指变量的取值有两个,比如说x取值为1或是2。这种情况下可以转为因子格式再用lm。

      删除
  5. 你好,我想问一下,当用qda处理数据时,由于数据中0值较多,但是该组内的协方差矩阵不可逆,那要怎么处理数据?

    回复删除