哪种统计分类算法可以预测输入序列的正确/错误?


15

给定一个输入序列,我需要确定此序列是否具有某些所需的属性。该属性只能为true或false,也就是说,一个序列只能属于两个可能的类。

序列与属性之间的确切关系尚不清楚,但我认为它是非常一致的,应该将其用于统计分类。我可能会在很多情况下对分类器进行训练,尽管这可能会有点嘈杂,但从某种意义上来说,在此训练集中,序列被分配了错误的类别的可能性很小。

训练数据示例:

Sequence 1: (7 5 21 3 3) -> true
Sequence 2: (21 7 5 1) -> true
Sequence 3: (12 21 7 5 11 1) -> false
Sequence 4: (21 5 7 1) -> false
...

粗略地说,属性由序列中的一组值(例如,出现“ 11”表示该属性几乎肯定为假)以及值的顺序(例如,“ 21 7 5 ”会大大增加该属性为真的机会)。

训练后,我应该能够给分类器一个以前看不见的序列,例如(1 21 7 5 3),它应该输出对属性为true的信心。是否存在用于使用这种输入/输出训练分类器的著名算法?

我已经考虑过朴素的贝叶斯分类器(它实际上并不适合于顺序很重要的事实,至少在不严重破坏输入是独立的假设的情况下如此)。我还研究了隐马尔可夫模型方法,该方法似乎不适用,因为只有一个输出可用,而不是每个输入一个输出。我错过了什么?


您是否有办法测量一对序列之间的距离?最小和/或最大序列长度是否已知?
克雷格·赖特

@CraigWright我没有想到合适的距离测量方法。可以假设最大长度为12左右,最小长度为4左右。而且,大约有30个不同的值(它们不是自然的值;只是一小部分可能性)
Roman Starkov 2011年

您提到的多个响应变量是什么?我正在阅读您的问题,因为这是二进制输出,也许您可​​以简单地创建虚拟变量Var1.1,Var1.12,...,Var12.12
B_Miner 2011年

@B_Miner我可能会误解HMM的工作原理,但似乎它的工作方式如下:我将其输入序列(abcde)喂入它,并输出最匹配该隐藏序列,即(a'b'c'd'e' )。我认为虚拟变量不会解决这个问题;我需要对整个序列进行正确/错误分类。
罗曼·斯塔科夫

@romkyns,这不是HMM的工作原理。HMM是一个概率过程。给定序列和HMM M,您可以计算M输出的概率sMM(使用动态编程;正向算法)。同样,给定一组训练序列,您可以找到具有产生这些训练序列的最大可能性的HMM M(使用Baum-Welch算法)。因此,HMM很可能在这里可以尝试。不过,仍有一些细节需要填写。sM
DW

Answers:


10

您可以尝试与朴素的贝叶斯分类器相似的概率方法,但是假设条件较弱。例如,不进行强独立性假设,而是进行马尔可夫假设:

p(xc)=p(x0c)tp(xtxt1,c)

是您的班级标签, x是您的序列。您需要估计两个条件分布,一个用于cx,另一个用于 c = 0c=1c=0

根据贝叶斯定律:

p(c=1x)=p(xc=1)p(c=1)p(xc=1)p(c=1)+p(xc=0)p(c=0).

选择取决于您可以对序列进行哪些其他假设以及可以使用多少数据。p(xtxt1,c)

例如,您可以使用:

p(xtxt1,c)=π(xt,xt1,c)iπ(xi,xt1,c)

有了这样的分布,如果有在序列中发生21个不同的数字,你将不得不估计的参数π X X Ç 加上21 2 = 42的参数p X 0c 加上2个p c 参数。21212=882π(xt,xt,c)212=42p(x0c)2p(c)

如果不满足模型的假设,则可以例如通过最小化平均对数损失来帮助相对于分类性能直接微调参数。

1#D(x,c)Dlogp(cx)

使用梯度下降。


(+1)我喜欢这个。但是,可能需要大量数据才能获得所有可靠估计p(xt|xt1,c)
steffen 2011年

如果您可以对所涉及的分布做出更多假设,那么您可能会得到更少的参数。例如,如果您知道是二项式,并且E [ x tx t 1c ] = x t 1,则只需估计两个参数,每个c值一个。当然,如果您无法做任何假设并且没有足够的数据,那么您将无能为力。没有免费的午餐。p(xtxt1,c)E[xtxt1,c]=xt1c
Lucas

6

我建议您定义一些功能,然后选择一种机器学习算法以应用于这些功能。

特征:基本上,每个特征都应该是可以从特定序列中计算出的东西,并且您认为可能与该序列是否具有该属性有关。根据您的描述,您可以考虑以下功能:

  • “数字袋”。您可以计算每个可能的数字在序列中出现多少次。例如,假设每个序列仅由数字1-30组成。然后,您可以生成30个功能;第个功能会计算在序列中出现的次数。例如,序列生成特征向量(0,0,2,0,1,0,1,0,...,0,1,0,...,0)。ii(7 5 21 3 3)

  • “袋的克。” 图是一对连续的数字。给定一个序列,您可以提取其所有图。然后,您可以计算每个可能的图出现多少次。例如,序列(7 5 21 3 3)有以下为双字母组合:7 55 2121 3,和3 3。假设序列是由数字1-30构成的,则有可能的二元图,因此您获得30 2个特征。给定一个序列,您可以生成此特征向量。302302

  • “三元组的袋子。” 您也可以考虑三字母组合词,它是原始序列中三个连续数字的子序列。您可以执行与上述相同的操作。

如果使用上述特征,则可以从每个序列中提取特征。换句话说,将每个d关联到每个序列d=30+302+303d维特征向量,这是特征的集合。一旦有了这个,就可以丢弃原始序列。例如,您的训练集变成一堆输入/输出对,其中输入是特征向量(与训练集中的某个序列相对应),输出是布尔值(指示该序列是否具有属性) 。

上述想法的另一种变化是使用“ X的集合”而不是“ X的袋子”。例如,您无需计算每个数字出现多少次,而只需生成一个布尔值即可指示数字iii是否至少出现过一次。这可能会或可能不会带来更好的结果。通常,您可以试验使用的一组功能,以确定哪些功能可以提供最佳的结果(例如,也许您丢掉了“ trigrams”;或者您可以提出其他一些想法来尝试) 。

d


我真正实现的第一个尝试是使用朴素贝叶斯分类的“三元组”。结果令人鼓舞,但效果并不理想。我认为这可能与三字母组根本不独立的事实有关:如果我有“ 1 2 3”,那么我也很有可能会有“ 2 3 *”三字母组。也许我应该尝试更多的确切功能。
罗曼·斯塔科夫

使用不同的功能集和不同的学习算法进行更多的实验是一个好主意。另外,根据您的问题描述,您可能想要添加每个数字外观的功能(单词袋,而不仅仅是三字母组):如果仅使用三字母组,则会使机器学习算法的学习变得更加困难“包含11个序列的序列几乎肯定没有该属性”之类的事实。
DW

2

您实际上正在做的是按时间序列进行假设检验。HMM将为您工作,尽管您必须根据具体情况对其进行调整。

老实说,如果您无法对要检测的内容进行某种数学描述,就不会走得太远。也许您可以告诉我们您希望看到什么样的功能?


1
机器学习向我们表明,即使不知道要寻找什么,我们也可以走得很远。
bayerj 2011年

1

给定序列的最大长度为12,则可以使用具有12个输入和一个输出的神经网络,但是您必须在每个序列的末尾填充零或一些惰性值。


1

Have you tried using Bayesian networks? That's the first thing I think of when I need to fuse multiple pieces of data (coming in one at a time) to arrive at the probabilities of a random variable.

Bayesian networks don't rely on the independence assumption that naive Bayes does.

BTW, hidden Markov models are a special case of Bayesian networks.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.