朴素贝叶斯算法文本分类应用

本文介绍了朴素贝叶斯算法的核心思想——利用训练样本中的类别分布和特征分布进行后验概率计算,以此进行文本分类。然而,算法存在局限性,如对训练样本比例敏感,以及假设词间独立,忽略了词的关联性,适用于简单的分类任务,如垃圾邮件识别。
摘要由CSDN通过智能技术生成

朴素贝叶斯的中心思想,在于利用各类别在训练样本中的分布以及类别中各特征元素的分布,计算后验概率,使用极大似然法判断测试样本所属。出于该原理,使用该算法实现文本分类的局限性较多,例如训练集中各类样本的比例不能相差过大,比例较大的样本类别会获得更高的划分可能性;其次,该算法假设词与词之间相互独立,共享权重,忽视了词与词之间的关联性,面临共指消解 (同一实体不同表述) 的问题,因此只能用于诸如垃圾邮件识别的简单分类。

以下代码来自郑捷所著《NLP汉语自然语言处理,原理与实践》

import numpy as np
class NaiveBayes(object):
    '''
    算法原理:
    	- 训练
        	i.借用TF-IDF中TF的概念生成词频矩阵TF
        	ii.计算各个分类的边缘概率P(yi)
        	iii.计算各个分类的后验词频分布P(x|yi)
        - 预测
        	i.计算测试词频TF
        	ii.对每个分类计算TF*P(x|yi)*P(yi),以最大项作为预测类别
    '''
    def __init__(self):
        self.train = []    #训练集
        self.label = []    #训练集标签
        self.vocab = []    #词集
        self.tf = None    #TF矩阵(row:训练集数量 col:词集词频)
        self.idf = None    #IDF向量(词集长度)
        self.prob = {
   }    #P(yi)
        self.con_prob = None    #P(x|yi) (row:类别 col:词集词频)
    def fit(self,train,label):
        '''导入训练集,生成算法参数'''
        assert isinstance(train,list)
        assert isinstance(label,list)
        assert len(train) == len(label)
        self.train += train
        self.label += label
        vocab = set()
        [vocab.add(word) for text in train for word in text];    #将词语导入词集<
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值