我在尝试使用一种已经具有的文化关联性来聚集国家时遇到一些问题。
基本上,数据集如下所示:具有90个国家/地区的91列(90个国家/地区的列+ 1个用于标识行中的国家/地区) 和90行
Nation Ita Fra Ger Esp Eng ...
Ita NA 0.2 0.1 0.6 0.4 ...
Fra 0.2 NA 0.2 0.1 0.3 ...
Ger 0.7 0.1 NA 0.5 0.4
Esp 0.6 0.1 0.5 NA 0.2
Eng 0.4 0.3 0.4 0.2 NA
... .....
...
我正在寻找一种算法,可以将我的国家/地区分组(例如3个或什至更好的更灵活的集群),这样,事前的集群数量和每个集群的国家数量不是固定的< / p>
以使输出为例如
Nation cluster
Ita 1
Fra 2
Ger 3
Esp 1
Eng 3
......
答案 0 :(得分:2)
#DATA
df1 = read.table(strip.white = TRUE, stringsAsFactors = FALSE, header = TRUE, text =
"Nation Ita Fra Ger Esp Eng
Ita NA 0.2 0.1 0.6 0.4
Fra 0.2 NA 0.2 0.1 0.3
Ger 0.7 0.1 NA 0.5 0.4
Esp 0.6 0.1 0.5 NA 0.2
Eng 0.4 0.3 0.4 0.2 NA")
df1 = replace(df1, is.na(df1), 0)
row.names(df1) = df1[,1]
df1 = df1[,-1]
# Run PCA to visualize similarities
pca = prcomp(as.matrix(df1))
pca_m = as.data.frame(pca$x)
plot(pca_m$PC1, pca_m$PC2)
text(x = pca_m$PC1, pca_m$PC2, labels = row.names(df1))
# Run k-means and choose centers based on pca plot
kk = kmeans(x = df1, centers = 3)
kk$cluster
# Ita Fra Ger Esp Eng
# 3 1 2 1 1
答案 1 :(得分:2)
层次聚类聚类(HAC)是最古老的聚类方法之一,也可以使用相似性代替距离来实现。
从概念上讲,您始终会搜索最大值(例如,itager)并将其合并,直到保留所需的簇数为止。
尽管在您的情况下,使用1-sim作为距离并使用现有的实现可能会更容易。
答案 2 :(得分:0)
您可能会考虑使用频谱聚类,这是应用于均值图基础的拉普拉斯算子的主要特征向量的k均值。 https://en.wikipedia.org/wiki/Spectral_clustering