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
    

    朴素贝叶斯特点

    • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    • 分类准确度高,速度快
  • 相关阅读:
    grep在一个特定的文件搜索文件夹keyword
    Mysql HA
    通过wmi获取本地硬件信息的一些疑问。
    nginx+tomcat 架构 HttpServletRequest.getScheme()获取正确的协议
    mybatis配置log4j控制台打印SQL语句
    mybatis使用${}拼接sql出错??
    【MySQL】JDBC连接MySQL的一些问题以及解决办法
    mybatis 嵌套查询子查询column传多个参数描述
    关于一些对location认识的误区
    Nginx+lua学习
  • 原文地址:https://www.cnblogs.com/longyunfeigu/p/9258239.html
Copyright © 2011-2022 走看看