检测二进制序列中的簇

机器算法验证 分类 聚类 数据挖掘 模式识别 二进制数据
2022-03-27 19:44:27

我有一个二进制序列,例如11111011011110101100000000000100101011011111101111100000000000011010100000010000000011101111

大部分为 1 的簇后跟大量的零,如下图所示(黑色代表 1):

在此处输入图像描述

我想应用一种技术(最好在 R 或 Python 中),我可以自动检测这些 1 的簇,并产生跨度(在图像中表示为红线)。我知道可以用一个阈值来做到这一点,即两个集群必须至少被n 0 分开才能成为集群,但我想知道是否还有其他不使用预定义阈值的既定方法。

任何的想法?

3个回答

我会避免称它们为“集群”。使用这个术语,您最终会一直从数据挖掘中分心到多维技术。

您的问题是一个更简单的一维设置。甚至更简单:你甚至没有坐标,而是一个零和一的数组。

永远不会有一种万能的解决方案来解决您的问题因为一个用户可能想要读取非常高分辨率的“条形码”,而另一个用户有很多噪音。

所以最后,你需要有一个参数。您有许多选择:绝对间隙大小、相对间隙大小、内核带宽等。

一个非常简单的“基于内核”的方法是将每个像素映射到 -10...+10 中设置的像素数。所以这是 21 个单元格,值将是 0 到 21。现在寻找一个局部最小值。如果它开始拆分您还不想拆分的运行,请增加窗口大小。

第 49-55 页上的参考 1 有关于基于内核的方法的很好的部分,可能在这里有用。如果我这样做,那么我会查看实际值及其一阶导数的加权和,因为它可能是“信息”的更好指标。

参考: http ://amzn.com/0198538642 Christopher Bishop 的“用于模式识别的神经网络”。(1995 年)

该问题与图像处理有一些相似之处。您有一个高度为一个像素的二值图像,并希望实现某种分割

输入图像的性质建议使用形态滤波器来平滑区域,例如关闭您需要选择结构元素,从而确定集群的“链接”。最后,这与您的方法非常相似。您还可以使用卷积过滤器平滑图像,例如使用模糊或高斯内核,并应用选定的阈值对其进行重新二值化。

如果您可以将每个1点视为一个点,将其在序列中的位置视为一个坐标,并且可以构成一些距离度量,那么您几乎可以使用所有标准的聚类算法。例如,您可以使用层次聚类(选择链接标准和阈值),您可以使用k-means带有高斯混合模型的 EM(选择您要查找的聚类数量)。

但我不认为,您最终可能无需预先定义算法的灵敏度就可以逃脱。