2024-05-15 23:05:53 发布
网友
我正在尝试为我的生物信息学项目添加对Biopython的朴素Bayes代码1的拉普拉斯平滑支持。在
我读过很多关于naivebayes算法和Laplacian平滑的文档,我想我已经有了基本的想法,但是我不能将它与代码集成(实际上,我不知道我将在哪一部分添加1-Laplacian数)。在
我不熟悉Python和一个新手。我很感谢熟悉Biopython的人能给我一些建议。在
请尝试使用_contents()方法的以下定义:
_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的调用改为:
Line 194
使用True启用平滑,使用False禁用它。在
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()函数时,它将看不到所有可能的值,因此将返回错误的概率。。。在
我认为您需要跟踪每个维度(来自整个数据集)的所有唯一值,并在计数过程中考虑到这一点。在
请尝试使用
_contents()
方法的以下定义:然后将对
^{pr2}$Line 194
的调用改为:使用
True
启用平滑,使用False
禁用它。在以下是使用/不使用平滑的输出比较:
除了上面提到的,我认为代码可能有一个bug:
代码根据类拆分实例,然后对于每个类,并给定每个维度,计算每个维度值出现的次数。在
问题是,如果对于属于一个类的实例的子集,某个维度的所有值都出现在该子集中,那么当调用
_contents()
函数时,它将看不到所有可能的值,因此将返回错误的概率。。。在我认为您需要跟踪每个维度(来自整个数据集)的所有唯一值,并在计数过程中考虑到这一点。在
相关问题 更多 >
编程相关推荐