分类模型建立好后,要评价模型在测试集上预测结果的好坏,使用Sklearn库中的metric模块进行计算

表4-1 metrics模块方法的评价方式

评价方式 功能
metrics.accuracy_score 计算模型准确率
metrics.auc 计算ROC曲线下面积AUC,使用梯形原则
metrics.classification_report 建立一个包含主要评价方法结果的报告
metrics.confusion_matrix 计算分类器预测结果的混淆矩阵
metrics.fl_score 计算F-beta得分
metrics.hamming_loss 计算平均汉明损失
metrics.jaccard_similarity_score 计算Jaccard相似系数评分
metrics.precision_recall_curve 针对不同的概率阈值计算精确率和召回率
metrics.roc_auc_score 根据预测百分比计算特征曲线ROC下的面积AUC
metrics.roc_curve 计算ROC的横纵坐标

1.混淆矩阵

metrics.confusion_matrix(真实类别,预测类别)来计算混淆矩阵,将其可视化,使用的分类模型为网络搜索最有参数的K近邻分类模型。可视化使用*sns.heatmap()*绘制热力图


## 加载包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
## 图像在jupyter notebook中显示
%matplotlib inline
## 显示的图片格式(mac中的高清格式),还可以设置为"bmp"等格式
%config InlineBackend.figure_format = "retina"
## 输出图显示中文
from matplotlib.font_manager import FontProperties
fonts = FontProperties(fname = "D:\Desktop\python在机器学习中的应用\方正粗黑宋简体.ttf",size=14)
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
## 忽略提醒
import warnings
warnings.filterwarnings("ignore")
## 读取鸢尾花数据集
Iris = load_iris()
## 参数网格搜索
## 切分数据集
train_x,test_x,train_y,test_y = train_test_split(Iris.data,Iris.target,test_size = 0.25,random_state = 2)
from sklearn.pipeline import Pipeline #定义模型处理流程 两个步骤标准化(scale)和K近邻模型(KNN)
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
## 定义模型流程
pipe_KNN = Pipeline([("scale",StandardScaler()),("KNN",KNeighborsClassifier())])
## 定义需要搜索的参数
n_neighbors = np.arange(1,10)
para_grid = [{"scale__with_mean":[True,False],"KNN__n_neighbors" : n_neighbors}]## 应用到数据上
gs_KNN_ir = GridSearchCV(estimator=pipe_KNN,param_grid=para_grid,cv=10,n_jobs=4)
gs_KNN_ir.fit(train_x,train_y)
## 获取最好的模型
Iris_clf = gs_KNN_ir.best_estimator_
## 用来预测
prey = Iris_clf.predict(test_x)
## 分类模型的结果评估## 1.混淆矩阵
pd.value_counts(test_y)
## 输出混淆矩阵,并且可视化
metrics.confusion_matrix(test_y,prey)
## 混淆矩阵可视化
confm = metrics.confusion_matrix(test_y,prey)
sns.heatmap(confm.T, square=True, annot=True, fmt='d', cbar=False,cmap=plt.cm.gray_r)
plt.xlabel("真实类别",FontProperties = fonts)
plt.ylabel("预测类别",FontProperties = fonts)
print(metrics.classification_report(test_y,prey))

这个混淆矩阵看起来很好,因为大多数都在主对角线上,这意味着它们被正确地分类了。(1,1)看起来比其他数字稍暗,这可能意味着数据集中(1,1)的较少,或者分类器在(1,1)上的性能不如其他数字
参数说明

  1. precision:精确率(查准率),表示的是预测为正的样本中有多少是真正的正样本
  2. recall:召回率(查全率),表示的是样本中的正例有多少被预测正确了
  3. f1-score:综合评价指标,表示的是精确率和召回率的调和平均
  4. support:指相应的类中有多少样例分类正确

2.AUC和ROC曲线

比较分类器的一种方法是测量曲线下的面积(AUC)。完美分类器的ROC AUC等于1,而纯随机分类器的ROC AUC等于0.5。Scikit Learn提供了一个计算ROC AUC的函数:
metrics.rocauc_score()
多分类任务

## 2.AUC ROC曲线
# 引入库
import numpy as np
import matplotlib.pyplot as plt
from itertools import cycle
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier
from scipy import interp
from sklearn.pipeline import Pipeline #定义模型处理流程 两个步骤标准化(scale)和K近邻模型(KNN)
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
# 加载数据
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 将标签二值化
y = label_binarize(y, classes=[0, 1, 2])
# 设置种类
n_classes = y.shape[1]
## 参数网格搜索
## 切分数据集
train_x,test_x,train_y,test_y = train_test_split(X,y,test_size = 0.25,random_state = 2)
## 定义模型流程
pipe_KNN = Pipeline([("scale",StandardScaler()),("KNN",KNeighborsClassifier())])
## 定义需要搜索的参数
n_neighbors = np.arange(1,10)
para_grid = [{"scale__with_mean":[True,False],"KNN__n_neighbors" : n_neighbors}]
## 应用到数据上
gs_KNN_ir = GridSearchCV(estimator=pipe_KNN,param_grid=para_grid,cv=10,n_jobs=4)
gs_KNN_ir.fit(train_x,train_y)
## 获取最好的模型
Iris_clf = gs_KNN_ir.best_estimator_
## 用来预测
prey = Iris_clf.predict(test_x)
# 计算每一类的ROC
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):fpr[i], tpr[i], _ = roc_curve(test_y[:, i], prey[:, i])roc_auc[i] = auc(fpr[i], tpr[i])
fpr["micro"], tpr["micro"], _ = roc_curve(test_y.ravel(), prey.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
# 计算 micro-average ROC曲线和ROC 区域 (方法二) 微观
fpr["micro"], tpr["micro"], _ = roc_curve(test_y.ravel(), prey.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])# 计算 macro-average ROC曲线和ROC 区域 (方法一) 宏观
# 首先汇总所有false positive rates
all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))
# 然后在此点插值所有ROC曲线
mean_tpr = np.zeros_like(all_fpr)
for i in range(n_classes):mean_tpr += interp(all_fpr, fpr[i], tpr[i])
# 最后求平均值并计算AUC
mean_tpr /= n_classes
fpr["macro"] = all_fpr
tpr["macro"] = mean_tpr
roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])#画图AUC
lw=2
plt.figure()
plt.plot(fpr["micro"], tpr["micro"],label='micro-average ROC curve (area = {0:0.2f})'''.format(roc_auc["micro"]),color='deeppink', linestyle=':', linewidth=4)plt.plot(fpr["macro"], tpr["macro"],label='macro-average ROC curve (area = {0:0.2f})'''.format(roc_auc["macro"]),color='navy', linestyle=':', linewidth=4)colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])
for i, color in zip(range(n_classes), colors):plt.plot(fpr[i], tpr[i], color=color, lw=lw,label='ROC curve of class {0} (area = {1:0.2f})'''.format(i, roc_auc[i]))plt.plot([0, 1], [0, 1], 'k--', lw=lw)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Some extension of Receiver operating characteristic to multi-class')
plt.legend(loc="lower right")
plt.show()

4.2 分类效果的评价相关推荐

  1. 混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价

    图 | 源网络文 | 5号程序员 分类模型建立好后,这个模型到底符不符合要求要怎么评判呢? 事实上是有评价标准的. 要评价模型在测试集上预测结果的好坏,可以使用Sklearn库中的metrics模块方 ...

  2. python + sklearn ︱分类效果评估——acc、recall、F1、ROC、回归、距离

    之前提到过聚类之后,聚类质量的评价: 聚类︱python实现 六大 分群质量评估指标(兰德系数.互信息.轮廓系数) R语言相关分类效果评估: R语言︱分类器的性能表现评价(混淆矩阵,准确率,召回率,F ...

  3. 分类模型-评估指标(2):ROC曲线、 AUC值(ROC曲线下的面积)【只能用于二分类模型的评价】【不受类别数量不平衡的影响;不受阈值取值的影响】【AUC的计算方式:统计所有正负样本对中的正序对】

    评价二值分类器的指标很多,比如precision.recall.F1 score.P-R曲线等.但这些指标或多或少只能反映模型在某一方面的性能.相比而言,ROC曲线则有很多优点,经常作为评估二值分类器 ...

  4. 机器学习---回归模型和分类模型的评价指标体系

    回归模型评价体系 SSE(误差平方和): R-square(决定系数) Adjusted R-square: 分类模型评价体系 一 ROC曲线和AUC值 二 KS曲线 三 GINI系数 四 Lift ...

  5. 分类模型的评价及比较

    当我们得到数据模型后,该如何评价模型的优劣呢?之前看到过这样一句话 :"尽管这些模型都是错误的,但是有的模型是有用的",想想这句话也是挺有道理的!评价和比较分类模型时,关注的是其泛 ...

  6. R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型、并评估模型在测试集和训练集上的分类效果(accuray、F1、偏差Deviance):Bagging算法与随机森林对比

    R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型.并评估模型在测试集和训练集上的分类效果(accuray.F1.偏差Deviance):Bagging算法与随机森林对比 ...

  7. ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现

    ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...

  8. CNN结构:StyleAI-图片风格分类效果已成(-FasterRCNN-FCN-MaskRCNN)

    一.StyleAI CNN结构:图片风格分类效果已成.可以在色彩空间对图片风格进行分类,并进行目标分类. StyleAI构架:FasterRCnn + RandomTrees,使用opencv的随机森 ...

  9. python butter带通滤波器滤波出来的信号有NAN值或者分类效果极差

    在使用scipy.signal.butter带通滤波器对信号滤波后,信号值全变为NAN,或者就算信号没有变为NAN,送入分类器的分类效果也极差 解决方法: 带通滤波器的阶数设置得太高了,需要设低一些

  10. GB 15981消毒与灭菌效果的评价方法与标准

    GB 15981 Evaluating method and standard for the efficacy of disinfection and steril ization GB 15981 ...

最新文章

  1. 吴恩达神经网络和深度学习——第三周笔记
  2. 删除有序vector中的重复值c++
  3. 滚动条加载功能实现(懒加载)
  4. leetcode 927. Three Equal Parts | 927. 三等分(Java)
  5. 基于3D模型的MaskRCNN的训练数据生成
  6. 基于Jedis的工具类
  7. wfm扩展_WFM的完整形式是什么?
  8. 1.5 编程基础之循环控制 29 数字反转
  9. 技术人员,该如何向业务和产品“砍需求”?
  10. 使用 Inno Setup 快速打包你的应用程序
  11. 如何通过cmd网站服务器地址,如何用cmd进入服务器地址
  12. es-03-DSL的简单使用
  13. HDU2010 水仙花数【进制】
  14. 【九度OJ1522】|【剑指offer21】包含min函数的栈
  15. windows资源管理器管理工具Qttabbar个人使用总结
  16. win10右键没有新建选项,无法新建文件夹
  17. matplotlib之hist
  18. 微信小程序流量主每天广告收入多少
  19. 我的自学全栈路(从0元自学到转行IT)
  20. 如何批量重命名文件夹,自定义修改文件夹的名称

热门文章

  1. 程序猿麒麟臂打造之路(健身一)
  2. 北大AI公开课 第一讲
  3. 读《创业36条军规》(四)创业是最好的武器
  4. POS收银系统对商家的影响不可小看
  5. uniapp 小程序扫描二维码
  6. 面对爱情,相当真诚的星座,将心比心,单纯善良
  7. 看这玩意复习你还会挂科?《web开发1篇》
  8. 手机共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?教您共享方法...
  9. 对 torch 中 dim 的总结和理解
  10. vbs打开网页并全屏