4.2 分类效果的评价
分类模型建立好后,要评价模型在测试集上预测结果的好坏,使用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)上的性能不如其他数字
注参数说明
- precision:精确率(查准率),表示的是预测为正的样本中有多少是真正的正样本
- recall:召回率(查全率),表示的是样本中的正例有多少被预测正确了
- f1-score:综合评价指标,表示的是精确率和召回率的调和平均
- 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 分类效果的评价相关推荐
- 混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价
图 | 源网络文 | 5号程序员 分类模型建立好后,这个模型到底符不符合要求要怎么评判呢? 事实上是有评价标准的. 要评价模型在测试集上预测结果的好坏,可以使用Sklearn库中的metrics模块方 ...
- python + sklearn ︱分类效果评估——acc、recall、F1、ROC、回归、距离
之前提到过聚类之后,聚类质量的评价: 聚类︱python实现 六大 分群质量评估指标(兰德系数.互信息.轮廓系数) R语言相关分类效果评估: R语言︱分类器的性能表现评价(混淆矩阵,准确率,召回率,F ...
- 分类模型-评估指标(2):ROC曲线、 AUC值(ROC曲线下的面积)【只能用于二分类模型的评价】【不受类别数量不平衡的影响;不受阈值取值的影响】【AUC的计算方式:统计所有正负样本对中的正序对】
评价二值分类器的指标很多,比如precision.recall.F1 score.P-R曲线等.但这些指标或多或少只能反映模型在某一方面的性能.相比而言,ROC曲线则有很多优点,经常作为评估二值分类器 ...
- 机器学习---回归模型和分类模型的评价指标体系
回归模型评价体系 SSE(误差平方和): R-square(决定系数) Adjusted R-square: 分类模型评价体系 一 ROC曲线和AUC值 二 KS曲线 三 GINI系数 四 Lift ...
- 分类模型的评价及比较
当我们得到数据模型后,该如何评价模型的优劣呢?之前看到过这样一句话 :"尽管这些模型都是错误的,但是有的模型是有用的",想想这句话也是挺有道理的!评价和比较分类模型时,关注的是其泛 ...
- R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型、并评估模型在测试集和训练集上的分类效果(accuray、F1、偏差Deviance):Bagging算法与随机森林对比
R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型.并评估模型在测试集和训练集上的分类效果(accuray.F1.偏差Deviance):Bagging算法与随机森林对比 ...
- ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现
ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...
- CNN结构:StyleAI-图片风格分类效果已成(-FasterRCNN-FCN-MaskRCNN)
一.StyleAI CNN结构:图片风格分类效果已成.可以在色彩空间对图片风格进行分类,并进行目标分类. StyleAI构架:FasterRCnn + RandomTrees,使用opencv的随机森 ...
- python butter带通滤波器滤波出来的信号有NAN值或者分类效果极差
在使用scipy.signal.butter带通滤波器对信号滤波后,信号值全变为NAN,或者就算信号没有变为NAN,送入分类器的分类效果也极差 解决方法: 带通滤波器的阶数设置得太高了,需要设低一些
- GB 15981消毒与灭菌效果的评价方法与标准
GB 15981 Evaluating method and standard for the efficacy of disinfection and steril ization GB 15981 ...
最新文章
- 吴恩达神经网络和深度学习——第三周笔记
- 删除有序vector中的重复值c++
- 滚动条加载功能实现(懒加载)
- leetcode 927. Three Equal Parts | 927. 三等分(Java)
- 基于3D模型的MaskRCNN的训练数据生成
- 基于Jedis的工具类
- wfm扩展_WFM的完整形式是什么?
- 1.5 编程基础之循环控制 29 数字反转
- 技术人员,该如何向业务和产品“砍需求”?
- 使用 Inno Setup 快速打包你的应用程序
- 如何通过cmd网站服务器地址,如何用cmd进入服务器地址
- es-03-DSL的简单使用
- HDU2010 水仙花数【进制】
- 【九度OJ1522】|【剑指offer21】包含min函数的栈
- windows资源管理器管理工具Qttabbar个人使用总结
- win10右键没有新建选项,无法新建文件夹
- matplotlib之hist
- 微信小程序流量主每天广告收入多少
- 我的自学全栈路(从0元自学到转行IT)
- 如何批量重命名文件夹,自定义修改文件夹的名称