应该使用啥相似性度量来对这些序列进行分类?

Posted

技术标签:

【中文标题】应该使用啥相似性度量来对这些序列进行分类?【英文标题】:What similarity metric should be used to classify these sequences?应该使用什么相似性度量来对这些序列进行分类? 【发布时间】:2015-04-09 06:46:57 【问题描述】:

我有 48 个浮点数的 96 个序列。有三个不同的分组(大小未知)。最初,我不知道哪个序列属于哪个组。我的目标是创建一个算法来找到这个。最好以图形方式显示(见下文 - 以灰度表示的浮点数的大小):

我的目标是从左侧未排序的图像转到右侧的图像。

我的想法是对序列进行某种形式的分析,并对最接近的匹配进行分组。分析可能是:

A.查找波峰和波谷的位置 乙。某种形式 频域/其他域分析

我可以想象如何做选项 A。但是我对选项 B 很粗略,并且确信我不知道有几种方法。

我的问题很高级:

    谁能推荐我可以用来执行此操作的一类算法?

    谁能推荐一个开发这种算法的程序或起点(欢迎书籍章节推荐)?

我也会对书籍章节等的建议感到满意。我通常使用 Numpy/Scipy - 因此使用标签,但这个问题并不是特定于语言的。

【问题讨论】:

我不明白是什么定义了序列之间的距离(相似性度量?)。不过,这似乎属于“分类”类问题。 @RafałDowgird - 这是重新表述问题的好方法,“什么相似性度量可以用来对这些序列进行分类?”看起来峰和谷在 3 组中的排列方式不同 - 所以这些位置可能是相似度度量。但我觉得可能有更好的方法(因此提出了问题)。 【参考方案1】:

看起来波峰和波谷完全对齐,只是深度不同。我会尝试:

对序列进行线性归一化,使它们的平均值和方差都对齐,即 [1,0,1,0] 和 [5,-5,5,-5] 均归一化为 [1,-1 ,1,-1]。

然后计算序列上的差平方和,并将其作为距离。

显然,这只是一个起点。这可能无法开箱即用,因此请查看错误分类以检查导致错误的原因以及如何解决此问题。

【讨论】:

【参考方案2】:

只是一个想法(没时间写完整的答案):

    似乎一个组内的成员主要在一定程度上有所不同,所以首先按照 Rafal 的建议进行某种“标准化”。

    归一化后,组内的所有成员将是在 N 维空间中大致指向同一方向的向量。然后,您可以使用 clustering algorithm 将它们分组,例如使用 kmeans 函数。

【讨论】:

以上是关于应该使用啥相似性度量来对这些序列进行分类?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习算法篇之KNN图像识别分类器构建

机器学习中的相似性度量总结

K-近邻算法(K-NN)

向量的相似性度量

时间序列数据挖掘综述

论文解析时间序列数据挖掘综述