Алгоритм кластеризации Gath-Geva от pplust

#r #matrix #cluster-analysis #probability

Вопрос:

Мне нужно найти матрицу вероятностей и вектор, которые определяют максимальную вероятность для метода Газа-Гева. Во-первых, я создал функцию с тремя наборами точек путем многомерного нормального распределения:

 Task1lt;-function() {  sigma1lt;-matrix(c(1,1,1,2),ncol=2)  sigma2lt;-matrix(c(1,-1,-1,2),ncol=2)  sigma3lt;-matrix(c(2,0.5,0.5,0.3),ncol=2)    simulation1 lt;- rmvnorm(n = 10, mean = c(1,1), sigma = sigma1)  simulation2 lt;- rmvnorm(n = 10, mean = c(1,-9), sigma = sigma2)  simulation3 lt;- rmvnorm(n = 10, mean = c(-7,-2), sigma = sigma3)  Xlt;-rbind(simulation1,simulation2,simulation3)     return(X) }  

Во-вторых, я создал функции для нахождения матрицы вероятностей и вектора, которые определяют максимальную вероятность для метода кластеризации Густафсона-Кесселя и нечеткой c-кластеризации:

 Task2_3lt;- function(matrixM,P,clusters_count=3,epsilon=0.0000001) {  #Plt;-t(replicate(nrow(matrixM),rand.sum(clusters_count)))  print(P)  res.fcm lt;- fcm(matrixM, centers = clusters_count,memberships = P,con.val = epsilon)  print(res.fcm$u)  return (res.fcm$cluster)   }  Task4lt;- function(matrixM,P,clusters_count=3,epsilon=0.0000001) {  #Plt;-t(replicate(nrow(matrixM),rand.sum(clusters_count)))  print(P)  res.gk lt;- gk(matrixM, centers = clusters_count,memberships = P,con.val = epsilon)  print(res.gk$u)  return (res.gk$cluster)   }  

Тогда у меня есть реализация функций:

 matrixXlt;-Task1() matrixFunclt;-matrixX colnames(matrixX)lt;-c("x","y")  matrixXlt;-data.frame(matrixX) matrixX$group lt;- rep(c("1","2","3"), each = 10)  matrixX %gt;%   ggplot(aes(x, y, group = group, color = group))     geom_point()   xlab("First")   ylab("Second") clusters_countlt;-4   Plt;-t(replicate(nrow(matrixFunc),rand.sum(clusters_count))) matrix_CMlt;-Task2_3(matrixFunc,P,clusters_count) print(matrix_CM)  matrix_GKlt;-Task4(matrixFunc,P,clusters_count) print(matrix_GK)  

Я сделал то же самое для метода Газа-Гева:

 Task5lt;- function(matrixM,P,clusters_count=3,epsilon=0.00000001) {  #Plt;-t(replicate(nrow(matrixM),rand.sum(clusters_count)))  print(P)  res.gg lt;- gg(matrixM, centers = clusters_count,memberships = P,con.val = epsilon,  fixcent=FALSE, fixmemb=TRUE, stand=TRUE,numseed = 1)  print(res.gg$cluster)  return (res.gg$cluster)   }  matrix_GGlt;-Task5(matrixFunc,P,clusters_count,2) print(matrix_GG)  

С matrix_CM и matrix_GK, кажется, все хорошо, но для matrix_GG я получаю ошибку:

 Error in if (obj.func lt; best.func) { :   missing value where TRUE/FALSE needed}  

Ошибка

Как я могу это исправить?