Алгоритм кластеризации Газа-Гева от pplust
Мне нужно найти матрицу вероятностей и вектор, который определяет максимальную вероятность для метода Газа-Гева. Во-первых, я создал функцию с тремя наборами точек многомерным нормальным распределением:
Task1<-function()
{
sigma1<-matrix(c(1,1,1,2),ncol=2)
sigma2<-matrix(c(1,-1,-1,2),ncol=2)
sigma3<-matrix(c(2,0.5,0.5,0.3),ncol=2)
simulation1 <- rmvnorm(n = 10, mean = c(1,1), sigma = sigma1)
simulation2 <- rmvnorm(n = 10, mean = c(1,-9), sigma = sigma2)
simulation3 <- rmvnorm(n = 10, mean = c(-7,-2), sigma = sigma3)
X<-rbind(simulation1,simulation2,simulation3)
return(X)
}
Во-вторых, я создал функции для поиска матрицы и вектора вероятностей, определяющих максимальную вероятность для метода кластеризации Густаффсона-Кесселя и нечеткой c-кластеризации:
Task2_3<- function(matrixM,P,clusters_count=3,epsilon=0.0000001)
{
#P<-t(replicate(nrow(matrixM),rand.sum(clusters_count)))
print(P)
res.fcm <- fcm(matrixM, centers = clusters_count,memberships = P,con.val = epsilon)
print(res.fcm$u)
return (res.fcm$cluster)
}
Task4<- function(matrixM,P,clusters_count=3,epsilon=0.0000001)
{
#P<-t(replicate(nrow(matrixM),rand.sum(clusters_count)))
print(P)
res.gk <- gk(matrixM, centers = clusters_count,memberships = P,con.val = epsilon)
print(res.gk$u)
return (res.gk$cluster)
}
Затем у меня есть реализация функций:
matrixX<-Task1()
matrixFunc<-matrixX
colnames(matrixX)<-c("x","y")
matrixX<-data.frame(matrixX)
matrixX$group <- rep(c("1","2","3"), each = 10)
matrixX %>%
ggplot(aes(x, y, group = group, color = group)) +
geom_point() + xlab("First") + ylab("Second")
clusters_count<-4
P<-t(replicate(nrow(matrixFunc),rand.sum(clusters_count)))
matrix_CM<-Task2_3(matrixFunc,P,clusters_count)
print(matrix_CM)
matrix_GK<-Task4(matrixFunc,P,clusters_count)
print(matrix_GK)
Я проделал то же самое для метода Газа-Гева:
Task5<- function(matrixM,P,clusters_count=3,epsilon=0.00000001)
{
#P<-t(replicate(nrow(matrixM),rand.sum(clusters_count)))
print(P)
res.gg <- 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_GG<-Task5(matrixFunc,P,clusters_count,2)
print(matrix_GG)
С matrix_CM и matrix_GK вроде все хорошо, но для matrix_GG я получаю ошибку:
Error in if (obj.func < best.func) { :
missing value where TRUE/FALSE needed}
Как я могу это исправить?