R语言中的多元统计之判别分析
更新时间:2023-11-30 02:54:01 阅读量: 教育文库 文档下载
- 多元统计判别分析推荐度:
- 相关推荐
前言
判别分析(discriminant analysis)是多元统计分析中较为成熟的一种分类方法,它的核心思想是“分类与判断”,即根据已知类别的样本所提供的信息,总结出分类的规律性,并建立好判别公式和判别准则,在此基础上,新的样本点将按照此准则判断其所属类型。例如,根据一年甚至更长时间的每天的湿度差及压差,我们可以建立一个用于判别是否会下雨的模型,当我们获取到某一天(建立模型以外的数据)的湿度差及压差后,使用已建立好的模型,就可以得出这一天是否会下雨的判断。 根据判别的组数来区分,判别分析可以分为两组判别和多组判别。接下来,我们将学习三种常见的判别分析方法,分别是:
?
距离判别 Bayes判别 Fisher判别
?
?
一、距离判别基本理论
假设存在两个总体本到两个总体的距离样本属于总体
和
,另有为一个维的样本值,计算得到该样和
,如果
;若
大于
等于
,则认为
,
,反之样本则属于总体
则该样本待判。这就是距离判别法的基本思想。
在距离判别法中,最核心的问题在于距离的计算,一般情况下我们最常用的是欧式距离,但由于该方法在计算多个总体之间的距离时并不考虑方差的影响,而马氏距离不受指标量纲及指标间相关性的影响,弥补了欧式距离在这方面的缺点,其计算公式如下:
,
为总体之间的协方差矩阵
二、距离判别的R实现(训练样本)
首先我们导入数据
# 读取SAS数据 > library(sas7bdat)
> data1 <- read.sas7bdat('disl01.sas7bdat') # 截取所需列数据,用于计算马氏距离 > testdata <- data1[2:5] > head(testdata,3) X1 X2 X3 X4 1 -0.45 -0.41 1.09 0.45 2 -0.56 -0.31 1.51 0.16 3 0.06 0.02 1.01 0.40 # 计算列均值
> colM <- colMeans(testdata) > colM
X1 X2 X3 X4 0.096304348 -0.006956522 2.033478261 0.431739130 # 计算矩阵的协方差
> cov_test <- cov(testdata) > cov_test
X1 X2 X3 X4 X1 0.068183816 0.027767053 0.14996870 -0.002566763 X2 0.027767053 0.015363865 0.05878251 0.001252367 X3 0.149968696 0.058782512 1.01309874 0.028607150 X4 -0.002566763 0.001252367 0.02860715 0.033912464 # 样本的马氏距离计算
> distance <- mahalanobis(testdata,colM,cov_test) > head(distance,5)
[1] 12.726465 11.224681 1.692702 1.347885 2.369820
这样,我们得到了距离判别中最关键的马氏距离值,在此基础上就可以进行进一步的判别分析了。不过我们介绍一个R的第三方包WMDB,该包的wmd()函数可以简化我们的距离判别过程,函数将输出样本的分类判别结果、错判的样本信息以及判别分析的准确度。
> library(WMDB) > head(data1,3)
A X1 X2 X3 X4 1 1 -0.45 -0.41 1.09 0.45 2 1 -0.56 -0.31 1.51 0.16 3 1 0.06 0.02 1.01 0.40
# 提取原始数据集的A列生成样品的已知类别 > testdata_group <- data1$A # 转换为因子变量,用于wmd()函数中
> testdata_group <- as.factor(testdata_group) > wmd(testdata,testdata_group)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
blong 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 1 2 2 2
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 blong 2 2 2 2 2 2 1 2 2 2 1 1 1 1 1 2 1 2 2 [1] \
[1] 15 16 20 22 23 24 34 38 39 40 41 42 44 [1] \ [1] 2 2 2 1 1 1 1 1 1 1 1 1 1 [1] \ [1] 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2
[1] \[1] 0.7173913
由分析结果可知,根据已知分类的训练样品建立的判别规则,重新应用于训练样品后,出现了13个错判样品,拥有71.7%的准确度。
三、距离判别的R实现(测试样本)
接着,当我们获取到未分类的新样本数据时,使用wmd()函数,在训练样本的基础上进行这些数据的距离判别
# 导入数据,一共10个样本
> data2 <- read.sas7bdat('disldp01.sas7bdat') # 截取所需列数据
> newtestdata <- data2[1:4] # 进行判别分析
> wmd(testdata,testdata_group,TstX = newtestdata) 1 2 3 4 5 6 7 8 9 10 blong 1 1 1 1 1 1 2 2 2 1
根据马氏距离判别分析得到的结果,10个待判样品中,第一类7个,第二类3个。
距离判别方法简单实用,它只要求知道总体的数字特征,而不涉及总体的分布,当总体均值和协方差未知时,就用样本的均值和协方差矩阵来估计,因此距离判别没有考虑到每个总体出现的机会大小,即先验概率,没有考虑到错判的损失。因此,我们进一步学习贝叶斯判别法。
一、贝叶斯判别基本理论
贝叶斯判别法的前提是假定我们已经对所要分析的数据有所了解(比如数据服从什么分别,各个类别的先验概率等),根据各个类别的先验概率求得新样本属于某类的后验概率。该算法应用到经典的贝叶斯公式,该公式为:
假设有两个总体和,分别具有概率密度函数和,并且根
据以往的统计分析,两个总体各自出现的先验概率为和,当一个样本发生时,求该样本属于某一类的概率,计算公式为:
这样,我们得到了该样本属于两类总体的概率,分别为和
,属于哪一类总体的概率值大,我们则将样本划分到该类中。
二、贝叶斯判别的R实现
在R中,我们使用klaR包中的NaiveBayes()函数实现贝叶斯判别分析,函数调用公式如下:
> NaiveBayes(formula, data, ..., subset, na.action = na.pass) # formula指定参与模型计算的变量,以公式形式给出,类似于y=x1+x2+x3 # na.action指定缺失值的处理方法,默认情况下不将缺失值纳入模型计算,也不会发生报错信息,当设为“na.omit”时则会删除含有缺失值的样本 # 数据准备,使用R内置数据集iris
# 通过抽样建立训练样本(70%)和测试样本(30%)
> index <- sample(2,size = nrow(iris),replace = TRUE,prob = c(0.7,0.3)) > train_data <- iris[index == 1,] > test_data <- iris[index == 2,]
# 载入所用包 > library(klaR) # 构建贝叶斯模型
> Bayes_model <- NaiveBayes(Species ~ ., data = train_data) # 进行预测
> Bayes_model_pre <- predict(Bayes_model, newdata = test_data[,1:4]) # 生成实际与预判交叉表
> table(test_data$Species,Bayes_model_pre$class)
setosa versicolor virginica setosa 20 0 0 versicolor 0 17 0 virginica 0 3 7
从上表生成的交叉表中,我们可以看到在该模型中错判了3个。
# 生成预判精度
> sum(diag(table(test_data$Species,Bayes_model_pre$class))) + / sum(table(test_data$Species,Bayes_model_pre$class)) [1] 0.9361702
三、Fisher判别基本理论
Fisher判别法的基本思想是“投影”,将组维的数据向低维空间投影,使其投影的组与组之间的方差尽可能的大,组内的方差尽可能的小。因
此,Fisher判别法的重点就是选择适当的“投影轴”。判别函数为接下来我们以两类总体举例。
,
首先我们将样本点投影到一维空间,旋转坐标轴至总体单位尽可能分开的方向,此时分类变量被简化为一个,判别函数果不理想,可以考虑投影到二维空间(
;如果划分的效),以此类推。
上图为二
维空间的Fisher判别,从图中可以看到,无论我们把总体到还是轴,都不能很好的把两类总体区分出来。
为此,我们需要寻找一条合适的投影线,使得两类总体向该线投影后的区分程度达到最大,线性判别函数
即为该投影线的表达形
和
投影
式(这里我们仅介绍Fisher判别的基本原理,不涉及参数的具体推导
和求解,这些都可用R程序求得)。
四、Fisher判别的R实现
在R中,我们使用MASS包中的lda()函数实现Fisher判别分析,函数调用公式如下:
> lda(formula, data, ..., subset, na.action)
# formula:指定参与模型计算的变量,以公式形式给出,类似于y=x1+x2+x3 # na.action:指定缺失值的处理方法,默认情况下,缺失值的存在使算法无法运行,当设置为“na.omit”时则会删除含有缺失值的样本 # 数据准备,使用R内置数据集iris
# 通过抽样建立训练样本(70%)和测试样本(30%)
> index <- sample(2,size = nrow(iris),replace = TRUE, prob = c(0.7,0.3)) > train_data <- iris[index == 1,] > test_data <- iris[index == 2,] # 载入所用包 > library(MASS) # 构建Fisher判别模型
> fisher_model <- lda(Species~., data = train_data) # 进行预测
> fisher_model_pre <- predict(fisher_model, newdata = test_data[,1:4]) # 生成实际与预判交叉表
> table(test_data$Species,fisher_model_pre$class)
setosa versicolor virginica setosa 20 0 0 versicolor 0 14 1 virginica 0 0 18 # 生成预判精度
> sum(diag(table(test_data$Species,fisher_model_pre$class))) + / sum(table(test_data$Species,fisher_model_pre$class)) [1] 0.9811321
五、Fisher判别进阶——非线性判别
在判别分析的实际应用中,对复杂的数据使用线性判别可能无法得到理想的效果。为此,我们需要使用类似于二次判别函数的非线性分类方法,将样本点投影到若干种二次曲面中,实现理想的判别效果。
在R中,非线性判别使用MASS包的qda()函数来实现,调用公式为:
> qda(formula, data, ..., subset, na.action) # 使用lda()函数同样的数据集
> fisher_model_2 <- qda(Species~., data = train_data) > fisher_model_pre_2 <- predict(fisher_model_2, newdata = test_data[,1:4])
> table(test_data$Species,fisher_model_pre_2$class)
setosa versicolor virginica setosa 20 0 0 versicolor 0 14 1 virginica 0 0 18
> sum(diag(table(test_data$Species,fisher_model_pre_2$class))) + / sum(table(test_data$Species,fisher_model_pre_2$class)) [1] 0.9811321
结果我们发现,线性判别法和非线性的二次判别法得到的结果一致,这说明线性判别法已经能够很好的将数据的类别划分出来了,且准确率达到98%。不过我们需要认识到,这一结果主要是由于我们所用的数据集较为简单直观,对于更为复杂的高维数据,非线性判别要比线性判别在准确度上有着较大的提升。
正在阅读:
R语言中的多元统计之判别分析11-30
精选人教版八年级物理下册11.3动能和势能同步练习05-13
网络管理与维护 习题参考答案09-24
对建筑工程预应力施工技术的探讨06-23
2015年广东公务员考试行测大纲科目10-24
初中语文教学中信息技术应用的优势05-22
食品安全生产论文食品酶学论文12-28
2013年高考文科数学试卷分析125308-13
室内外广告位管理办法和操作流程09-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 判别
- 言中
- 多元
- 统计
- 分析
- 拥有人事部应届毕业生进京指标的单位或公司名单
- iFIX的调度
- 解决gns3 1.5.3连接不了虚拟机pc、linux的问题附带iou安装
- 湖南 教育科学十五规划课题成果合集 中小学英语一贯制分层目标教学课题成果公报 刘正芳 株洲市南方中学
- 抽象代数
- 高中历史第一单元中国古代的农耕经济单元小结与测评学案岳麓版必修2
- 药学英语听力汇总
- 四百米趣味接力赛活动策划书
- “三严三实”专题学习研讨会发言材料(2)(2) -
- 快餐店餐饮创业计划书范文-精品文案范文
- 水利水电工程设计概预算编制规定
- 八年级物理导学案--平面镜成像
- C语言基础练习题(含答案)
- 中国海洋石油公司介绍1
- 2016年上海外国语大学新闻传播学院(广告学)传播学综合之《现代广告通论》复试笔试仿真模拟题
- 信息编码习题答案或提示
- 威伦通屏的常见问题及解决方法
- 小额贷款公司考试试卷B
- 企业内部控制五要素
- 招聘与甄选