贝叶斯分类器就是求P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C) / P(F1F2...Fn) 最大值,由于 P(F1F2...Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求 P(F1F2...Fn|C)P(C) 的最大值。
朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此P(F1F2...Fn|C)P(C)= P(F1|C)P(F2|C) ... P(Fn|C)P(C)
朴素贝叶斯算法进行分类,是根据朴素贝叶斯公式分别计算测试数据为类别0,类别1,类别2...的概率,假如计算得出类别i概率高,就可以说测试数据属于类别i的概率最大,把测试数据归到类别i,达到分类的目的。
封装在类里,方便以后使用。
import numpy
class Bayes:
def __init__(self):
self.length=-1 #用来判断是否训练过
self.labelcount=dict() #字典类型{label:频数...}
self.vectorcount=dict() #字典类型{label:vector...}
#训练数据
#dataset是二维列表,格式[[],[]...],每一行是属于某一个label,labels是一维列表
def fit(self,dataset:list,labels:list):
if(len(dataset)!=len(labels)):
raise ValueError("输入数组与类别数组长度不同")
#训练数据特征值长度