将拉普拉斯平滑添加到Biopython

我在进行生物信息学项目时,尝试在Biopython的朴素贝叶斯代码1中添加拉普拉斯平滑支持。

我阅读了许多关于朴素贝叶斯算法和拉普拉斯平滑的文档,我认为我已经掌握了基本概念,但就是无法将这些概念与代码整合(实际上我不知道在哪里添加1-拉普拉斯数)。

我不熟悉Python,而且是一个编程新手。如果有熟悉Biopython的人能给我一些建议,我将不胜感激。


回答:

尝试使用以下_contents()方法的定义:

def _contents(items, laplace=False):    # 统计值的出现次数    counts = {}    for item in items:        counts[item] = counts.get(item,0) + 1.0    # 归一化    for k in counts:        if laplace:            counts[k] += 1.0            counts[k] /= (len(items)+len(counts))        else:            counts[k] /= len(items)    return counts

然后将第194行的调用改为:

# 估计P(value|class,dim)nb.p_conditional[i][j] = _contents(values, True)

使用True启用平滑,使用False禁用平滑。

以下是启用和禁用平滑后的输出对比:

# 未启用>>> carmodel.p_conditional[[{'Red': 0.40000000000000002, 'Yellow': 0.59999999999999998},  {'SUV': 0.59999999999999998, 'Sports': 0.40000000000000002},  {'Domestic': 0.59999999999999998, 'Imported': 0.40000000000000002}], [{'Red': 0.59999999999999998, 'Yellow': 0.40000000000000002},  {'SUV': 0.20000000000000001, 'Sports': 0.80000000000000004},  {'Domestic': 0.40000000000000002, 'Imported': 0.59999999999999998}]]# 已启用>>> carmodel.p_conditional[[{'Red': 0.42857142857142855, 'Yellow': 0.5714285714285714},  {'SUV': 0.5714285714285714, 'Sports': 0.42857142857142855},  {'Domestic': 0.5714285714285714, 'Imported': 0.42857142857142855}], [{'Red': 0.5714285714285714, 'Yellow': 0.42857142857142855},  {'SUV': 0.2857142857142857, 'Sports': 0.7142857142857143},  {'Domestic': 0.42857142857142855, 'Imported': 0.5714285714285714}]]

除了上述内容,我认为代码中可能存在一个错误:

代码根据类别分割实例,然后对于每个类别和每个维度,统计每个维度值出现的次数。

问题在于,如果某个类别的一个子集中,并非所有维度的值都出现在该子集中,那么当调用_contents()函数时,它将不会看到所有可能的值,从而返回错误的概率…

我认为你需要跟踪每个维度的所有唯一值(来自整个数据集),并在计数过程中考虑这些值。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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