создать функцию чистоты для кластера и земли в R - PullRequest
0 голосов
/ 11 октября 2018

Я должен сделать свою собственную функцию чистоты для задания, и мне дали значения, чтобы проверить это, но ожидаемая чистота, которую я должен получить, не та, которую я получил.Я должен рассчитать чистоту и процент выбросов в данных.Это моя пользовательская функция чистоты.Где я ошибаюсь?:

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") {: аргумент имеет нулевую длину

Как исправить и эту ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...