从数据列表中预测最可能项目的算法

假设我有N个已知的列表。每个列表包含可能重复的项目(不是集合),例如:

{A,A,B,C}, {A,B,C}, {B,B,B,C,C}

我需要一种算法(可能是机器学习算法?)来回答以下问题:

给定一个新的、未知的部分项目列表,例如{A,B},根据之前的列表所知,C出现在列表中的概率是多少。如果可能,我希望得到更细粒度的概率:给定某个部分列表L,C在列表中出现一次的概率是多少,出现两次的概率是多少,等等。顺序无关紧要。C在{A,B}中出现两次的概率应该等于它在{B,A}中出现两次的概率。

有什么算法可以做到这一点吗?


回答:

这只是纯粹的数学问题,没有实际的“算法”,只需从你的数据集中估计所有概率(直接统计出现次数)。特别是,你可以使用非常简单的数据结构来实现你的目标。将每个“列表”表示为字母袋,因此:

{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})等值。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注