假设我有已知的N个列表。每个列表都有项目,可能会重复(不是一组) 例如:
{A,A,B,C},{A,B,C},{B,B,B,C,C}
我需要一些算法(可能有一些机器学习?),它回答了以下问题:
鉴于新的&未知的部分项目列表,例如{A,B},根据我之前列表中的知识,C将在列表中出现的概率是多少。如果可能的话,我想要一个更细粒度的概率:给定一些部分列表L,C将在列表中出现一次的概率是多少,概率出现两次等等......顺序并不重要。 C在{A,B}中出现两次的概率应该等于它在{B,A}中出现两次
任何可以做到这一点的算法?
答案 0 :(得分:3)
这只是纯粹的数学,没有实际的“算法”,只是简单地估算数据集中的所有概率(字面计算出现的次数)。特别是您可以通过非常简单的数据结构来实现您的目标。将每个“列表”表示为字母包,因此:
{A,A,B,C} -> {A:2, B:1, C:1}
{A,B} -> {A:1, B:1}
等。并创建某种基本的反向索引,例如,分别为每个字母保留索引,按其计数排序。
现在,当查询到来时,如{A,B} + C
,您所做的就是搜索包含至少1 A和1 B(使用索引)的数据,然后通过计算已恢复的分数来估算概率结果包含C(或恰好一个C)与所有重复结果(这是一个有效的概率估计,假设您的数据是来自某些基础数据生成分布的一堆独立样本)。
或者,如果您的字母表非常小,您实际上可以为所有字母组合预先计算所有值P(C|{A,B})
等。