机器学习之朴素贝叶斯

召回率、准确率与F度量

参考文档

分类模型评估API

sklearn.metrics.classification_report(y_true, y_pred, target_names=None)

  • y_true:真实目标值
  • y_pred:估计器预测目标值
  • target_names:目标类别名称
  • return:每个类别精确率与召回率

朴素贝叶斯

平常我们对一篇文章进行分类,分类就是确确实实的一个结果,但是朴素贝叶斯是用到了概率的思想。如一篇文章属于科技的概率是85%,属于娱乐的概率是15%,那么我们最终判定这篇文章属于科技类型

联合概率和条件概率

朴素贝叶斯分类

朴素体现在各个词都是完全独立不相干的

为了应对概率可能是0的情况,引入了拉普拉斯平滑

API

sklearn.naive_bayes.MultinomialNB(alpha = 1.0) alpha:拉普拉斯平滑系数

案例

sklearn20类新闻分类;20个新闻组数据集包含20个主题的18000个新闻组帖子

from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import classification_report

cv = CountVectorizer()
news = fetch_20newsgroups(subset='all')
# data 是列表套字符串的形式
data = news.data
# target 是一个一维的ndarray
target = news.target

# x_train 是列表套字符串的形式, y_train 是一维的ndarray
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.25)

# 特征工程, x_train是 sparse 矩阵, fit_transform 的参数是字符串或者包含字符串的可迭代对象
x_train = cv.fit_transform(x_train)
x_test = cv.transform(x_test)

# 预测,fit predict score 等方法参数都是矩阵
mnb = MultinomialNB()
mnb.fit(x_train, y_train)
y_predict = mnb.predict(x_test)
print('准确率是', mnb.score(x_test, y_test))
print('*' * 40)
print(classification_report(y_test, y_predict, target_names=news.target_names))

结果

准确率是 0.858870967742
****************************************
                          precision    recall  f1-score   support

             alt.atheism       0.89      0.89      0.89       225
           comp.graphics       0.61      0.86      0.71       211
 comp.os.ms-windows.misc       0.98      0.21      0.34       233
comp.sys.ibm.pc.hardware       0.70      0.83      0.76       259
   comp.sys.mac.hardware       0.89      0.92      0.90       232
          comp.windows.x       0.78      0.89      0.83       243
            misc.forsale       0.94      0.76      0.84       232
               rec.autos       0.86      0.94      0.90       226
         rec.motorcycles       0.99      0.92      0.95       265
      rec.sport.baseball       0.96      0.96      0.96       256
        rec.sport.hockey       0.97      0.97      0.97       261
               sci.crypt       0.84      0.96      0.89       224
         sci.electronics       0.88      0.85      0.87       244
                 sci.med       0.93      0.89      0.91       256
               sci.space       0.90      0.93      0.92       259
  soc.religion.christian       0.82      0.98      0.90       264
      talk.politics.guns       0.87      0.95      0.91       225
   talk.politics.mideast       0.86      0.98      0.92       225
      talk.politics.misc       0.82      0.84      0.83       212
      talk.religion.misc       0.96      0.49      0.65       160

             avg / total       0.87      0.86      0.85      4712

朴素贝叶斯特点

  • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
  • 分类准确度高,速度快
posted @ 2018-07-03 16:02  龙云飞谷  阅读(207)  评论(0编辑  收藏  举报