概率基础
概率的定义为一件事情发生的可能性
联合概率和条件概率
联合概率:包含多个条件,且所有条件同时成立的概率
记作:P(A,B); P(A,B) = P(A)P(B)
条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
记作:P(A|B)
特性:P(A1,A2|B) = P(A1|B)P(A2|B) 注意:此条件概率的成立,是由于A1,A2相互独立的结果
朴素贝叶斯
贝叶斯公式:
注:W为给定文档的特征值(频数统计,预测文档提供),C为文档类别
P(C):每个文档类别的概率(某文档类别数 / 总文档数量)
P(W|C):给定类别下特征(被预测文档中出现的词)的概率
公式可以理解为:,其中C可以是不同类别
P(F1|C) = Ni / N
Ni为该词在C类别所有文档中出现的次数
N为所属类别C下的文档所有词出现的次数和
P(F1,F2,.....)预测文档中每个词的概率
拉普拉斯平滑系数:
α为指定的系数,一般为1;m为训练文档中统计出的特征词个数
sklearn朴素贝叶斯API:sklearn.naive_bayes.MultinomialNB
朴素贝叶斯分类的优缺点
优点:朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率;对缺失数据不太敏感,算法也比较简单,常用于文本分类;分类准确度高,速度快
缺点:由于使用了样本属性独立性的假设,所以如果样本属性有关联时,其效果不好
精确率(Precision)和召回率(Recall)
精确率:预测结果为正例样本中真实为正例的比例(查的准)
召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
sklearn分类模型评估API:sklearn.metrics.classification_report
示例代码,
# -*- coding: utf-8 -*-
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
from sklearn.metrics import classification_report
def naviebayes():
"""
朴素贝叶斯
:return: None
"""
# 获取数据,并进行分割
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()
x_train = tf.fit_transform(x_train)
x_test = tf.transform(x_test)
# print(x_train.toarray(), x_test.toarray())
# estimator 进行预测
mlb = MultinomialNB(alpha=1.0)
mlb.fit(x_train, y_train)
y_predict = mlb.predict(x_test)
print("预测测试集的文章类别:", y_predict)
print("准确率:", mlb.score(x_test, y_test))
tt = classification_report(y_test, y_predict, target_names=news.target_names)
print("精确率和召回率:", tt)
if __name__ == '__main__':
naviebayes()