Я хотел бы использовать нечеткую кластеризацию C-средних на большом неконтролируемом наборе данных из 41 переменной и 415 наблюдений. Тем не менее, я застрял при попытке проверить эти кластеры. Когда я строю график со случайным числом кластеров, я могу объяснить в общей сложности 54% дисперсии, что не очень хорошо, и нет действительно хороших кластеров, как это было бы с базой данных iris
, например.
Сначала я запустил fcm
со своими данными весов на 3 кластерах, чтобы увидеть, но если я пытаюсь найти способ поиска оптимального количества кластеров, то я не хочу устанавливать произвольно определенное количество кластеры.
Так что я повернулся к Google и погуглил: "нечеткая кластеризация в R." Эта ссылка здесь была хороша , но мне все еще нужно попробовать кучу разного количества кластеров. Я посмотрел на пакеты advclust
, ppclust
и clvalid
, но не смог найти пошаговое руководство по функциям. Я посмотрел на документацию каждого пакета, но также не мог понять, что делать дальше.
Я прошел через некоторое возможное количество кластеров и проверил каждый с помощью объекта k.crisp
от fanny. Я начал с 100 и опустился до 4. На основании описания объекта в документации,
k.crisp = целое число (≤ k), дающее число четких кластеров; может быть меньше чем
k, где рекомендуется уменьшать memb.exp.
это не похоже на правильный способ, потому что он сравнивает количество четких кластеров с нашими нечеткими кластерами.
Есть ли функция, в которой я могу проверить действительность моих кластеров из 2:10
кластеров? Также стоит ли проверять валидность 1 кластера? Я думаю, что это глупый вопрос, но у меня странное чувство, что я могу получить 1 оптимальный кластер. (Какие-нибудь советы, что делать, если я должен был получить 1 кластер, кроме того, чтобы немного поплакать изнутри?)
Код
library(cluster)
library(factoextra)
library(ppclust)
library(advclust)
library(clValid)
data(iris)
df<-sapply(iris[-5],scale)
res.fanny<-fanny(df,3,metric='SqEuclidean')
res.fanny$k.crisp
# When I try to use euclidean, I get the warning all memberships are very close to 1/l. Maybe increase memb.exp, which I don't fully understand
# From my understanding using the SqEuclidean is equivalent to Fuzzy C-means, use the website below. Ultimately I do want to use C-means, hence I use the SqEuclidean distance
fviz_cluster(Res.fanny,ellipse.type='norm',palette='jco',ggtheme=theme_minimal(),legend='right')
fviz_silhouette(res.fanny,palette='jco',ggtheme=theme_minimal())
# With ppclust
set.seed(123)
res.fcm<-fcm(df,centers=3,nstart=10)
веб-сайт, как указано выше .