#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}
Как я могу это исправить?