gpt4 book ai didi

python - 拉普拉斯平滑到 Biopython

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:56 27 4
gpt4 key购买 nike

我正在尝试为 Biopython 的朴素贝叶斯代码添加拉普拉斯平滑支持 1对于我的生物信息学项目。

我已经阅读了很多关于朴素贝叶斯算法和拉普拉斯平滑的文档,我想我已经了解了基本的想法,但我无法将其与该代码集成(实际上我看不到我将在哪一部分添加 1 -laplacian 数)。

我对 Python 不熟悉,我是一个编码新手。如果熟悉 Biopython 的人可以给我一些建议,我将不胜感激。

最佳答案

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

def _contents(items, laplace=False):
# count occurrences of values
counts = {}
for item in items:
counts[item] = counts.get(item,0) + 1.0
# normalize
for k in counts:
if laplace:
counts[k] += 1.0
counts[k] /= (len(items)+len(counts))
else:
counts[k] /= len(items)
return counts

然后将194行的调用改成:

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

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

这是使用/不使用平滑的输出比较:

# without
>>> 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}]]

# with
>>> 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() 函数时,它不会看到所有可能的值,因此会返回错误的概率...

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

关于python - 拉普拉斯平滑到 Biopython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011115/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com