使用python找到类似的热图数据

时间:2017-05-11 20:04:31

标签: python image-processing machine-learning computer-vision k-means

我有以下热图的示例图像(我有数百张图片......现在,它会在以后增长):

heatmap1

heatmap2

heatmap3

heatmap4

使用我的人眼,我说热图1,3和4彼此相似,或者3和4彼此最相似,我不确定。

我希望能够根据模式和强度将彼此最相似的热图数字分组到不同的组中。

例如,每个热图包含24行和5列(行表示时间,列表示要素)。每列中的每种颜色代表0到1之间的数字。热图3和4的第1列中的图案和强度与其他热图相比更为相似。但是,我想比较每个热图的整体模式和强度,而不是查看每一列。

我以为我会使用kmeans聚类,但无法找到任何可以帮助我实现我想要的信息。根据我的理解,我的搜索最终会出现层次聚类,这对我没有帮助。

然后,我找到了一些有关图像散列的信息。阅读一下,看起来它可以帮助我解决我的问题。

在我开始阅读和进一步学习之前,我有几个问题/困惑,我想解决这个问题,这样我可以进一步投入时间学习和阅读更好的方法来解决这个问题

我的问题/困惑:

  1. 解决此问题的最佳方法是什么? kmeans或图像 哈希?
  2. 甚至可以使用kmeans做到这一点吗?
  3. 欢迎任何其他方法。

2 个答案:

答案 0 :(得分:0)

您可以将此问题视为数据点的聚类问题,每个数据点都是24 x 5 = 120维度(或要素)。确保以相同的方式展平每个数据点(row1row2row3 ... concatenated或col1col2col3 ...连接,只选择一个并保持一致)。您可以为每个数据点采用这120个特征,并使用K-means或任何一种层次聚类族方法或任何其他聚类方法对其进行聚类(例如,散列也可以是一种类型的聚类,其中相似性由散列函数确定) 。

对于相似性度量,您可以尝试欧几里德距离或余弦相似度作为度量(或任何其他例如对称KL发散等)。余弦相似度+ K-means变为球面K均值,并且非常适用于文档聚类(其中doc中的每个单词都被视为一个特征)。

为了选择簇的数量(即K-means中的K或层次聚类中的树形图的高度),您可以使用肘方法https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set#The_elbow_method

希望有所帮助。

答案 1 :(得分:0)

在对任何数据执行群集之前,您应该清楚自己的相似性指标是什么。换句话说,是什么让两张热图相似?此外,你应该问问自己是什么让热图非常不同。您可能还想向自己说明群集对您的案例意味着什么。回答完这些问题后,您可以选择适当的指标和聚类方法。 (人们通常不会经历这个过程,要么是因为他们不知道足够的聚类方法,要么是因为他们很懒惰。或者有时他们只是不想做出任何关于什么类型的假设的假设。他们得到的结果。然后他们做的是尝试一些在他们的编程语言中有实现的聚类方法,希望这些方法能满足他们的需求)

以下是您在选择群集方法之前可能想要问自己的一些问题的列表:

  • 如果热图A是热图B的旋转,你会称它们相似吗?
  • 如果热图A是热图B的反映,你会称它们相似吗?
  • 如果热图A是热图B的移位版本(翻译),你会称它们相似吗?
  • 如果热图A是热图B的负数,你会称它们相似吗?
  • 两个像素值差为0.01的像素与两个像素差异相似,值差为0.9?
  • 如果热图A与热图B相同,除了一个非常不同的像素外,你会称它们相似吗?或者不一样?
  • 如果热图A的像素值恰好是热图B的像素值的一半,你会称它们相似吗?
  • 如果热图A与热图B非常相似,而热图B与热图C非常相似,那么A和C是否相似?
  • 如果存在第三个与两者相似的热图,群集是否包含两个彼此不太相似的热图?
  • 热图可以属于多个群集吗?

回答这些问题可以帮助您,例如,回答以下问题:

  • 我应该使用模糊或硬聚类吗?
  • 我所有热图空间指标的公式是什么?
  • 我的聚类方法是否依赖于三角不等式?
  • 我的聚类方法是否允许扩展连续聚类(在特征空间中查看),其中每个成员仅与其邻居相似,或者所有聚类是否需要彼此相似?

(选择一种聚类方法也取决于它的复杂性,它在大量数据上的性能,它是否可以并行,是否可以给你层次聚类,是否它的结果是否允许新热图的简单分类,以及更多)