我有几个发行版(下图中的10个发行版)。
实际上,这些是直方图:在x轴上有70个值,它们是溶液中某些粒子的大小,对于x的每个值,y的对应值是大小在x值附近的粒子所占的比例。
我想对这些分布进行聚类。目前,例如,我使用具有欧几里得距离的层次聚类。我对距离的选择不满意。我已经尝试过诸如Kullback-Leibler之类的信息理论距离,但是数据中有很多零,这会造成困难。您是否有适当距离和/或其他聚类方法的建议?
我有几个发行版(下图中的10个发行版)。
实际上,这些是直方图:在x轴上有70个值,它们是溶液中某些粒子的大小,对于x的每个值,y的对应值是大小在x值附近的粒子所占的比例。
我想对这些分布进行聚类。目前,例如,我使用具有欧几里得距离的层次聚类。我对距离的选择不满意。我已经尝试过诸如Kullback-Leibler之类的信息理论距离,但是数据中有很多零,这会造成困难。您是否有适当距离和/或其他聚类方法的建议?
Answers:
我了解您,所有分布都可能采用相同的70个离散值。然后,它会很容易为您比较累积分布的曲线(累计比较曲线是比较分布的一般方式)。这将是针对形状,位置和传播差异的综合比较。
因此,以(A,B,...等是分布)的形式准备数据
Value CumProp_A CumProp_B ...
1 .01 .05
2 .12 .14
... ... ...
70 1.00 1.00
并计算分布之间的距离矩阵。提交到层次结构集群(我建议使用完整的链接方法)。什么距离 好吧,如果您认为两条累积曲线(如果仅相差一个值(b))相差很大,请使用Chebyshev距离。如果您认为两条累积曲线只有在一个较大的值范围(c)稳定在另一曲线上时才非常不同,请使用自相关距离。如果曲线之间的任何局部差异很重要(a),请使用曼哈顿距离。
PS自相关距离只是累积曲线X和Y之间差异的自相关的非归一化系数:
如果您的数据是直方图,则可能需要研究适当的距离函数,例如“直方图相交距离”。
有一个叫做ELKI的工具,它具有各种各样的聚类算法(比k均值和层次聚类更现代),甚至还包括一个直方图相交距离的版本,您可以在大多数算法中使用。您可能想尝试其中的一些算法。从上面您给出的情节中,我不清楚您想做什么。将各个直方图分组,对吗?从上面显示的10个来看,可能没有群集。
您可能需要使用某些特征提取技术来导出k均值或其他类型聚类的描述符。
一种基本方法是将某种分布适合您的直方图,并将其参数用作描述符。例如,您似乎具有双峰分布,可以用2个均值和2个标准差来描述。
另一种可能性是对直方图计数的前两个或三个主成分进行聚类。
备选地,可以使用小波方法。
本页说明了处理细胞外尖峰时的处理方法。数据是不同的,但是这个想法应该适用于您的情况。您还将在底部找到许多参考。
http://www.scholarpedia.org/article/Spike_sorting
在R中,您可以使用princomp
或prcomp
函数来计算峰的主成分。在这里,您将找到有关R中PCA的教程。
对于小波,您可以查看wavelets
包装。
使用该kmeans
功能可以实现k-均值聚类。