zoukankan      html  css  js  c++  java
  • 机器学习之朴素贝叶斯

    召回率、准确率与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
    

    朴素贝叶斯特点

    • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    • 分类准确度高,速度快
  • 相关阅读:
    【每天一道PAT】1001 A+B Format
    C++ STL总结
    开篇
    happen-before原则
    java多线程的状态转换以及基本操作
    集合初始容量
    fail-fast机制
    Stack
    Iterator
    Vector
  • 原文地址:https://www.cnblogs.com/longyunfeigu/p/9258239.html
Copyright © 2011-2022 走看看