你越以为简单的东西,实现起来就不一样了。。。真的是烦。。。
朴素贝叶斯的假设异常严格,要求条件概率相互之间独立(实际怎么可能啊┗|`O′|┛
即p(x1,x2,x3...,xn|y)=p(x1|y)*p(x2|y)*...*p(xn|y)
有了这个假设我们便可以计算出各个类别下的条件概率,再藉由贝叶斯公式推算出p(y|x1,x2,x3,...,xn)的条件概率
至于各个类的条件概率以及类的概率一般藉由样本均值及方差来估计
为啥这么求(直觉就该这么算啊)
通过极大似然估计展开并联合正态分布的假设,可以算出参数的估计
OK,开始码代码
import numpy as np
class NaiveBayesClassifier(object):
def __init__(self):
self.x = self.y = []
self.feat_dics = self.label_dic = self.dic_label = self.pri = None
self.con = []
def pre(self, x, y):
xt = map(list, zip(*x))
features = [set(feat) for feat in xt]
self.feat_dics = [{_l: i for i, _l in enumerate(feats)}
for i, feats in enumerate(features)]