朴素贝叶斯分类

概率基础
  1. 联合概率
    事件A,B同时发生的概率,称为事件A,B的联合概率
  2. 事件独立性
  • 事件A,B满足在这里插入图片描述
    则事件A,B相互独立。
  • A,B相互独立与A,B互不相容是两个概念
  • A,B相互独立,条件概率满足
    在这里插入图片描述
  1. 条件概率及乘法公式
  • 事件A发生条件下事假B发生的概率,称为事件B的条件概率
    在这里插入图片描述
  • 若A1,A2相互独立,则
    在这里插入图片描述
  • 乘法公式
    在这里插入图片描述
  1. 样本空间的划分
    设S为试验E的样本空间,B1,B2,…,Bn为E的一组事件,若
    在这里插入图片描述
    称B1,B2,…,Bn为样本空间S的一个划分。
  2. 全概率公式
    试验E的样本空间为S,A为E的事件,B1,B2,…,Bn为S的一个划分,则事件A的全概率公式为:
    在这里插入图片描述
  3. 贝叶斯公式
    试验E的样本空间为S,A为E的事件,B1,B2,…,Bn为S的一个划分,称
    在这里插入图片描述
    为贝叶斯公式。
朴素贝叶斯文本分类
  1. 假设前提
    特征词之间相互独立

  2. 文档分类贝叶斯公式
    在这里插入图片描述
    C:文本类别,W:文本特征(特征是文本中包含的词,可采用重要性度量获取前k个词作为特征,特征的值为词出现的次数)
    P( C ):每个文本类别的概率(某文本类别的词数/总文本词数)
    P(W|C):给定类别条件下文本特征的概率
    每个特征词在给定类别条件下概率的计算方法:
    在这里插入图片描述
    Ni:特征词F1在C类别文档中出现的总次数
    N:C类别文档中所有词出现的总次数

  3. 实例

    特征词科技娱乐汇总
    商场95160
    影院85664
    支付宝201535
    云计算63063
    汇总100121221
  • 预测出现“影院”、“支付宝”、“云计算”三个特征词的文档属于科技、娱乐类的概率
    设F1:影院,F2:支付宝,F3:云计算,则W = F1,F2,F3
    在这里插入图片描述
    基于特征词之间相互独立的假设
    在这里插入图片描述
    由于对于同一文档特征词相同因此P(W)相同,根据上述公式对于求文档类别的概率,P(W)可视为常数,真正影响实际概率大小的为分子,因此在计算概率时可不做除以P(W)的处理。
  • 预测属于科技类的概率:设类别为Cs,则其概率可近似为
    在这里插入图片描述
    在这里插入图片描述
  • 预测属于娱乐类的概率:由于在娱乐类中特征词"云计算"并未出现,根据上述公式可知预测娱乐类的概率为0,这是不符合常理的,我们不能因为某文档未出现某词而判定文档属于某个类别的概率为0,为解决该问题我们引入了拉普拉斯平滑系数。
  • 拉普拉斯平滑系数(解决因某词不在文档中而导致的概率为0问题)
    引入拉普拉斯系数后,每个特征词在给定类别条件下概率的计算方法:
    在这里插入图片描述 α : 拉 普 拉 斯 平 滑 系 数 、 m : 特 征 词 个 数 \alpha:拉普拉斯平滑系数 、 m:特征词个数 α:m:
    由此可避免概率为0的情况。
  1. sklearn模块使用
    """以20类新闻数据集为例"""
    from sklearn.datasets import fetch_20newsgroups
    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.navie_bayes import MultinomialNB
    from sklearn.metrics import classification_report
    def naviebayes():
        """朴素贝叶斯进行文本分类"""
        news = fetch_20newsgroups(subset='all')
        # 进行数据分割
        x_train, x_test, y_train, y_test = train_test_split(\
    								news.data, news.target, test_size=0.25)
        # 对数据集进行特征抽取
        tf = TfidfVectorizer()
        # 以训练集当中的词的列表进行每篇文章重要性统计['a','b','c','d']
        x_train = tf.fit_transform(x_train)
        print(tf.get_feature_names())
        x_test = tf.transform(x_test)
    	# 进行朴素贝叶斯算法的预测
    	mlt = MultinomialNB(alpha=1.0)
    	print(x_train.toarray())
    	mlt.fit(x_train, y_train)
    	y_predict = mlt.predict(x_test)
    	print("预测的文章类别为:", y_predict)
    	# 得出准确率
    	print("准确率为:", mlt.score(x_test, y_test))
    	print("每个类别的精确率和召回率:", classification_report(\
    				y_test, y_predict,target_names=news.target_names))
    	return None
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值