R语言 判别分析小结

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

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

用R进行判别分析的方法在MASS包,里面有lda(线性)和qda(二次)
注意使用条件:1、正态总体,2、协方差相同(线性)/不同(二次)

1、线性的判别分析

#载入相关包和数据集
library(MASS)
library(sampling)
#把iris重新赋值,并加入分类标记和行号标记
i<-iris
i$lv<-as.numeric(i$Species)
i$lv<-as.factor(i$lv)
i$id<-c(1:150)
#进行分层抽样,每个类别随机抽出10个作为预测集,剩下的作为训练集
i.s<-strata(data=i,stratanames="lv",size=c(10,10,10),method="srswor",description=F)
i.train<-i[!(i$id %in% i.s$ID_unit),]
i.predict<-i[(i$id %in% i.s$ID_unit),]
#拟合线性判别lda
fit<-lda(lv~.-id-Species,data=i.train)
#预测训练集和预测集
Y<-predict(fit,i.train)
YN<-predict(fit,i.predict)
#查看拟合情况
table(Y$class,i.train$lv)
table(YN$class,i.predict$lv)

2、二次判别

#当协方差矩阵不相同时(即来自不同总体),沿用上一个已经做好的数据
fit2<-qda(lv~.-id-Species,data=i.train,cv=T)
#再进行结果的拟合
Y2<-predict(fit,i.train)
YN2<-predict(fit,i.predict)
#查看拟合情况
table(Y2$class,i.train$lv)
table(YN2$class,i.predict$lv)
#所得结果是一样的,不知道是否为数据的协方差是一样的原因。

另外,M一个使用贝叶斯进行判断分析的文章:R语言之判别分析、贝叶斯判别分析

你可能感兴趣的:(R)