R语言中的多元统计之判别分析报告
- 格式:doc
- 大小:146.64 KB
- 文档页数:15
《应用多元统计分析》第四章判别分析实验报告第四章判别分析实验报告实验环境Windows xp、Windows vista、Windows 7等,软件SPSS 11.0版本及以上。
实验结果与分析本题中记变量值CF_TD, NI_TA, CA_CL, CA_NS分别为X1,X2,X3,X4 (1)Fisher判别函数特征值EigenvaluesFunction Eigenvalue% of Variance Cumulative %CanonicalCorrelation1.940a100.0100.0.696a. First 1 canonical discriminant functions were used in the analysis.(2)Fisher判别函数有效性检验Wilks' LambdaTest ofFunction(s)Wilks' Lambda Chi-square df Sig.1.51527.8394.000(3)标准化的Fisher判别函数系数Standardized Canonical Discriminant FunctionCoefficientsFunction1CF_TD.134NI_TA.463CA_CL.715CA_NS-.220所以标准化的判别函数为:Y=0.134X1+0.463X2+0.715X3-0.220X4得出Y=0.9012(4)未标准化的Fisher判别函数系数Canonical Discriminant Function CoefficientsFunction1CF_TD.629NI_TA 4.446CA_CL.889CA_NS-1.184 (Constant)-1.327 Unstandardized coefficients所以为标准化的费希尔判别函数为:Y=-1.327+0.629X1+4.446X2+0.889X3-1.184X4得出Y=-0.1703(5)组重心处的费希尔判别函数值Functions at Group CentroidsG Function11.8692-1.035 Unstandardized canonical discriminant functions evaluated at group means各类重心在空间中的坐标位置。
多元统计分析r代码-2#图2.1马氏距离例rm(list=ls())x=seq(from=-5,to=10,by=0.01)y1=dnorm(x,0,1) #计算密度y2=dnorm(x,4,2) #计算密度plot(x,y1,type="l",xlab="", ylab="",axes=F,xlim=c(-5,10), ylim=c(0,0.4))lines(x,y2,type="l")axis(2)rect(-5.8, 0, 10, 0.4)rect(0, 0, 0, 0.4)rect(1.658, 0, 1.658, 0.1)rect(4, 0, 4, 0.2)text(1.658,-0.01,expression(A),cex=1)text(0,-0.008,expression(0),cex=0.9)text(4,-0.01,expression(4),cex=1)#例2.1x<-c(1,1,3,4,2,0,1,2,3,5); dim(x)<-c(5,2)d<-dist(x)hc1<-hclust(d, "single"); hc2<-hclust(d, "complete")hc3<-hclust(d, "average"); hc4<-hclust(d, "ward")opar <- par(mfrow = c(2, 2))plot(hc1,hang=-1); plot(hc2,hang=-1)plot(hc3,hang=-1); plot(hc4,hang=-1)par(opar)dend1<-as.dendrogram(hc1)opar <- par(mfrow = c(2, 2),mar = c(4,3,1,2))plot(dend1)plot(dend1, nodePar=list(pch = c(1,NA), cex=0.8, lab.cex = 0.8),type = "t", center=TRUE)plot(dend1, edgePar=list(col = 1:2, lty = 2:3), dLeaf=1, edge.root = TRUE)plot(dend1, nodePar=list(pch = 2:1,cex=.4*2:1, col = 2:3), horiz=TRUE)par(opar)#例2.2## 输入相关矩阵.x<- c(1.000, 0.846, 0.805, 0.859, 0.473, 0.398, 0.301, 0.382,0.846, 1.000, 0.881, 0.826, 0.376, 0.326, 0.277, 0.277,0.805, 0.881, 1.000, 0.801, 0.380, 0.319, 0.237, 0.345,0.859, 0.826, 0.801, 1.000, 0.436, 0.329, 0.327, 0.365,0.473, 0.376, 0.380, 0.436, 1.000, 0.762, 0.730, 0.629,0.398, 0.326, 0.319, 0.329, 0.762, 1.000, 0.583, 0.577,0.301, 0.277, 0.237, 0.327, 0.730, 0.583, 1.000, 0.539,0.382, 0.415, 0.345, 0.365, 0.629, 0.577, 0.539, 1.000)names<-c("身高 x1", "手臂长 x2", "上肢长 x3", "下肢长 x4", "体重 x5","颈围 x6", "胸围 x7", "胸宽 x8")r<-matrix(x, nrow=8, dimnames=list(names, names))## 作系统聚类分析,## as.dist()的作用是将普通矩阵转化为聚类分析用的距离结构.d<-as.dist(1-r); hc<-hclust(d); dend<-as.dendrogram(hc)## 写一段小程序, 其目的是在绘图命令中调用它, 使谱系图更好看. nP<-list(col=3:2, cex=c(2.0, 0.75), pch= 21:22,bg= c("light blue", "pink"),lab.cex = 1.0, lab.col = "tomato")addE <- function(n){if(!is.leaf(n)) {attr(n, "edgePar") <- list(p.col="plum")attr(n, "edgetext") <- paste(attr(n,"members"),"members") }n}## 画出谱系图.op<-par(mfrow=c(1,1), mar=c(4,3,0.5,0))de <- dendrapply(dend, addE); plot(de, nodePar= nP)par(op)#分成三类的程序和计算结果plclust(hc, hang=-1); re<-rect.hclust(hc, k=3)#例2.3续例1.2,海南板块的股票数据read.csv("hn-2.csv",header=T)->DAr<-DA[,2:12]/doc/bd16977641.html,s<-DA[,1]X<-data.frame(r, /doc/bd16977641.html,s)HN<-dist(scale(r))hc1<-hclust(HN, "complete")hc2<-hclust(HN, "average")hc3<-hclust(HN, "centroid")hc4<-hclust(HN, "ward")opar<-par(mfrow=c(2,2), mar=c(5.2,4,0,0),cex=0.8) plclust(hc1,hang=-1)re1<-rect.hclust(hc1,k=5,border="red")plclust(hc2,hang=-1)re2<-rect.hclust(hc2,k=5,border="red")plclust(hc3,hang=-1)re3<-rect.hclust(hc3,k=5,border="red")plclust(hc4,hang=-1)re4<-rect.hclust(hc4,k=5,border="red")par(opar)#例2.4动态聚类km <- kmeans(HN, 5, nstart = 20); kmsort(km$cluster)。
《多元统计实验》判别分析实验报告cbind(类别,newG,Z$post,Z$x)#合并原分类、回判分类回判后验概率及判别tab=table(类别,newG)#原分类和新分类列表比较tabsum(diag(prop.table(tab)))prenew=predict(ld,newdata=newdata)prenew#对三个待判样本进行判定cbind(prenew$class,prenew$post,prenew$x)#也可以按列合并在一起看二、实验结果分析5.5进行Fisher判别分析.若一位新客户的8个指标分别为(2 500, 1 500, 0,3, 2,3, 4, 1),试对该客户的信用度进行评价.以上输出结果中包括了lad()所用的公式、先验概率1、2、3、4、5 为:0.2941176 、0.1176471 、0.1764706 0.1764706 、0.2352941,各组均值向量、线性判别函数的系数。
输出所有分类组由输出结果可知第十二号样品为第四组的被误判给了第五组,且与距离判别法结果一致,最后对新客户的8个指标(2500,1500,0,3,2,3,4,1)进行判定。
说明:由$class可以看出该新用户被判入第一组,结果与距离判别法一致,对应的后验概率决定该新用户的归类组。
因此该新用户的信用度评价为一。
5.6试对表5-7中的数据进行Bayes判别分析并对8个待判样品的类别进行判定.由上结果可知,两个组别为一的被误判为第二组,第二组的三个被误判为第一组。
出现5个误判结果正确率为:0.9411765,误判错误的概率仍然较低。
Bayes判别法对八个待测样本的判定结果为:四个判给第一组,四个判给第二组,且Bayes 判别法是采用了新的后验概率,而不是先验概率。
因此判出概率相同。
应用多元统计分析第8章 对应分析- 1-对应分析(Correspondence Analysis)是在因子分析的基础上发展起来的一种视觉化的数据分析方法,目的是通过定位点图直观地揭示样品和变量之间的内在联系。
R型因子分析是对变量(指标)进行因子分析,研究的是变量之间的相互关系;Q型因子分析是对样品作因子分析,研究的是样品之间的相互关系。
但无论是R型或Q型分析都不能很好地揭示变量和样品之间的双重关系。
而在许多领域错综复杂的多维数据分析中,经常需要同时考虑三种关系,即变量之间的关系、样品之间的关系以及变量与样品之间的交互关系。
法国学者苯参次(J.P.Benzecri)于1970年提出了对应分析方法,这个方法对原始数据采用适当的标度化处理,把R型和Q型分析结合起来,通过R型因子分析直接得到Q型因子分析的结果,同时把变量和样品反映到同一因子平面上,从而揭示所研究的样品和变量之间的内在联系。
在因子分析中,R型因子分析和Q型因子分析都是从分析观测数据矩阵出发的,它们是反映一个整体的不同侧面,因而它们之间一定存在内在联系。
对应分析就是通过某种特定的标准化变换后得到的对应变换矩阵Z将两者有机地结合起来。
具体地,就是首先给出变量的R型因子分析的协方差阵 和样品的Q型因子分析的协方差阵 。
由于矩阵 和 有相同的非零特征值,记为 ,如果 的对应于特征值 的标准化特征向量为 ,则容易证明, 的对应于同一特征值的标准化特征向量为当样本容量n很大时,直接计算矩阵 的特征向量会占用相当大的容量,也会大大降低计算速度。
利用上面关系式,很容易从 的特征向量得到 的特征向量。
并且由 的特征值和特征向量即可得到R 型因子分析的因子载荷阵A和Q型因子分析的因子载荷阵B,即有由于 和 具有相同的非零特征值,而这些特征值又是各个公因子的方差,因此设有p个变量的n个样品观测矩阵 ,这里要求所有元素 ,否则对所有数据同时加上一个适当的正数,以使它们满足以上要求。
多元统计分析R与Python的实现在进行多元统计分析时,选择合适的工具是非常重要的。
R和Python 是两种常用的数据分析工具,都具有强大的多元统计分析功能。
本文将为你介绍R和Python在多元统计分析中的应用和实现。
聚类分析是一种将数据分为不同组的方法,以发现数据内部的结构和模式。
在R中,可以使用“hclust”函数实现层次聚类分析。
判别分析是一种用于确定分类变量与预测变量之间关系的统计方法。
在R中,可以使用“lda”函数实现线性判别分析。
因子分析是一种用于识别数据背后潜在结构的方法。
在R中,可以使用“factanal”函数实现因子分析。
与R相比,Python在数据分析领域的应用也日渐增多。
Python的数据分析库主要有NumPy、Pandas和SciPy等。
NumPy是Python的数值计算库,提供了丰富的数值处理功能,包括矩阵运算、线性代数运算和随机数生成等。
在多元统计分析中,NumPy可以用于计算协方差矩阵和特征值、特征向量等。
Pandas是Python的数据分析库,提供了高效的数据结构和数据分析工具,包括数据的读取、处理和分析等。
在多元统计分析中,Pandas可以用于数据的清洗和预处理。
SciPy是Python的科学计算库,包含了许多用于科学计算的函数和工具。
在多元统计分析中,SciPy可以用于聚类分析、判别分析和因子分析等。
此外,Python还提供了诸多专门用于统计分析的模块和包,如StatsModels和Scikit-learn。
StatsModels是Python的统计分析库,提供了许多统计模型和统计方法的实现。
Scikit-learn是Python的机器学习库,提供了许多机器学习算法和模型的实现,其中包括了许多多元统计分析方法的实现。
总之,R和Python都是非常强大的多元统计分析工具,它们都提供了丰富的函数和包用于多元统计分析的实现。
选择使用哪种工具主要取决于个人偏好和具体的分析需求。
多元统计分析_判别分析实验报告一、实验目的本实验旨在通过对一组数据进行判别分析,了解判别分析的基本原理和应用过程,掌握判别分析的实现方法并运用MATLAB软件进行实现。
二、实验原理判别分析是一种分类方法,用于将已知的样本分类到已知类别中。
判别分析的目的是找到一个统计模型,通过对样本进行观测和测量,能够把它们判别为若干类别中的一种。
在判别分析中,样本数据是由多个指标组成,每个指标都是一个随机变量。
在多元统计中,这些指标被称为变量。
判别函数是一个用于将样本分类的函数,它以样本的多个变量作为输入,并输出该样本属于哪一类的分类决策。
判别函数的形式取决于所使用的判别方法。
判别分析中最重要的判别方法是线性判别分析。
线性判别分析是一种找到最佳线性分类器的方法。
在线性判别分析中,样本被认为是由每个变量线性组合而成,各个变量之间存在某种相关性。
判别分析的目标是找到一条分割两个类别的直线,使得该直线上或下的样本属于不同的类别。
这条直线被称为判别函数。
对于一个具有p个指标的样本,判别函数可以通过下式计算得到:$g_j(x)=x^T\hat{a_j}+\hat{a}_{j0}$其中,j表示第j个判别函数,x是一个向量,包含了样本各个指标的取值,$\hat{a_j}$是一个向量,表示样本各个变量在第j个判别函数中的系数,$\hat{a}_{j0}$是一个截距项。
在线性判别分析中,判别函数的系数可以通过最小平方判别函数系数估计公式获得:$\hat{a_j}=(\sum_{i=1}^{n_j}(x_i-\bar{x_j})(x_i-\bar{x_j})^T)^{-1}(\bar{x_1}-\ bar{x_2})$其中,$\bar{x_1}=\frac{1}{n_1}\sum_{i=1}^{n_1}x_i$n1和n2分别是两个类别的样本数。
三、实验步骤1. 导入数据并分别计算两个类别数据的均值和协方差矩阵。
2. 计算最佳线性判别函数,并作图展示判别平面和两个类别的分布情况。
多元统计分析实验报告多元统计分析实验报告引言:多元统计分析是一种研究多个变量之间关系的方法,通过对多个变量进行综合分析,可以揭示出变量之间的相互作用和影响,帮助我们更好地理解数据背后的规律和现象。
本实验旨在通过对一组数据进行多元统计分析,探索变量之间的关系,并对实验结果进行解读。
实验设计:本实验选取了一组包含多个变量的数据集,其中包括性别、年龄、教育程度、收入水平、婚姻状况等变量。
通过对这些变量进行多元统计分析,我们希望了解这些变量之间是否存在相关性,并进一步探究各个变量对于整体数据集的影响。
数据收集与处理:首先,我们收集了一份包含上述变量的样本数据,共计1000个样本。
接下来,我们对数据进行了清洗和处理,包括去除异常值、缺失值的处理等。
经过处理后,我们得到了一份完整的数据集,可以进行后续的多元统计分析。
多元统计分析方法:在本实验中,我们使用了多元统计分析中的主成分分析和聚类分析两种方法。
主成分分析是一种通过将原始变量转化为一组新的综合变量,来降低数据维度并保留尽可能多的信息的方法。
聚类分析则是一种通过对样本进行分类,使得同一类别内的样本相似性较高,不同类别之间的差异性较大的方法。
实验结果与分析:经过主成分分析,我们得到了一组主成分,它们分别代表了原始变量的不同方面。
通过对主成分的解释,我们可以发现性别、年龄和教育程度等变量对于整体数据集的解释性较高,而收入水平和婚姻状况等变量的解释性较低。
这说明性别、年龄和教育程度等因素在整体数据中起着较为重要的作用。
接下来,我们进行了聚类分析,将样本分为若干个类别。
通过观察不同类别的样本特征,我们可以发现在同一类别内,样本的性别、年龄和教育程度等变量较为相似,而收入水平和婚姻状况等变量的差异较大。
这说明性别、年龄和教育程度等因素在样本分类中起到了重要的作用,而收入水平和婚姻状况等因素则对样本分类的影响较小。
结论与展望:通过本次实验的多元统计分析,我们可以得出以下结论:性别、年龄和教育程度等因素在整体数据集中起着较为重要的作用,并且对样本分类也具有一定的影响。
R语言判别分析实验报告判别分析是一种用于分类和预测的统计方法,广泛应用于各个领域,包括社会科学、医学、工程等。
本实验报告旨在介绍如何使用R语言进行判别分析,并分析实验结果。
一、实验目的本实验的目的是使用R语言进行判别分析,通过给定的数据集建立判别函数,并使用该函数对新样本进行分类预测。
二、实验方法本实验使用R语言中的“discrim”函数进行判别分析。
首先,读取实验所需的数据集,并进行数据预处理。
然后,划分训练集和测试集数据。
接下来,使用训练集数据建立判别函数,并使用该函数对测试集数据进行分类预测。
最后,评估分类的准确性。
三、实验步骤1. 数据读取和预处理:使用R语言中的“read.csv”函数读取数据集文件,查看数据的信息和结构,包括变量的名称、类型和缺失值情况。
对于有缺失值的数据,可以使用“na.omit”函数或者其他方法进行处理。
2. 划分训练集和测试集数据:将数据集分为训练集和测试集两部分,一般采用70%的数据作为训练集,30%的数据作为测试集。
可以使用“sample”函数进行随机抽样,将数据集按照指定的比例划分。
3. 建立判别函数:使用“discrim”函数建立判别函数。
该函数需要指定判别变量和预测变量,并可以选择判别方法和先验概率。
一般采用线性、二次和多项式判别方法。
可以使用“summary”函数查看判别分析模型的统计信息和结果。
4. 分类预测:使用建立好的判别函数对测试集数据进行分类预测。
可以使用“predict”函数,指定判别函数和测试集数据,得到预测结果。
5.分类准确性评估:计算分类预测的准确性,可以使用混淆矩阵、ROC曲线和AUC值等指标进行评估。
四、实验结果根据给定的判别变量和预测变量,我们建立了判别函数,并使用该函数对测试集数据进行分类预测。
最后,我们计算了分类预测的准确性指标。
五、实验结论判别分析是一种有效的分类和预测方法,可以应用于各个领域。
本实验使用R语言进行判别分析,并通过分类预测的准确性评估,验证了判别函数的有效性。
R语言学习知识中的多元统计之判别分析判别分析(Discriminant Analysis)是一种用于将对象判别为不同组别的统计方法。
它可以用于分类问题,也可以用于降维。
判别分析的主要目标是,通过计算各个组别的样本统计量,建立一个分类函数,然后利用这个函数将新样本判别为相应的组别。
判别分析常用于数据挖掘、模式识别等领域,具有广泛的应用。
判别分析的基本思想是,通过计算组别的平均值、方差和协方差,找到一个合适的函数,使得组内差异尽可能小,组间差异尽可能大。
具体来说,判别分析可以分为线性判别分析(Linear Discriminant Analysis, LDA)和二次判别分析(Quadratic Discriminant Analysis, QDA)两种类型。
线性判别分析(LDA)假设不同组别的协方差矩阵相等,即各组别的协方差矩阵是相同的。
基于这个假设,LDA寻找一条直线(或超平面),使得在该直线(或超平面)上的投影点的组内方差最小,组间方差最大。
这条直线(或超平面)就是判别函数。
二次判别分析(QDA)则假设各组别的协方差矩阵可以不相等。
在QDA中,我们需要计算各组别的均值、协方差矩阵以及各组别的先验概率。
然后,通过计算马氏距离,将新样本判别为最接近的组别。
在R语言中,我们可以使用多个包来进行判别分析。
其中最常用的包是`MASS`和`cca`。
下面是一个简单的示例:首先,我们需要加载所需的包:```library(MASS)```然后,我们可以使用`lda`函数执行线性判别分析:```#创建一个包含两个组别的样本集合set.seed(123)group1 <- matrix(rnorm(100), ncol = 2) # 组别1group2 <- matrix(rnorm(100), ncol = 2) # 组别2data <- rbind(group1, group2)#创建组别向量groups <- factor(c(rep(1, 50), rep(2, 50)))#执行线性判别分析lda_model <- lda(groups ~ data)```执行完上述代码后,`lda_model`就是我们训练得到的线性判别分析模型。
R语言版应用多元统计分析对应分析多元统计分析是指在多个自变量或因变量的条件下,对它们之间的关系进行分析和解释的一种统计方法。
多元统计分析可以帮助我们理解变量之间的关系,并且可以用来预测未来的趋势。
R语言是一种功能强大的开源数据分析工具,可以进行各种多元统计分析。
在本文中,我们将介绍R语言中常用的多元统计分析方法,包括主成分分析、聚类分析、判别分析和回归分析。
```Rdata(iris)```聚类分析是一种将数据分组为相似的观测值的方法。
它可以帮助我们发现数据中的聚类模式。
常用的聚类分析方法包括层次聚类和k均值聚类。
在R语言中,可以使用hclust函数进行层次聚类分析,使用kmeans函数进行k均值聚类分析。
例如,以下代码将对iris数据集进行k均值聚类分析,并将其分为3个聚类:```Riris.cluster <- kmeans(iris[, 1:4], centers = 3)```判别分析是一种预测分类变量的方法。
它可以帮助我们根据多个连续变量预测离散分类变量的概率。
常用的判别分析方法包括线性判别分析和二次判别分析。
在R语言中,可以使用lda函数进行线性判别分析,使用qda函数进行二次判别分析。
例如,以下代码将对iris数据集进行线性判别分析,并进行分类预测:```Rlibrary(MASS)iris.lda <- lda(Species ~ ., data = iris)iris.pred <- predict(iris.lda, newdata = iris)$class```回归分析是一种用于研究因变量和一个或多个自变量之间关系的方法。
它可以帮助我们预测因变量的值,并对自变量的重要性进行评估。
常用的回归分析方法包括线性回归、逻辑回归和多元回归。
在R语言中,可以使用lm函数进行线性回归分析,使用glm函数进行逻辑回归分析。
例如,以下代码将对iris数据集进行线性回归分析:```Riris.lm <- lm(Sepal.Width ~ Sepal.Length + Petal.Length + Petal.Width, data = iris)summary(iris.lm)```除了上述提到的多元统计方法,R语言还提供了许多其他的多元分析方法,如典型相关分析、结构方程模型和多元方差分析等。
原创R语言多元统计分析介绍数据分析数据挖掘案例报告附代码R语言作为一种功能强大的数据分析工具,在数据挖掘领域得到了广泛的应用。
本文将介绍使用R语言进行多元统计分析的方法,并结合实际数据分析案例进行详细分析。
同时,为了便于读者学习和复现,也附上了相关的R代码。
一、多元统计分析简介多元统计分析是指同时考虑多个变量之间关系的统计方法。
在现实生活和研究中,往往会遇到多个变量相互关联的情况,通过多元统计分析可以揭示这些变量之间的联系和规律。
R语言提供了丰富的统计分析函数和包,可以方便地进行多元统计分析。
二、数据分析案例介绍我们选取了一份关于房屋销售数据的案例,来演示如何使用R语言进行多元统计分析。
该数据集包含了房屋的各种属性信息,如房屋面积、卧室数量、卫生间数量等,以及最终的销售价格。
我们的目标是分析这些属性与销售价格之间的关系。
首先,我们需要导入数据集到R中,并进行数据预处理。
预处理包括数据清洗、缺失值处理、异常值检测等。
R语言提供了丰富的数据处理函数和包,可以帮助我们高效地完成这些任务。
接下来,我们可以使用R语言的统计分析函数进行多元统计分析。
常用的多元统计分析方法包括主成分分析(PCA)、因子分析、聚类分析等。
这些方法可以帮助我们从众多的变量中找到重要的变量,对数据集进行降维和聚类,以便更好地理解数据和进行预测。
在本案例中,我们选择主成分分析作为多元统计分析的方法。
主成分分析是一种常用的降维技术,通过线性变换将原始变量转化为一组新的互相无关的变量,称为主成分。
主成分分析可以帮助我们发现数据中的主要模式和结构,从而更好地解释数据。
最后,我们可以通过可视化方法展示多元统计分析的结果。
R语言提供了丰富多样的数据可视化函数和包,可以生成各种图表和图形,帮助我们更直观地理解和传达数据分析的结果。
三、附录:R语言代码下面是进行多元统计分析的R语言代码。
需要注意的是,代码的具体实现可能会因数据集的不同而有所差异,请根据实际情况进行调整和修改。
前言判别分析(discriminant analysis)是多元统计分析中较为成熟的一种分类方法,它的核心思想是“分类与判断”,即根据已知类别的样本所提供的信息,总结出分类的规律性,并建立好判别公式和判别准则,在此基础上,新的样本点将按照此准则判断其所属类型。
例如,根据一年甚至更长时间的每天的湿度差及压差,我们可以建立一个用于判别是否会下雨的模型,当我们获取到某一天(建立模型以外的数据)的湿度差及压差后,使用已建立好的模型,就可以得出这一天是否会下雨的判断。
根据判别的组数来区分,判别分析可以分为两组判别和多组判别。
接下来,我们将学习三种常见的判别分析方法,分别是:•距离判别•Bayes判别•Fisher判别一、距离判别基本理论假设存在两个总体和,另有为一个维的样本值,计算得到该样本到两个总体的距离和,如果大于,则认为样本属于总体,反之样本则属于总体;若等于,则该样本待判。
这就是距离判别法的基本思想。
在距离判别法中,最核心的问题在于距离的计算,一般情况下我们最常用的是欧式距离,但由于该方法在计算多个总体之间的距离时并不考虑方差的影响,而马氏距离不受指标量纲及指标间相关性的影响,弥补了欧式距离在这方面的缺点,其计算公式如下:,为总体之间的协方差矩阵二、距离判别的R实现(训练样本)首先我们导入数据# 读取SAS数据> library(sas7bdat)> data1 <- read.sas7bdat('disl01.sas7bdat')# 截取所需列数据,用于计算马氏距离> testdata <- data1[2:5]> head(testdata,3)X1 X2 X3 X41 -0.45 -0.41 1.09 0.452 -0.56 -0.31 1.51 0.163 0.06 0.02 1.01 0.40# 计算列均值> colM <- colMeans(testdata)> colMX1 X2 X3 X4 0.096304348 -0.006956522 2.033478261 0.431739130 # 计算矩阵的协方差> cov_test <- cov(testdata)> cov_testX1 X2 X3 X4 X1 0.068183816 0.027767053 0.14996870 -0.002566763 X2 0.027767053 0.015363865 0.05878251 0.001252367X3 0.149968696 0.058782512 1.01309874 0.028607150X4 -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 X41 1 -0.45 -0.41 1.09 0.452 1 -0.56 -0.31 1.51 0.163 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 27blong 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 228 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46blong 2 2 2 2 2 2 1 2 2 2 1 1 1 1 1 2 1 2 2 [1] "num of wrong judgement"[1] 15 16 20 22 23 24 34 38 39 40 41 42 44[1] "samples divided to"[1] 2 2 2 1 1 1 1 1 1 1 1 1 1[1] "samples actually belongs to"[1] 1 1 1 2 2 2 2 2 2 2 2 2 2Levels: 1 2[1] "percent of right judgement"[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 10blong 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 virginicasetosa 20 0 0versicolor 0 17 0virginica 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 virginicasetosa 20 0 0versicolor 0 14 1virginica 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判别进阶——非线性判别在判别分析的实际应用中,对复杂的数据使用线性判别可能无法得到理想的效果。