模式匹配算法

时间:2011-09-21 08:00:37

标签: arrays algorithm design-patterns

我正在尝试找到执行以下但未成功的算法: 我有一堆数据如下所示:

Type    geneA    geneB    geneC    ...    geneN
A       1        0        1               1
A       0        0        1               1
B       1        1        1               0
C       0        1        1               0
B       1        1        0               0
etc        

所以不是所有A都完全相同,并非所有B都完全相同,等等,但希望它们有某种模式。数据最好不仅仅是布尔值(因此包含的数字不仅仅是0和1),但是布尔值一开始就没问题。

我想做的是给一个人的基因系列,找出他们是什么类型。 例如,我想输入“011 ... 1”并被告知这个人很可能是A型。

这似乎应该是以前应该做的事情,但我似乎无法找到任何现有的算法来执行此操作(可能模式匹配是错误的关键术语?)。

任何有关从哪里开始寻找此类事物的帮助或做出此类事情的算法都会非常感激。

5 个答案:

答案 0 :(得分:2)

您可以将gene*二进制值合并到向量中:例如 1001...1001...1等,并对其执行k-means clustering

例如,如果您知道先验您有三种类型ABC,则可能会使用执行群集k = 3。

拥有群集后,您可以使用silhouettes来确定输入向量(例如011...1)与三个已建立群集之一的匹配程度。< / p>

答案 1 :(得分:2)

你应该看看weka。它是一种实现大量算法的机器学习工具。它将帮助您对新数据进行分类。

Weka将为您提供机会,通过决策树,贝叶斯网络,规则,神经网络来解决这个问题。等等...

如果你想自己实现它,只需找到适合你情况的那个并实现它。

您想要预测班级规划:

创建一个像这样的文件:

@relation gene

@attribute gene1 {0,1}
@attribute gene2 {0,1}
@attribute gene3 real
...
@attribute class {A, B, C }

@data
1,1,1,A
1,0,0,B
1,0,1,D 
0,0,1,?
..etc

并将其交给weka。您将在一秒钟内获得结果。

希望有所帮助

答案 2 :(得分:1)

如果你不知道如何解决问题,只需使用神经网络:-)我认为它适合这种情况。或者使用一些N维聚类或分类算法。

答案 3 :(得分:1)

这似乎可以解决而不需要太多努力:所有输入都是整数向量。您的模式也是矢量,具有附加类型。要找到给定输入向量的最佳模式匹配,可以计算一个输入向量与所有模式向量之间的距离。因此,对于模式[A:(0,0,1,0)],输入(0,1,1,0)的距离将为| 0-0 | + | 0-1 | + | 1-1 | + | 0-0 | = 1.最佳匹配是距离最短的模式。这也适用于任意整数组件。

答案 4 :(得分:1)

使用聚类方法有一种简单的方法。

群集的质心是群集中所有向量的平均向量值。

收集A类(群集A)的所有实例并计算它的质心 收集B类(B组)的所有实例并计算它的质心 与其他类型类似,收集它们并计算它们的质心。

然后采用未知类型X并计算每个聚类质心的距离(欧几里德距离)。 最小距离是最可能的类型。

以下是2维的示例。

群集A有两种带矢量的类型 [1,1]和[3,3]。群集A的质心是[2,2]

群集B有两种类型,带有向量[10,10]和 [12,8]。群集B的质心是[11,9]

这是一个带矢量[2,4]的随机类型X.在这个例子中,距离X的距离比集群B更接近于集群A.