zoukankan      html  css  js  c++  java
  • 【笔记】关于多分类问题中的混淆矩阵,精准率

    关于多分类问题中的混淆矩阵,精准率

    具体操作

    (在notebook中)

    使用手写识别数据集,使用全部的样本数据,不做限制,对数据进行分割,使用逻辑回归算法,求解出准确度

      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn import datasets
    
      digits = datasets.load_digits()
      X = digits.data
      y = digits.target
    
      from sklearn.model_selection import train_test_split
      X_train,X_test,y_train,y_test =  train_test_split(X,y,test_size=0.8,random_state=666)
    
      from sklearn.linear_model import LogisticRegression
    
      log_reg = LogisticRegression()
      log_reg.fit(X_train,y_train)
      log_reg.score(X_test,y_test)
    

    结果如下

    进行预测

      y_predict = log_reg.predict(X_test)
    

    计算精准率,需要将average设置为micro

      from sklearn.metrics import precision_score
    
      precision_score(y_test,y_predict,average="micro")
    

    结果如下

    计算混淆矩阵(不用修改,其本身就可以计算多分类)

      from sklearn.metrics import confusion_matrix
    
      confusion_matrix(y_test,y_predict)
    

    结果如下(10*10的矩阵)

    绘制图像,使用matshow来绘制一个矩阵,传入参数为矩阵以及颜色的映射(设置为plt的灰度值)

      cfm = confusion_matrix(y_test,y_predict)
      plt.matshow(cfm,cmap=plt.cm.gray)
    

    图像如下(越亮越大,越小越黑)

    对矩阵的处理,设置一个记录行的样本,按照列方向求和,设置一个的矩阵,使矩阵除以这行的数字和,将对角线的数字填充为0,然后输出

      row_sums = np.sum(cfm,axis=1)
      err_matrix = cfm / row_sums
      np.fill_diagonal(err_matrix,0)
      err_matrix
    

    结果如下(部分内容)

    绘制矩阵

      plt.matshow(err_matrix,cmap=plt.cm.gray)
    

    图像如下

    这个结果反应的就是对于多分类问题来説,越亮代表犯错越多,这样就可以看到犯错的情况,然后改进算法,修改域值来微调算法或是别的操作来优化,有可能不是算法的问题,可能是因为样本问题

  • 相关阅读:
    多线程关键字
    Atomic原子类
    FFmpeg滤镜代码级分析
    YUV420数据和字符信息如何利用滤镜方法进行编码?
    FFmpeg音视频编解码实践总结
    Android高手应该精通哪些内容
    CentOs 设置静态IP 方法
    花了5天时间,终于解决了一个bug,心情非常愉快,憋了这么久,不吐不快
    H264视频通过RTMP直播
    程序移植到VS2010,编译成功但是无法启动lib文件
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14325330.html
Copyright © 2011-2022 走看看