课本习题5.4 根据经验,今天与昨天的湿度差X1及今天的气压差x2是预报明天是否下雨的两个重要因素。现收集到一批样本数据如下。
N1(雨天) x1 -1.9 -6.9 5.2 5 7.3 6.8 0.9 -12.5 x2 3.2 10.4 2 2.5 0 12.7 -15.4 -2.5 N2(非雨天) x1 x2 1.5 3.8 0.2 -0.1 0.4 2.7 2.1 -4.6 -1.7 -2.6 2.6 -2.8 1.3 6.8 6.2 7.5 14.6 8.3 0.8 4.3 10.9 13.1 12.8 10 今测得x1=0.6,x2=3.0,假定两组的协方差矩阵相等,试用判别分析法预报明天是否会下雨。 解:先编写R程序(程序名:discriminiant.distance.R) discriminiant.distance <- function
(TrnX1, TrnX2, TstX = NULL, var.equal = FALSE){ if (is.null(TstX) == TRUE) TstX <- rbind(TrnX1,TrnX2) if (is.vector(TstX) == TRUE) TstX <- t(as.matrix(TstX)) else if (is.matrix(TstX) != TRUE) TstX <- as.matrix(TstX)
if (is.matrix(TrnX1) != TRUE) TrnX1 <- as.matrix(TrnX1) if (is.matrix(TrnX2) != TRUE) TrnX2 <- as.matrix(TrnX2) nx <- nrow(TstX)
blong <- matrix(rep(0, nx), nrow=1, byrow=TRUE, dimnames=list(\"blong\
mu1 <- colMeans(TrnX1); mu2 <- colMeans(TrnX2)
if (var.equal == TRUE || var.equal == T){S <- var(rbind(TrnX1,TrnX2)) w <- mahalanobis(TstX, mu2, S) - mahalanobis(TstX, mu1, S) } else{
S1 < -var(TrnX1); S2 <- var(TrnX2) w <- mahalanobis(TstX, mu2, S2) - mahalanobis(TstX, mu1, S1) }
for (i in 1:nx){
if (w[i] > 0)blong[i] <- 1 else
blong[i] <- 2 } blong }
(注释:在程序中,输入变量表示类TrnX1、类TrnX2训练样本,其输入格式是数据框,或矩阵,输入变量TstX是待测样本,其输入格式是数据框,或矩阵,或向量,如果不输入,则待测样本为两个训练样本之和,即计算两个样本的回代情况。输入变量var.equal是逻辑变量,var.equal=TRUE表示两个总体的协方差阵相同;否则为不同。函数的输出是有1和2构成的一位矩阵,1表示待测样本属于类TrnX1,2表示待测样本属于类TrnX2. 程序中用到距离函数Mahalanobis,mahalanobis()该函数的使用格式是
mahalanobis(x, center, cov, inverted=FALSE, ...)
其中x是由样本数据构成的向量或矩阵,center为样本中心,cov为样本的协方差阵,其公式为
D2 = (x − µ)T Σ−1 (x − µ).)
再用编辑器里输入数据调用mahalanobis()进行判别,输入的代码及运行的结果如下: >classX1<-data.frame(x1=c(-1.9,-6.9,5.2,5.0,7.3,6.8,0.9,-12.5,1.5,3.8),x2=c(3.2,10.4,2.0,2.5,0.0,12.7,-15.4,-2.5,1.3,6.8))
>classX2<-data.frame(x1=c(0.2,-0.1,0.4,2.7,2.1,-4.6,-1.7,-2.6,2.6,-2.8),x2=c(6.2,7.5,14.6,8.3,0.8,4.3,10.9,13.1,12.8,10.0))
> source(\"discriminiant.distance.R\") > t=c(0.6,3.0)
> discriminiant.distance(classX1, classX2,t, var.equal=TRUE) 1 blong 1 >
由此可看出t属于样本classX1,即可以预报明天会下雨。
判别分析中的距离判别法 1. 定义的Mahalanobis距离:
x, y是从均值为 µ,协方差阵位为 Σ 的总体 X中抽取的样本,则总体
X 内两点 x ,y 的 Mahalanobis距离为
d(x, y) = (x − y)T Σ−1 (x − y).
样本 x与总体 X 的 Mahalanobis距离为
d(x, X ) = (x − µ)T Σ−1 (x − µ). )
因篇幅问题不能全部显示,请点此查看更多更全内容