拉普拉斯平滑到生物光子晶体

2024-05-15 23:05:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我读过很多关于naivebayes算法和Laplacian平滑的文档,我想我已经有了基本的想法,但是我不能将它与代码集成(实际上,我不知道我将在哪一部分添加1-Laplacian数)。在

我不熟悉Python和一个新手。我很感谢熟悉Biopython的人能给我一些建议。在


Tags: 项目代码文档算法生物建议信息学biopython
1条回答
网友
1楼 · 发布于 2024-05-15 23:05:53

请尝试使用_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

然后将对Line 194的调用改为:

^{pr2}$

使用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}]]

除了上面提到的,我认为代码可能有一个bug:

代码根据类拆分实例,然后对于每个类,并给定每个维度,计算每个维度值出现的次数。在

问题是,如果对于属于一个类的实例的子集,某个维度的所有值都出现在该子集中,那么当调用_contents()函数时,它将看不到所有可能的值,因此将返回错误的概率。。。在

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

相关问题 更多 >