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
    

    朴素贝叶斯特点

    • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    • 分类准确度高,速度快
  • 相关阅读:
    vscode编辑器markdow文档导出为pdf
    js 原型
    部分前端知识总结
    js获取本地ip
    angular项目线上地址跳转或刷新报错的解决
    一种js异步处理方式
    初始化git repo到远程
    点击任意位置隐藏键盘
    UIButton设置按钮点击范围大于可视范围
    Unknown class xxx in Interface Builder file. / NSUnknownKeyException
  • 原文地址:https://www.cnblogs.com/longyunfeigu/p/9258239.html
Copyright © 2011-2022 走看看