楼主: fanshiqing
3460 3

[求助]薛老师书中的判别分析的程序做了些修改,出问题了,请大家帮忙看看 [推广有奖]

  • 0关注
  • 0粉丝

已卖:389份资源

高中生

92%

还不是VIP/贵宾

-

威望
0
论坛币
540 个
通用积分
2.3400
学术水平
7 点
热心指数
6 点
信用等级
5 点
经验
564 点
帖子
20
精华
0
在线时间
38 小时
注册时间
2007-11-3
最后登录
2016-3-21

楼主
fanshiqing 发表于 2008-4-28 07:58:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
     我对薛老师《统计建模与R软件》450页中多类别问题马氏距离判别做了一个修改,结果运行不了,麻烦大家帮我看看,谢谢了!
    我的目的是将训练样本TrnX中有n条记录,这n条记录分属于n个不同的类别,也就是说这n条数据是n个类别已经给定的中心位置mu,因子变量TrnG表示因子的类别,从1到n。TrnX中n个类别总体的方差协方差矩阵为对角线矩阵,其对角线元素在CovX中给出,每一行代表一个类别的对角线元素,以此判别TstX中的数据属于TrnX中的哪一类,结果以一个n*2的矩阵列出,分别列出TstX中每条记录属于TrnX中哪个类别,并列出计算出的马氏距离,我修改后的程序如下,请大家帮忙看一下,谢谢了!!

distinguish.distance<-function
  (TrnX, TrnG, CovX=NULL,TstX = NULL){
  if ( is.factor(TrnG) == FALSE){
    mx<-nrow(TrnX); mg<-nrow(TrnG)
    TrnX<-rbind(TrnX, TrnG)
    TrnG<-factor(rep(1:2, c(mx, mg)))
  }
  if (is.null(TstX) == TRUE) TstX<-TrnX
  if (is.vector(TstX) == TRUE) TstX<-t(as.matrix(TstX))
  else if (is.matrix(TstX) != TRUE)
    TstX<-as.matrix(TstX)
  if (is.matrix(TrnX) != TRUE) TrnX<-as.matrix(TrnX)

  nx<-nrow(TstX)
  blong<-matrix(rep(0, 2*nx), ncol=2)
  g<-length(levels(TrnG))
  mu<-as.matrix(TrnX)
  D<-matrix(0, nrow=g, ncol=nx)
  for (i in 1:g)
      D[i,]<- mahalanobis(TstX, mu[i,], diag(CovX[i,]))
  for (j in 1:nx){
    dmin<-Inf
    for (i in 1:g)
      if (D[i,j]<dmin){
        dmin<-D[i,j]; blong[j,1]<-i; blong[j,2]<-dmin
    }
  }
  blong
}

[此贴子已经被作者于2008-4-28 7:59:09编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:判别分析 distinguish Distance stance 协方差矩阵 求助 老师 程序 帮忙 判别分析

回帖推荐

eveningbmu 发表于3楼  查看完整内容

薛老师程序里,当var.equal = FALSE 时是用 mahalanobis(TstX, mu, var(TrnX[TrnG==i,])) 来计算马氏距离的而楼主最初给的是CovX=NULL,在后面程序里没有重新算CovX,然后就求diag(CovX)了。我认为二者不同在这里

沙发
bwpnew 发表于 2008-4-28 22:50:00
直接发EMAIL给他们问不就解决了

藤椅
eveningbmu 发表于 2008-4-29 10:07:00

薛老师程序里,当var.equal = FALSE 时是用 mahalanobis(TstX, mu[i,], var(TrnX[TrnG==i,])) 来计算马氏距离的

而楼主最初给的是CovX=NULL,在后面程序里没有重新算CovX,然后就求diag(CovX[i,])了。我认为二者不同在这里

板凳
fanshiqing 发表于 2008-4-30 00:33:00

我给薛老师发邮件了,可能因为他们比较忙吧一直没有回我,所以才来麻烦大家的。

    在薛老师的程序中,TrnX为训练样本,各个类别的中心位置mu和方差协方差矩阵都是由TrnX算出的。但在我的判别分类中,各个类别的中心位置mu和方差协方差矩阵我会给出的,分别对应着TrnX和CovX(只给了对角线元素,非对角线元素为0)。

    在TrnX和CovX中,有m条记录,代表了事先分好的m个类别;TrnG为一个分类变量,从1一直到m;这三个文件中的记录的顺序是一致的,最后判别TstX中的n条记录到哪个类别的马氏距离最短。

我改来改去问题还是不少,所以请大家帮帮忙啊,谢谢了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 12:32