收集数据---》准备数据:数值型/布尔----》分析数据:绘制特征(数据大时,不管用)----》训练算法:不同独立特征的条件概率---》测试算法:计算错误率----》使用:文档分类、语言屏蔽,
特点:数据较少时仍有效,但对数据的准备方式较为敏感 适用于:标称型数据
朴素贝叶斯分类的正式定义:
1、设为特征向量,ai为第i个特征的取值。
2、类别集合。
3、计算。
4、如果,则。
关键是计算第3步中的条件概率。
如果各个特征属性是条件独立的,则根据贝叶斯定理有:
显然我们只要将分子最大化皆可:
故,分类流程可分为3个阶段:
第一阶段——准备工作阶段:主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分(形成特征库),然后由人工对一部分待分类项进行分类,形成训练训练集合(分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定)
第二阶段——分类器训练阶段:其输入是特征属性和训练样本,输出是h(x)
第三阶段——应用阶段输出g(x)
条件概率
特征属性为离散值时,统计训练样本中各个划分在每个类别中出现的频率用来估计P(a|y)
特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布):
只要计算出训练样本中各个类别中此特征项划分的各均值和标准差即可。
当P(a|y)=0?
引入Laplace校准,它的思想非常简单,就是对每类别下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响
伪代码:
1 def nb(库,train_Set): for i in train_Set: if i in 库: Vec[库.index(i)]=1 else: Vec[库.index(i)]=0 return Vec 2计算条件概率: def nbp(Vec,lables): p0=zeros(len(Vec[0])),p1=zeros(len(Vec[0])) if lables[i]==1: p1/0+=Vec[i] p1/0demo=sum(Vec[i]) p1/0p=p1/0/p1/0demo 3 分类 (比较大小)
p1=sum(vec2Classify*p1Vec)+math.log(pClass1)
p0=sum(vec2Classify*p0Vec)+math.log(1.0-pClass1)