全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3423 3
2008-04-28
     我对薛老师《统计建模与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编辑过]

二维码

扫码加我 拉你入群

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

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

全部回复
2008-4-28 22:50:00
直接发EMAIL给他们问不就解决了
二维码

扫码加我 拉你入群

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

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

2008-4-29 10:07:00

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

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

二维码

扫码加我 拉你入群

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

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

2008-4-30 00:33:00

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

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

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

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

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群