为R中的簇和Groundtruth创建纯度函数

时间:2018-10-11 06:54:55

标签: r

我必须为分配创建自己的纯度函数,并且已得到值对其进行测试,但是我应该得到的预期纯度不是我得到的纯度。我应该计算数据中异常值的纯度和百分比。这是我自定义的纯度函数。我在哪里错了?:

purityFunction = function(cluster, groundtruth, outliers = FALSE){
clusterlevel = levels(cluster)
clusterclass = table(cluster, groundtruth)
n = nrow(clusterclass)
population = 0
for(i in 1:n){
 clustersize = sum(clusterclass[i,])
 population = population + clustersize
}
percentage = 0
if(clusterlevel[1] == "0"){
 outliers = sum(clusterclass[1,])
 percentage = outliers / population
 population = population - outliers
}

purity = sum(apply(clusterclass, 2, max))/length(cluster)
return(c(purity, percentage))
}

如果离群值等于false,则我不应该费心返回百分比,但是如果将其设置为true,则需要返回一个百分比。

是否有优化此功能的方法?我对这些值进行了测试:

  • a =(0,1,1,1,1,2,2,3)
  • b =(A,A,A,E,E,D,D,C)

我应该得到:

纯度函数(a,b)= 0.714

但我得到:0.875

此函数无法计算百分比,因为它在以下行中存在问题:if (clusterlevel[1] == "0") 它返回此错误:

  

if(clusterlevel [1] ==“ 0”){时的错误:长度为零

我该如何解决该错误?

0 个答案:

没有答案