编程实现拉普拉斯修正的朴素贝叶斯,西瓜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 = filedat