朴素贝叶斯

朴素贝叶斯法:对于给定训练集,首先基于特征条件独立假设学习 输入输出的联合分布,然后基于此模型,对给定的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接口与基本就能使用该方法了

 

posted @ 2018-06-12 17:34  涨涨涨123  阅读(108)  评论(0编辑  收藏  举报