【问题标题】:Measure Accuracy in Hierarchical Clustering (Single link) in R在 R 中测量层次聚类(单链接)的准确性
【发布时间】:2020-02-02 22:13:41
【问题描述】:

如何在具有 2 个集群的 R 中测量层次聚类(单链接)的准确性? 这是我的代码:

> dcdata = read.csv("kkk.txt")
> target = dcdata[,3]
> dcdata = dcdata [,1:2]
> d = dist(dcdata)
> hc_single = hclust(d,method="single")
> plot(hc_single)
> clusters =cutree(hc_single, k=2)
> print(clusters)

谢谢!

【问题讨论】:

  • “准确度”是什么意思?对于聚类并没有真正正确的答案。
  • 我有一个项目要完成,这是问题之一,我能找到的关于准确性的唯一一件事是使用混淆矩阵进行分类,这是有道理的,但在聚类中没有什么是我问的原因这里
  • 嘿,我可以看到你做了 k=2,这就像一个二进制分类。你想看看它与目标的一致程度。意思是,在每个集群中,您是否看到目标中两个不同标签的分离?
  • 隔离是什么意思?我怎样才能做到这一点?我仍然是这方面的新手
  • 看下面的例子......基本上你想在每个集群中看到,你有接近 100% 的一种类型的目标

标签: r hierarchical-clustering


【解决方案1】:

准确度不是最准确的术语,但我想您想看看层次聚类是否为您提供了与您的标签一致的集群或组。例如,我使用 iris 数据集,并使用 setosa vs others 作为目标:

data = iris
target = ifelse(data$Species=="setosa","setosa","others")
table(target)
others setosa 
   100     50

data = data[,1:4]
d = dist(data)
hc_single = hclust(d,method="single")
plot(hc_single)

似乎它们是两个主要集群。现在我们尝试看看目标是如何分布的:

library(dendextend)
dend <- as.dendrogram(hc_single)
COLS = c("turquoise","orange")
names(COLS) = unique(target)
dend <- color_labels(dend, col = COLS[target[labels(dend)]])
plot(dend) 

现在就像你做的那样,我们得到了集群,

clusters =cutree(hc_single, k=2)
table(clusters,target)

            target
    clusters others setosa
           1      0     50
           2    100      0

你得到了一个几乎完美的分离。集群 1 中的所有数据点都是 setosa,集群 2 中的所有数据点都不是 setosa。因此,您可以将其视为 100% 准确度,但我会谨慎使用该术语。

你可以这样粗略地计算巧合:

Majority_class = tapply(factor(target),clusters,function(i)names(sort(table(i)))[2])

这会告诉您每个集群,即多数类。从那里我们可以看到这与实际标签有多大的一致性。

mean(Majority_class[clusters] == target)

【讨论】:

  • 感谢您的回答和时间,我现在明白了,实际上设法弄清楚了。我使用了这段代码,它给了我正确的结果:&gt; cm = as.matrix(table(Actual = target, Predicted = clusters)) &gt; accuracy = sum(diag(cm)) / sum(cm) &gt; print(accuracy) 谢谢!
猜你喜欢
  • 2019-07-17
  • 2015-08-12
  • 2020-06-10
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多