朴素贝叶斯
朴素贝叶斯法:对于给定训练集,首先基于特征条件独立假设学习 输入输出的联合分布,然后基于此模型,对给定的x,利用贝叶斯定理求出后验概率最大的输出y。
我理解为假设各项特征相互独立,计算该特征分别在两个类别中出现的概率。待分类样本有多个特征,分别计算这些特征在每个类别出现概率之积,那个乘积大,该样本被分为此类别的概率即为最大
几个重要的公式:
具体方法:
关键代码:
1 def trainNB0(trainMatrix, trainCategory): #首要先将构造出训练数据集,将单词转换成频率相关的数组,此段代码忽略该过程 2 numTrainDocs = len(trainMatrix) 3 numWords = len(trainMatrix[0]) 4 pAbusive = sum(trainCategory) / float(numTrainDocs) 5 p0Num = ones(numWords); #两类词组分别出现的概率向量组 6 p1Num = ones(numWords) # change to ones() 7 p0Denom = 2.0; 8 p1Denom = 2.0 # change to 2.0 9 for i in range(numTrainDocs): #分别计算某单词的先验概率,即分别在两类中出现的概率 10 if trainCategory[i] == 1: 11 p1Num += trainMatrix[i] 12 p1Denom += sum(trainMatrix[i]) 13 else: 14 p0Num += trainMatrix[i] 15 p0Denom += sum(trainMatrix[i]) 16 p1Vect = log(p1Num / p1Denom) # change to log() 17 p0Vect = log(p0Num / p0Denom) # change to log() 18 return p0Vect, p1Vect, pAbusive #返回某单词在两个类别出现的概率
上式概率计算部分关键代码处理完毕。
对于sklearn包,相应的API为GaussianNB,高斯朴素贝叶斯,
MultinomialNB,多项式朴素贝叶斯,
BernoulliNB伯努利朴素贝叶斯方法。同时要学会该包中将单词转换为数字标记的方法,TF-IDF。学会这几个API接口与基本就能使用该方法了