编程实现拉普拉斯修正的朴素贝叶斯,西瓜3.0训练集,“测1”样本测试。
书上求得的标准差是除以(N-1)即np.std(x, ddof=1)得到的,用与numpy直接用std计算结果存在偏差。
不加拉普拉斯修正跑的数据,部分和书上不一致(P(蜷缩,是)和P(凹陷,是)),经检查是书中错误。
只能通过测试样例,对count为0的数据存在bug,待修改。。。
代码如下:
# coding: utf-8
import math
import numpy as np
file = open('西瓜数据集3.csv'.decode('utf-8'))
filedata = [line.strip('\n').split(',')[1:] for line in file]
idx1 = filedata[0].index('密度')
idx2 = filedata[0].index('含糖率')
for i in range(1, len(filedata)):
filedata[i][idx1] = float(filedata[i][idx1])
filedata[i][idx2] = float(filedata[i][idx2])
filedata = filedata[1:]
def fit(filedata, lapula_correct=True):
diff_class = {i:set() for i in range(len(filedata[0]))}
for raw in filedata:
for j in range(len(raw)):
diff_class[j].add(raw[j])
count =

本文介绍了如何编程实现拉普拉斯修正的朴素贝叶斯分类器,并在西瓜数据集3.0的‘测1’样本上进行测试。注意到书本中标准差计算的差异,以及未使用拉普拉斯修正时与书中部分结果不符的情况,发现可能是书籍错误。同时,指出在处理count为0的数据时存在bug,需要进一步修正。
最低0.47元/天 解锁文章
2004

被折叠的 条评论
为什么被折叠?



