朴素贝叶斯算法
1、概率基础
联合概率:包含多个条件且同时成立的概率
条件概率:事件A再另外一个事件B已经发生的条件下的发生概率。
条件概率的成立,A1A2相互独立
2、朴素贝叶斯算法
特征独立
P(科技|词1、词2、词3…) 文档1:词1
朴素贝叶斯公式:
w----给定文档的特征值(频数统计,预测文档提供)
c-----文档类别
P©:每个文档类别的概率
P(W|C):给定类别下的特征(被预测文档中出现的词)的概率
P(F1,F2,F3…)预测文档中每个词的概率
给了一些词,我们要求某些特征的概率
p(w)是公共部分可以忽略
例子:
用tf-idf统计每篇文档每个词的重要性,重要的词
预测文档:
P(科技|影院、支付宝、云计算)=P(影院、支付宝、云计算|科技)P(科技)
P(娱乐|影院、支付宝、云计算)=P(影院、支付宝、云计算|娱乐)P(娱乐)
最终预测文档为科技类文档
属于某个类别是0合适否?不合适
拉普拉斯平滑:
加入拉普拉斯平滑系数之后:
加了一个常数,和一个频率
比如说这里的阿尔法设置为1,一般是1,m是它的特征词次数,这里是4
朴素贝叶斯API:sklearn.naive_bayes.MultinomialNB
里面一个参数阿尔法就是拉普拉斯平滑系数
朴素贝叶斯文章分类例子:
需求:sklearn20类新闻分类
20个新闻组数据包含20个主题18000个新闻组帖子
案例流程:
1、加载20类新闻数据,进行分割
分成训练集和测试集
x_train,x_test,y_train,y_test =train_test_split(news.data,news.target ,test_size=0.25)
2、生成文章特征词
(1)先对数据集进行特征抽取
# 对数据集进行特征抽取
tf = TfidfVectorizer()
(2)以训练集当中词的列表进行每篇文章重要性统计
x_train = tf.fit_transform(x_train)
x_test = tf.transform(x_test)
3、朴素贝叶斯estimator流程进行预估
(1)输入到贝叶斯模型中
mlt = MultinomialNB(alpha=1.0)
mlt.fit(x_train,y_train)
# 预测
y_predict = mlt.predict(x_test)
(2)评估 预测和真实值
准确度是先对x_test进行预测,然后与y_test进行比较
mlt.score(x_test,y_predict)
不需要调参
朴素贝叶斯的总结:
优点:数学理论,对缺失数据不敏感,算法简单,速度快,分类准确度高。
缺点:样本属性独立性假设,样本有关联效果不好。
应用场景:文本分类