哪种统计分类算法可以预测输入序列的真/假?

机器算法验证 机器学习 分类 造型
2022-02-08 10:09:45

给定一个输入序列,我需要确定这个序列是否具有某种所需的属性。该属性只能为真或假,即一个序列只能属于两个可能的类。

序列和属性之间的确切关系尚不清楚,但我相信它非常一致,应该适合统计分类。我有大量的案例来训练分类器,尽管它可能有点嘈杂,因为在这个训练集中,一个序列被分配了错误的类的可能性很小。

训练数据示例:

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),它应该输出它对属性为真的置信度。是否有一种众所周知的算法可以训练具有这种输入/输出的分类器?

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

4个回答

您可以尝试类似于朴素贝叶斯分类器但假设较弱的概率方法。例如,不做强独立性假设,而是做一个马尔可夫假设:

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

c是你的类标签,是你的序列。您需要估计两个条件分布,一个用于,一个用于xc=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 个不同的数字,您将不得不估计参数加上参数加上参数21212=882π(xt,xt,c)212=42p(x0c)2p(c)

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

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

使用梯度下降。

我建议您定义一些特征,然后选择一种机器学习算法来应用这些特征。

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

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

  • “一袋金币。” digram 是一对连续的数字。给定一个序列,您可以提取它的所有图表。然后你可以计算每个可能的图表出现了多少次。例如,该序列(7 5 21 3 3)具有以下作为其二元图:7 55 2121 33 3假设序列由数字 1-30 组成,则有可能的二元图,因此您获得特征。给定一个序列,你可以生成这个特征向量。302302

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

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

上述想法的另一个变体是使用“set of X”而不是“bag of X”。例如,您可以简单地生成一个布尔值来指示数字是否至少出现过一次这可能会也可能不会给出更好的结果。一般来说,您可以尝试使用您使用的一组功能,以确定哪些功能提供最佳结果(例如,也许您放弃“三元组”;或者您可以想出一些其他的想法来尝试) .ii

机器学习算法:我没有资格给你建议如何选择机器学习算法;有很多可能性。但一般来说,您会将学习算法应用于您的训练集(特征/布尔值的输入/输出对),并尝试使用它来预测测试集中的哪些值具有该属性。您对机器学习算法的选择可能取决于几个因素,包括训练集的大小与(特征数量)的比较。您最好的选择可能是尝试几种机器学习算法,看看哪种效果最好。您可能希望将支持向量机 (SVM) 作为您尝试的算法之一。d

您实际上正在做的是对时间序列的假设检验。HMM 会为您工作,但您必须根据您的特定情况调整它们。

老实说,如果你不能写下你试图检测的某种数学描述,你就不会走得太远。也许您可以告诉我们您希望看到什么样的功能?

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