一、贝叶斯公式(不赘述)
二、何为朴素?
- 假设:特征与特征之间相互独立
三、应用场景
- 文本分类,单词作为特征
四、拉普拉斯平滑系数
五、API
- sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
- 朴素贝叶斯分类
- alpha:拉普拉斯平滑系数
六、案例
- 获取数据
- 划分数据集
- 特征工程—文本特征抽取
- 朴素贝叶斯预估器流程
- 模型评估
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
def nb_news():
'''
用朴素贝叶斯算法对新闻进行分类
:return:
'''
# 1、获取数据
news = fetch_20newsgroups(subset='all')
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(news.data,news.target)
# 训练集的特征值x_train 测试集的特征值 x_test 训练集的目标值y_train 测试集的目标值y_test
# 3、特征工程:文本特征抽取-tfidf
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test) #对数据预处理时,测试集要以训练集的统计特征进行标准化
# 4、朴素贝叶斯算法预估器流程
estimator = MultinomialNB()
estimator.fit(x_train,y_train)
# 5、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print('y_predict:\n',y_predict)
print('直接比对真实值和预测值:\n',y_test==y_predict)
#方法2:计算准确率
score = estimator.score(x_test,y_test)
print('准确率为:\n',score)
return None
if __name__=='__main__':
nb_news()
运行结果:
y_predict:
[7 14 17 ..., 8 7 0]
直接比对真实值和预测值:
[True True True ..., True True False]
准确率为:
0.841256366723
七、朴素贝叶斯算法总结
- 优点:
- 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
- 分类准确度高,速度快。
- 缺点:
- 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好。