我必须为分配创建自己的纯度函数,并且已得到值对其进行测试,但是我应该得到的预期纯度不是我得到的纯度。我应该计算数据中异常值的纯度和百分比。这是我自定义的纯度函数。我在哪里错了?:
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,b)= 0.714
但我得到:0.875
此函数无法计算百分比,因为它在以下行中存在问题:if (clusterlevel[1] == "0")
它返回此错误:
if(clusterlevel [1] ==“ 0”){时的错误:长度为零
我该如何解决该错误?