r - 如何将实验性聚类算法与预期结果进行比较

标签 r algorithm cluster-analysis data-mining k-means

<分区>

检查聚类算法(在本例中为 K-Means)准确度的最佳方法是什么?我已经知道由更高级的算法实现的真正的组分离。

但是,我面临着一堵墙。我如何确定我的第 1 组与他们的第 2 组相同?如果分离相同,这可以手动完成。但是,由于结果各不相同,“手工”似乎不值得,最好采用 CS 方法/统计数据。

您知道我可以使用哪种算法来解决这个问题吗?

请看一下这两个对象。第一个是时间序列的预期分离,第二个是我对它们进行分组的方式。

检查两者的前 6 个元素,发现预期数据中的组 3 可能与我的组 3 相同。但是,他们的 元素 4和 5,它们在第 4 组和第 2 组中,被插入到第 6 组 my 中。因此,我如何确定我的第 6 组是他们的第 2 组还是第 4 组,这样我就可以计算命中率.

c(3L, 3L, 3L, 4L, 2L, 2L, 5L, 6L, 4L, 4L, 6L, 6L, 6L, 5L, 1L, 
1L, 2L, 2L, 3L, 6L, 5L, 6L, 4L, 5L, 5L, 5L, 2L, 5L, 2L, 2L, 5L, 
5L, 1L, 2L, 1L, 6L, 5L, 4L, 4L, 5L, 2L, 2L, 3L, 2L, 1L, 5L, 6L, 
6L, 2L, 6L, 6L, 4L, 3L, 6L, 4L, 3L, 2L, 3L, 5L, 3L, 5L, 1L, 5L, 
6L, 5L, 2L, 1L, 6L, 3L, 6L, 3L, 3L, 3L, 5L, 5L, 2L, 2L, 4L, 5L, 
4L, 6L, 3L, 2L, 3L, 1L, 4L, 2L, 3L, 4L, 3L, 1L, 3L, 1L, 5L, 3L, 
4L, 5L, 1L, 5L, 5L, 5L, 4L, 3L, 6L, 2L, 6L, 6L, 1L, 5L, 4L, 2L, 
1L, 2L, 5L, 2L, 5L, 6L, 2L, 3L, 6L, 6L, 3L, 4L, 6L, 4L, 3L, 1L, 
6L, 2L, 5L, 6L, 3L, 3L, 1L, 2L, 1L, 1L, 1L, 6L, 2L, 3L, 2L, 1L, 
5L, 3L, 4L, 4L, 2L, 5L, 3L, 4L, 1L, 1L, 5L, 2L, 3L, 6L, 2L, 1L, 
4L, 2L, 3L, 1L, 6L, 5L, 6L, 1L, 6L, 1L, 1L, 4L, 1L, 1L, 2L, 1L, 
4L, 3L, 3L, 3L, 4L, 2L, 4L, 4L, 6L, 3L, 5L, 6L, 5L, 6L, 2L, 4L, 
1L, 1L, 2L, 1L, 2L, 4L, 4L, 1L, 4L, 5L, 6L, 3L, 5L, 5L, 5L, 1L, 
3L, 6L, 3L, 4L, 1L, 6L, 3L, 3L, 3L, 5L, 6L, 6L, 2L, 4L, 3L, 5L, 
6L, 1L, 1L, 1L, 1L, 2L, 5L, 5L, 4L, 2L, 3L, 5L, 1L, 4L, 4L, 3L, 
2L, 4L, 6L, 1L, 3L, 3L, 5L, 3L, 3L, 2L, 1L, 4L, 4L, 1L, 6L, 1L, 
6L, 6L, 6L, 3L, 2L, 5L, 5L, 2L, 2L, 5L, 2L, 4L, 2L, 4L, 4L, 2L, 
5L, 5L, 6L, 4L, 4L, 3L, 3L, 4L, 3L, 2L, 4L, 6L, 2L, 1L, 2L, 3L, 
5L, 6L, 5L, 3L, 1L, 6L, 5L, 1L, 4L, 4L, 4L, 4L, 2L, 3L, 1L, 4L, 
3L, 5L, 4L, 6L, 1L, 5L, 6L, 1L, 1L, 1L, 1L, 6L, 6L, 2L, 1L, 1L, 
5L, 4L, 1L, 3L, 3L, 6L, 2L, 2L, 1L, 6L, 2L, 2L, 3L, 4L, 6L, 1L, 
3L, 4L, 6L, 6L, 3L, 6L, 4L, 1L, 4L, 1L, 3L, 4L, 5L, 2L, 5L, 3L, 
4L, 6L, 6L, 1L, 1L, 1L, 3L, 4L, 5L, 5L, 4L, 2L, 1L, 1L, 2L, 2L, 
2L, 4L, 5L, 5L, 2L, 5L, 2L, 3L, 6L, 4L, 4L, 5L, 6L, 4L, 6L, 4L, 
3L, 5L, 5L, 3L, 2L, 2L, 3L, 6L, 2L, 4L, 5L, 1L, 6L, 2L, 4L, 1L, 
6L)

--

c(3, 3, 3, 6, 6, 6, 2, 6, 6, 6, 6, 6, 6, 2, 1, 1, 6, 6, 3, 6, 
2, 6, 6, 2, 2, 2, 6, 2, 6, 6, 2, 2, 1, 6, 1, 6, 2, 6, 6, 2, 6, 
6, 3, 6, 1, 2, 6, 6, 6, 6, 6, 6, 3, 6, 6, 3, 6, 3, 2, 3, 2, 1, 
2, 6, 2, 6, 1, 6, 3, 6, 3, 3, 3, 2, 2, 6, 6, 6, 2, 6, 6, 3, 6, 
3, 1, 6, 6, 3, 6, 3, 1, 3, 1, 2, 3, 6, 2, 1, 2, 2, 2, 6, 3, 6, 
6, 6, 6, 1, 2, 6, 6, 1, 6, 2, 6, 2, 6, 6, 3, 6, 6, 3, 6, 6, 6, 
3, 1, 6, 6, 2, 6, 3, 3, 1, 6, 1, 1, 1, 6, 6, 3, 6, 1, 2, 3, 6, 
6, 6, 2, 3, 6, 1, 1, 2, 6, 3, 6, 6, 1, 6, 6, 3, 1, 6, 2, 6, 1, 
6, 1, 1, 6, 1, 1, 6, 1, 6, 3, 4, 3, 6, 6, 6, 6, 6, 3, 2, 6, 2, 
6, 6, 6, 1, 1, 6, 1, 6, 6, 6, 1, 6, 2, 6, 3, 2, 2, 2, 1, 3, 6, 
3, 6, 1, 6, 3, 3, 3, 2, 6, 6, 6, 6, 3, 2, 6, 1, 1, 1, 1, 6, 2, 
2, 6, 6, 3, 2, 1, 6, 6, 3, 6, 6, 6, 1, 3, 3, 2, 3, 3, 6, 1, 6, 
6, 1, 6, 1, 6, 6, 6, 3, 6, 5, 2, 6, 6, 2, 6, 6, 6, 6, 6, 6, 2, 
2, 6, 6, 6, 3, 3, 6, 3, 6, 6, 6, 6, 1, 6, 3, 2, 1, 4, 3, 1, 6, 
2, 1, 6, 6, 6, 6, 6, 3, 1, 6, 3, 2, 6, 6, 1, 2, 6, 1, 1, 1, 1, 
6, 6, 6, 1, 1, 2, 6, 1, 3, 3, 6, 6, 6, 1, 6, 6, 6, 3, 6, 6, 1, 
3, 6, 6, 6, 3, 6, 6, 1, 6, 1, 3, 6, 2, 6, 2, 3, 6, 6, 6, 1, 1, 
1, 3, 6, 2, 2, 6, 6, 1, 1, 6, 6, 6, 6, 2, 2, 6, 2, 6, 3, 6, 6, 
6, 2, 6, 6, 6, 6, 3, 2, 2, 3, 6, 6, 3, 6, 6, 6, 2, 1, 6, 6, 6, 
1, 6)

注意:对象由R中的dput函数生成

最佳答案

看看兰特指数:https://en.wikipedia.org/wiki/Rand_index

library(fossil)

> rand.index(x, y)
[1] 0.8304887
> adj.rand.index(x,y)
[1] 0.5589514

(这里 x 是你的第一个矩阵,y 是你的第二个)

Rand Index 计算xy 之间两对聚集在一起或不聚集在一起的次数比例。

示例:

x: 1,2 ... y: 1,3 ...

This case is +1

x: 1,1 ... y: 2,2 ...

This case is also +1

x: 1,1 ... y: 1,2 ...

This case is 0.

然后除以总对数。

调整后的兰德指数减去了偶然获得的比例(所以 adj.rand.index = 0 是随机的)。在这种情况下,您的集群运行良好。

关于r - 如何将实验性聚类算法与预期结果进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191691/

相关文章:

r - 同一图形上不同类型边的不同审美尺度

java - HashMap 中的平均跳数

3d - 计算 3D 平面的 Voronoi 图

python-2.7 - 如何使用 python 或 OpenCV 根据局部特征或全局自动将我的数据集图像聚类到不同的组中?

r - 访问 r 包 `gamm4` 生成的广义加法混合模型 (GAMM) 的 AIC

r - dplyr 使用两列作为自定义函数的参数来改变多列

r - 如何调试/报告 "caught access violation - continue with care"

python - 使用 LSTM 网络和 Keras 进行文本分类

algorithm - 根据 python 中的 %age overlap,使用另一个不同长度和范围的列表有条件地替换一个列表中的值

algorithm - 如何实现 K-Means++ 算法?