朴素贝叶斯分类

    技术2022-07-10  106

    概率基础

    联合概率 事件A,B同时发生的概率,称为事件A,B的联合概率事件独立性 事件A,B满足 则事件A,B相互独立。A,B相互独立与A,B互不相容是两个概念A,B相互独立,条件概率满足 条件概率及乘法公式 事件A发生条件下事假B发生的概率,称为事件B的条件概率 若A1,A2相互独立,则 乘法公式 样本空间的划分 设S为试验E的样本空间,B1,B2,…,Bn为E的一组事件,若 称B1,B2,…,Bn为样本空间S的一个划分。全概率公式 试验E的样本空间为S,A为E的事件,B1,B2,…,Bn为S的一个划分,则事件A的全概率公式为: 贝叶斯公式 试验E的样本空间为S,A为E的事件,B1,B2,…,Bn为S的一个划分,称 为贝叶斯公式。

    朴素贝叶斯文本分类

    假设前提 特征词之间相互独立

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

    实例

    特征词科技娱乐汇总商场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的情况。 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
    Processed: 0.010, SQL: 9