R语言马氏距离判别法

 没啥好解释的,就放个代码和运行结果吧

#数据准备
x1<-c(3,3,2,3,3,3,3,3,2,2,1,3,2,1,2,2,2,3,3,2,2,2,2,2)
x2<-c(28,45,55,55,50,70,75,80,50,35,40,50,35,50,40,45,25,40,50,70,70,45,25,25)
x3<-c(2,2,3,3,2,3,3,3,3,1,2,2,2,2,2,2,1,2,3,3,3,2,1,1)
x4<-c(10.4,22,16,14.5,17.5,16.7,12.7,20.2,13.5,18.2,25,15.4,26,22.5,16.5,
	16.4,30,17,14.5,20.2,17,18.4,24.8,40)
x5<-c(18,18,14,11,10,15,12,20,10,5,7,1.5,6,4,2,2.5,5.5,10,13,20,18,2.5,5,5.8)
x6<-c(7.5,11.5,14.5,12.5,15,14,9.5,17,12,15.5,12,13.5,19,10,15,10,15,12,10.5,
	16.5,15,10,15,16)
x7<-c(3,3,3,4,3,2,3,2,3,1,2,3,1,2,1,1,2,2,3,3,2,1,2,3)
y<-factor(c(rep('Collapse',9),rep('Stable',8),rep('Collapse',4),
		rep('Stable',3)),levels=c('Collapse', 'Stable'))
data<-data.frame(x1,x2,x3,x4,x5,x6,x7,y)
#划分训练集
train<-data[1:17,]
test<-data[18:24,1:7]
#挑选类别
d1<-subset(train,y=="Collapse")
dim(d1)
d2<-subset(train,y=="Stable")
dim(d2)
#计算马氏距离并判别
ma1<-mahalanobis(train[1:7],colMeans(d1[,1:7]),cov(d1[,1:7]))
ma2<-mahalanobis(train[1:7],colMeans(d2[,1:7]),cov(d2[,1:7]))
pre<-c()
for(i in 1:17)
{
	if(ma1[i]<ma2[i]) pre[i]<-'Collapse'
	else pre[i]<-'Stable'
}
#合并结果
distance1<-data.frame(ma1,ma2,true=train[,8],pre)
distance1
#测试集结果
ma3<-mahalanobis(test,colMeans(d1[,1:7]),cov(d1[,1:7]))
ma4<-mahalanobis(test,colMeans(d2[,1:7]),cov(d2[,1:7]))
pre<-c()
for(i in 1:7)
{
	if(ma3[i]<ma4[i]) pre[i]<-'Collapse'
	else pre[i]<-'Stable'
}
distance2<-data.frame(ma3,ma4,true=data[18:24,8],pre)
distance2

 

 

 

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值