我的目的是将训练样本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编辑过]


雷达卡



京公网安备 11010802022788号







