【问题标题】:Clustering a set of countries based on cultural similarity on R基于 R 上的文化相似性对一组国家进行聚类
【发布时间】:2019-06-30 19:44:31
【问题描述】:

我在尝试使用我已经拥有的某种文化相关性对国家/地区进行聚类时遇到了一些问题。

基本上,数据集如下所示:包含 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 个组,甚至更好、更灵活的集群,这样集群的数量和每个集群的国家/地区数量不是事先固定的

这样输出就是例如

  Nation   cluster
  Ita       1
  Fra       2
  Ger       3
  Esp       1
  Eng       3
  ......

【问题讨论】:

  • 引人注目的是,cultural correlation(或者,从标题,similarity)矩阵是不对称的。
  • 你可以接受这个声明吗:similarity = 1 - distance ?

标签: r algorithm machine-learning cluster-analysis hierarchical-clustering


【解决方案1】:
#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 

【讨论】:

  • 看来您将矩阵视为距离矩阵,但 OP 说这是文化相似性
  • FWIW,我通过使用 df1 值的倒数尝试了这个答案的变体,得到了相同的结果。我使用了df2 <- df1 %>% mutate_all(funs(1 - .)),它将0.2 转换为0.8、0.7 转换为0.3 等,然后将该数据框插入prcomp 和其余部分。我目前对 PCA 的理解超出了我对 PCA 是否支持或反驳答案的正确性的理解。 :-(
  • 感谢您的帮助!
【解决方案2】:

分层凝聚聚类 (HAC) 是最古老的聚类方法之一,也可以使用 相似度 而不是距离来实现。

从概念上讲,您总是搜索最大值(例如,ita ger)并将它们合并,直到保留所需的集群数量。

尽管在您的情况下,仅使用 1-sim 作为距离并使用现有实现可能更容易。

【讨论】:

    【解决方案3】:

    您可以考虑使用谱聚类,它是将 k 均值应用于相似图的拉普拉斯算子的主要特征向量。 https://en.wikipedia.org/wiki/Spectral_clustering

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2020-07-12
      • 2018-01-07
      • 2021-01-10
      • 2015-04-18
      • 1970-01-01
      • 2021-11-28
      • 2020-11-28
      • 2016-01-29
      相关资源
      最近更新 更多