聚类分布

机器算法验证 分布 聚类 直方图
2022-03-29 13:33:22

我有几个分布(下图中的 10 个分布)。分布

事实上,这些是直方图:x 轴上有 70 个值,它们是溶液中某些粒子的大小,对于每个 x 值,y 的相应值是大小在 x 值附近的粒子的比例。

我想对这些分布进行聚类。目前,我使用例如欧几里得距离的层次聚类。我对距离的选择不满意。我尝试过诸如 Kullback-Leibler 之类的信息论距离,但数据中有很多零,这会造成困难。您是否有适当距离和/或其他聚类方法的建议?

3个回答

我了解您,所有分布都可能采用相同的 70 个离散值。然后,您将很容易比较分布的累积曲线(比较累积曲线是比较分布的一般方法)。这将是对形状、位置和传播差异的综合比较。

因此,以(A,B,...等是分布)的形式准备数据

Value CumProp_A CumProp_B ...
1       .01       .05
2       .12       .14
...     ...       ...
70      1.00      1.00

并计算分布之间的距离矩阵。提交到层次聚类(我推荐完整的链接方法)。什么距离?好吧,如果您认为两条累积曲线在一个值 ( b )处相距很远时非常不同,请使用切比雪夫距离。如果您认为两条累积曲线只有在一条沿大范围的值 ( c )稳定高于另一条时才会有很大不同,请使用自相关距离。如果曲线之间的任何局部差异很重要(a),请使用曼哈顿距离。

在此处输入图像描述

PS 自相关距离只是累积曲线 X 和 Y 之间差异的非归一化自相关系数:

i=2N(XY)i(XY)i1

如果您的数据是直方图,您可能需要查看适当的距离函数,例如“直方图相交距离”。

有一个名为 ELKI 的工具具有多种聚类算法(比 k-means 和层次聚类更现代的算法),它甚至还包含直方图相交距离的一个版本,您可以在大多数算法中使用它。您可能想尝试其中的一些可用算法。从你上面给出的情节来看,我不清楚你想做什么。对各个直方图进行分组,对吗?从上面显示的 10 个来看,可能没有集群。

您可能希望使用一些特征提取技术来导出 k-means 或其他类型聚类的描述符。

一种基本方法是将某个分布拟合到直方图并将其参数用作描述符。例如,您似乎有双峰分布,可以用 2 个均值和 2 个标准差来描述。

另一种可能性是对直方图计数的前两个或三个主成分进行聚类。

或者,可以使用小波方法。

本页解释了在处理细胞外尖峰时如何做到这一点。数据不同,但这个想法应该适用于你的情况。您还会在底部找到许多参考资料。

http://www.scholarpedia.org/article/Spike_sorting

在 R 中,您可以使用princomporprcomp函数计算峰的主成分。在这里,您将找到有关 R 中 PCA 的教程。

对于小波,您可以查看wavelets包。

kmeans使用该函数可以实现k-means聚类。