基于R语言的判别分析方法和分类方法实现

基于R语言的判别分析方法和分类方法

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

判别分析根据所采用的数据模型,可分为线性判别分析和非线性判别分析。根据判别准则可分为Fisher判别、Bayes判别和距离判别。其中最基本的Fisher判别方法也被称为线性判别方法。该方法的主要思想是将多维数据投影到某个方向上,投影的原则是将总体与总体尽可能的分开,然后再选择合适的判别规则将新的样本分类判别。Fisher判别会投影降维,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一组内的投影值所形成的组内离差尽可能小,而不同组间的投影值所形成的类间离差尽可能大。Bayes判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断。距离判别思想是根据已知分类的数据计算各类别的重心,对未知分类的数据,计算它与各类重心的距离,与某个重心距离最近则归于该类。 1.线性判别

当不同类样本的协方差矩阵相同时,我们可以在R中使用MASS包的lda函数实现线性判别。值得注意的是当分类只有两种且总体服从多元正态分布条件下,Bayes判别与Fisher判别、距离判别是等

价的。利用table函数建立混淆矩阵,比对真实类别和预测类别。 > library(MASS) > data(iris)

> iris.lda=lda(Species~.,data=iris) > table(Species,predict(iris.lda,iris)$class)

Species setosa versicolor virginica setosa 50 0 0 versicolor 0 48 2 virginica 0 1 49

> table<-table(Species,predict(iris.lda,iris)$class) > sum(diag(prop.table(table)))###判对率 [1] 0.98 2.二次判别

当不同类样本的协方差矩阵不同时,则应该使用二次判别。在使用lda和qda函数时注意:其假设是总体服从多元正态分布,若不满足的话则谨慎使用二次判别。

> iris.qda=qda(Species~.,data=iris,cv=T) > table(Species,predict(iris.qda,iris)$class)

Species setosa versicolor virginica setosa 50 0 0

versicolor 0 48 2 virginica 0 1 49

> table<-table(Species,predict(iris.qda,iris)$class) > sum(diag(prop.table(table)))###判对率 [1] 0.98 3.贝叶斯判别

贝叶斯判别式假定对研究对象已有一定的认识 这种认识常用先验概率来描述,当取得样本后就可以用样本来修正已经有的先验概率分布得出后验概率分布,然后通过后验概率分布进行各种统计推。实际上就是使平均误判损失(误判概率与误判损失的结合)ECM达到极小的过程。 > library(MASS) > data(iris)

> iris.Beyes=lda(Species~.,data=iris,prior=c(1,1,1)/3) > table(Species,predict(iris.Beyes,iris)$class)

Species setosa versicolor virginica setosa 50 0 0 versicolor 0 48 2 virginica 0 1 49

> table<-table(Species,predict(iris.Beyes,iris)$class) > sum(diag(prop.table(table)))###判对率

[1] 0.98

上面是先验概率相等的情形,下面介绍先验概率不等的情形 > iris.Beyes1=lda(Species~.,data=iris,prior=c(7,8,15)/30) > table(Species,predict(iris.Beyes1,iris)$class)

Species setosa versicolor virginica setosa 50 0 0 versicolor 0 48 2 virginica 0 1 49

> table<-table(Species,predict(iris.Beyes1,iris)$class) > sum(diag(prop.table(table)))###判对率 [1] 0.98

判别分析是半监督分类,就是判别函数求解的时候按照已知类别样本计算,但是对于未知类别样本应用判别函数时不做任何监督。;而决策树和神经网络等方法属于有监督分类,从分类准则建立,到准则的部署全程控制。训练神经网络和决策树是监督学习的最常见技术。这两种技术(神经网络和决策树)高度依赖于事先确定的分类系统给出的信息。对于神经网络来说,分类系统用于判断网络的错误,然后调整网络适应它;对于决策树,分类系统用来判断哪些属性提供了最多的信息,如此一来可以用它解决分类系统的问题。 下面就介绍几种有监督分类方法 4.利用决策树分类

决策树是以实例为基础的归纳学习算法。它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。 它采用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,并根据不同的属性值从该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路径就对应着一条合取规则,整个决策树就对应着一组析取表达式规则。 > library(tree) > set.seed(2) > data(iris)

> train=sample(1:nrow(iris),100) > iris.test=iris[-train,]

> tree.Species=tree(Species~.,iris,subset=train) > tree.pred=predict(tree.Species,iris.test,type='class') > table(tree.pred,iris.test$Species)

tree.pred setosa versicolor virginica setosa 15 0 0 versicolor 0 16 0 virginica 0 1 18

> table<-table(tree.pred,iris.test$Species) > sum(diag(prop.table(table)))###判对率 [1] 0.98

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4