机器学习实战(代码部分)-- 朴素贝叶斯之文本分类(Ⅱ 从词向量计算概率)

4-2 朴素贝叶斯分类器训练函数

输入参数:
    文档矩阵trainMatrix
    每篇文档构成的向量trainCategory

返回值:
    两个向量和一个概率

算法思路:
    (1)计算出训练文档的数目numTrainDocs(文档矩阵的行数),每篇文档的词条数numWords(文档矩阵一行的数据个数)。
    (2)计算侮辱性数据的比例。思想:侮辱性中类别数据为1,非侮辱性为0。通过数据中所有值的和除以数据的数目即可得到侮辱性数据的比例(用浮点型计算)。
    (3)初始化概率:构造两个和词条数长度相同的零矩阵,分别计算文档属于侮辱性/非侮辱性文档的概率。思想:若数据属于侮辱性文档,则将这组文档矩阵加到属于侮辱性文档的初始化矩阵中,然后计算每个数据属于侮辱性文档的概率值。

代码:

# 训练模型:计算各特征在不同的类别下的条件概率
def trainNB0(trainMatrix, trainCategory):
    numTrainDocs = len(trainMatrix)  # 计算训练的文档数目
    numWords = len(trainMatrix[0])  # 计算每篇文档的词条数
    pAbusive = sum(trainCategory) / float(numTrainDocs)  # 文档属于侮辱类的概率
    p0Num = np.zeros(numWords)
    p1Num = np.zeros(numWords)  # 创建numpy.zeros数组,词条出现数初始化为0
    p0Denom = 0.0
    p1Denom = 0.0  # 分母初始化为0
    for i in range(numTrainDocs):
        if trainCategory[i] == 1:  # 统计属于侮辱类的条件概率所需的数据,即P(w0|1),P(w1|1),P(w2|1)···
            p1Num += trainMatrix[i]
            p1Denom += sum(trainMatrix[i])
        else:  # 统计属于非侮辱类的条件概率所需的数据,即P(w0|0),P(w1|0),P(w2|0)···
            p0Num += trainMatrix[i]
            p0Denom += sum(trainMatrix[i])
    p1Vect = p1Num / p1Denom  # 如[1, 3, 4, 2, 0] / 2 = [0.5, 1.5, 2.0, 1.0, 0.0]
    p0Vect = p0Num / p0Denom
    return p0Vect, p1Vect, pAbusive  # 返回属于侮辱类的条件概率数组,属于非侮辱类的条件概率数组,文档属于侮辱类的概率

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值