1. 朴素贝叶斯算法的前提: 特征独立(有的时候说朴素指的就是“特征独立”)
- 朴素贝叶斯中的“朴素”二字突出了这个算法的简易性。朴素贝叶斯的简易性表现该算法基于一个很朴素的假设:所有的变量都是相互独立的,假设各特征之间相互独立,各特征属性是条件独立的。
2. 联合概率
- P(A,B) = P(A)P(B)
3. 条件概率
- P(A|B) = P(AB) / P(B)
- 特性:
- P(A1,A2|B) = P(A1|B)P(A2|B)
- 注意: 此条件概率的成立,是由于A1,A2相互独立
4. 文档分类
-
公式
- p(科技|词1, 词2, 词3,…) 文档1: 词1, 词2, 词3,…
- p(娱乐|词a, 词b,…) 文档2:词a,词b,…
-
朴素贝叶斯公式
- P(C|W) = P(W|C)p© / P(W) 注: W为给定文档的特征值(频数统计, 预测文档提供), C为文档的类别, 也可以理解为:
- P(C|F1,F2,…) = P(F1,F2,…|C) p© / P(F1,F2,…), 其中,C可以是不同的类别。
- 公式解释:
- P©:每个文档类别的概率(某文档类别数/ 总文档数量)
- P(W|C):给定类别下特征(被预测文档中出现的次数)的概率
- 计算方法: P(F1|C) = Ni / N (训练集文档中计算), Ni为该F1词在C类别所有文档中出现的次数, N为所属类别C下的文档所有词出现的次数和
- P(F1,F2,…) : 预测文档中每个词的概率
- 公式解释:
-
样例
- 训练集统计结果(指定统计词频)
特征\统计 科技30 娱乐60 汇总90(求和) “商场” 9 51 60 “影院” 8 56 64 “支付宝” 20 15 35 “云计算” 63 0 63 汇总(求和) 100 121 221
- 现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的类别概率?
- P(科技|影院,支付宝,云计算) = p(影院,支付宝,云计算|科技)P(科技) / P(影院,支付宝,云计算)
- P(娱乐|影院,支付宝,云计算) = p(影院,支付宝,云计算|娱乐)P(娱乐) / P(影院,支付宝,云计算)
- P(科技|影院,支付宝,云计算) = 8/100 * 20/100 * 63/100 * 30/90 = 0.00456
- P(娱乐|影院,支付宝,云计算) = 56/121 * 15/121 * 0/121 * 60/90 = 0
-
思考:求出娱乐的类别等于0,不合理
-
拉普拉斯平滑系数
P(F1|C) = (Ni + a) / (N + am), a指定的系数一般为1, m为训练文档中统计出的特征词
个数
5. 朴素贝叶斯优缺点的分类
-
优点
- 朴素贝叶斯模型发源于古典数学理论, 有稳定的分类效率
- 对缺失数据并不太敏感, 算法也比较简单,常用于文本分类
- 分类准确度高, 速度快
-
缺点
- 假设了文章中一些词语和另外一些是独立没关系的,不太靠谱
- 训练集当中去进行统计词这些工作, 有可能会对结果造成干扰
- 神经网络比朴素贝叶斯的的效果要好
-
代码实现
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
news = fetch_20newsgroups(data_home='/home/hadoop/fanjh/',subset='all')
# 对数据进行分割
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
# 对数据集进行特征抽取
tf = TfidfVectorizer()
# 以训练集当中的词的列表进行每篇文章重要性统计 ['one','two','three']
x_train = tf.fit_transform(x_train)
x_test = tf.transform(x_test)
# 进行朴素贝叶斯算法的预测
mlt = MultinomialNB(alpha=1.0)
mlt.fit(x_train, y_train)
y_predict = mlt.predict(x_test)
print("预测的文章类别为:", y_predict)
print('准确率: ', mlt.score(x_test, y_test))