matlab中CH指标聚类评价指标,[转载]聚类评价指标-purity,precision,recall R

com_accuracy = function(vec1, vec2,method=0,mybeta=0) {

## vec1: the cluster result by experiment

## vec2: the real cluster, stand

cluster

## method=0 purity

## method=1 precision

## method=2 recall

## method=3 F-score with para mybeta

## method=4 RI

if (class(vec1) ==

"communities") {

vec1 = membership(vec1)

}

if (class(vec2) ==

"communities") {

vec2 = membership(vec2)

}

n = length(vec1)

nodes = 1:n

K1=

length(unique(vec1))

K2=

length(unique(vec2))

com1 = c()

com2 = c()

for (i in 1:K1) {

com1[i] = list(nodes[vec1 == i])

}

for (i in 1:K2) {

com2[i] = list(nodes[vec2 == i])

}

# browser()

if(method==0){

## purity

cor_num = 0

may_id = 1:K2

for (i in 1:K1) {

temp = sapply(may_id, function(x) {

return(length(intersect(com1[[i]], com2[[x]])))

})

cor_num=cor_num+max(temp)

# id_del = which.max(temp)

# cor_num = cor_num + max(temp)

# may_id = may_id[-id_del]

}

accuracy =

cor_num/n

}

if(method!=0){

## precision

expe_cluster_mat=matrix(0,n,n);

real_cluster_mat=matrix(0,n,n);

for(i in 1:K1){

nodepair_id=combn(com1[[i]],2);

# print(dim(nodepair_id)[2])

node_id=apply(nodepair_id,2,function(x){

x=sort(x);

x[1]+(x[2]-1)*n

})

expe_cluster_mat[node_id]=1;

# length(which(expe_cluster_mat==1))

}

expe_cluster_mat[lower.tri(expe_cluster_mat)] =2;

# expe_cluster_mat[lower.tri(expe_cluster_mat)] =

t(expe_cluster_mat)[lower.tri(t(expe_cluster_mat))]

for(i in 1:K2){

nodepair_id=combn(com2[[i]],2);

node_id=apply(nodepair_id,2,function(x){

x=sort(x);

x[1]+(x[2]-1)*n

})

real_cluster_mat[node_id]=1;

}

# real_cluster_mat[lower.tri(real_cluster_mat)] =

t(real_cluster_mat)[lower.tri(t(real_cluster_mat))]

real_cluster_mat[lower.tri(real_cluster_mat)] =2;

diag(expe_cluster_mat)=2;

diag(real_cluster_mat)=2;

# browser()

exp_p=which(expe_cluster_mat==1)

rel_p=which(real_cluster_mat==1)

exp_n=which(expe_cluster_mat==0)

rel_n=which(real_cluster_mat==0)

# choose(8,2)+choose(5,2)+choose(4,2)

TP=length(intersect(rel_p,exp_p))

# FP=length(exp_p)-TP;

FP=length(intersect(rel_n,exp_p))

## -n, delete the effect by the diag element, which both be

0

TN=length(intersect(rel_n,exp_n))

FN=length(intersect(rel_p,exp_n))

# FN=length(rel_n)-TN;

P=TP/(TP+FP);

R=TP/(TP+FN);

} ## end if method !=0

if(method==1){

accuracy=P

}else if (method==2){

accuracy=R

}else if(method==3){

accuracy=(mybeta+1)*P*R/(mybeta*P+R)

}else if(method==4){

accuracy=(TP+TN)/(TP+TN+FP+FN)

}

return(accuracy)

}

### test

# vec1=c(rep(1,5),2,3,3,1,rep(2,4),2,rep(3,3))

# vec2=c(rep(1,8),rep(2,5),rep(3,4))

# com_accuracy(vec1,vec2,method=1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值