【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

这篇具有很好参考价值的文章主要介绍了【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习目标:

机器学习之分类模型的评估

学习内容:

学习分类模型评估的方法:
1、混淆矩阵
2、分类结果汇总
3、ROC曲线
4、召回率与精度
5、F1分数

基本知识:

一、评估分类器性能的度量
1、真正(true positive, TP)或f++,对应的是被分类模型正确预测的正样本数。
2、假负(false negative, FN)或f±对应的是被分类模型错误预测为负类的正样本数。
3、假正(false positive, FP)或f-+, .对应的是被分类模型错误预测为正类的负样本数。
4、真负(ture negative, TN)或f–, 对应的是被分类模型正确预测的负样本数。
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

实验步骤:

一、混淆矩阵

1、导入鸢尾花数据集

from sklearn.datasets import load_iris
iris = load_iris()

2、二分法拆分数据

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size = 0.3,random_state = 666)

3、构建决策树模型

from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(x_train, y_train)

结果为:

DecisionTreeClassifier()

4、模型预测

dt.predict(x_test)

结果为:

array([1, 2, 1, 2, 0, 1, 1, 2, 1, 1, 1, 0, 0, 0, 2, 1, 0, 2, 2, 2, 1, 0,
       2, 0, 1, 1, 0, 1, 2, 2, 0, 0, 1, 2, 1, 1, 2, 2, 0, 1, 2, 2, 1, 1,
       0])

5、模型评估

from sklearn.metrics import classification_report#导入混淆矩阵对应的库
print(classification_report(y_test,dt.predict(x_test)))

结果为:

                precision    recall  f1-score   support

           0       1.00      1.00      1.00        12
           1       1.00      1.00      1.00        18
           2       1.00      1.00      1.00        15

    accuracy                           1.00        45
   macro avg       1.00      1.00      1.00        45
weighted avg       1.00      1.00      1.00        45

6、输出训练集上的混淆矩阵

#混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_train,dt.predict(x_train))
cm

结果为:

array([[38,  0,  0],
       [ 0, 32,  0],
       [ 0,  0, 35]], dtype=int64)
#自定义类别顺序输出混淆矩阵
confusion_matrix(y_train,dt.predict(x_train),labels = [2,1,0])

结果为:

array([[35,  0,  0],
       [ 0, 32,  0],
       [ 0,  0, 38]], dtype=int64)

7、用热力图展示混淆矩阵

#用热力图展示混淆矩阵
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
sns.heatmap(cm,cmap = sns.color_palette("Blues"),annot = True)

结果如图:
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
**【注意】:**在热力图中需要提前电脑安装matplotlib库,否则无法使用热力图
安装matplotlib库方法:打Anaconda => Anaconda Prompt => 输入 pip install matplotlib
等待安装完成即可。

**

二分类结果汇总

**
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

from sklearn.metrics import classification_report
a = classification_report(y_train,
                          dt.predict(x_train),
                          digits = 3,#小数点后保留的位数
                          labels = [2,1,0],#类别的排序
                          target_names = ['第2类','第1类','第0类'],#类别的名称
                          output_dict = False)#结果是否以字典的形式输出
print(a)

结果为:
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

三、ROC曲线

1、导入所需要的库
数据集如下:
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

from sklearn.metrics import roc_curve
#录入数据
import numpy as np
y_true = np.array([1,1,0,1,1,0,0,0,1,0])
y_score = np.array([0.9,0.8,0.7,0.6,0.55,0.54,0.53,0.51,0.50,0.40])

2、调用roc_curve 求出fpr与tpr

fpr,tpr,thresholds = roc_curve(y_true,y_score)

3、打印结果

print(fpr,tpr,thresholds,sep = '\n')

结果为:

[0.  0.  0.  0.2 0.2 0.8 0.8 1. ]
[0.  0.2 0.4 0.4 0.8 0.8 1.  1. ]
[1.9  0.9  0.8  0.7  0.55 0.51 0.5  0.4 ]

4、修改参数drop_intermediate 值为False

fpr1,tpr1,thresholds1 = roc_curve(y_true,y_score,drop_intermediate = False)

输出结果:

print(fpr1,tpr1,thresholds1,sep = '\n')

结果:

[0.  0.  0.  0.2 0.2 0.2 0.4 0.6 0.8 0.8 1. ]
[0.  0.2 0.4 0.4 0.6 0.8 0.8 0.8 0.8 1.  1. ]
[1.9  0.9  0.8  0.7  0.6  0.55 0.54 0.53 0.51 0.5  0.4 ]

5、绘制ROC曲线

plt.plot(fpr1,tpr1,'r*-')
plt.plot([0,1],[0,1])
plt.plot("FPR")
plt.plot("TPR")
plt.title("ROC Curve")

【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
6、计算ROC曲线下的面积
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

from sklearn.metrics import roc_auc_score
roc_auc_score(y_true,y_score)

结果为:

0.76

四、召回率与精度

模型评估:
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
1、导入所需的库

import numpy as np
from sklearn.metrics import precision_recall_curve

2、录入数据

y_true = np.array([0,0,0,0,0,1,1,1,1,1])
y_scores = np.array([0.1,0.2,0.25,0.4,0.6,0.2,0.45,0.6,0.75,0.8])

3、召回率与精度的计算

precision,recall,thresholds = precision_recall_curve(y_true,y_scores)
len(precision),len(recall),len(thresholds)

结果为:

(8, 8, 7)
thresholds

结果为:

array([0.2 , 0.25, 0.4 , 0.45, 0.6 , 0.75, 0.8 ])

召回率:

precision

结果为:

array([0.55555556, 0.57142857, 0.66666667, 0.8       , 0.75      ,
       1.        , 1.        , 1.        ])

精度:

recall

结果为:

array([1. , 0.8, 0.8, 0.8, 0.6, 0.4, 0.2, 0. ])

#plt.grid()

plt.scatter(thresholds,precision[:-1])

结果为:
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
召回率散点图:

plt.scatter(thresholds,recall[:-1])

结果为:
【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
精度散点图:

plt.scatter(recall,precision)

【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

plt.plot(recall,precision,'r-*')

【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数
4、多值预测问题需要转化为二值预测问题进行评估

from sklearn.preprocessing import binarize
y = binarize(iris.target.reshape(-1,1))

5、输出预测的平均精确率

from sklearn.metrics import average_precision_score
average_precision = average_precision_score(y_true,y_scores)
average_precision

结果为:

0.8211111111111111

*

五、F1分数

1、导入所需的库

from sklearn.metrics import f1_score
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier()
mlp.fit(iris.data,iris.target)

2、进行F1分数计算文章来源地址https://www.toymoban.com/news/detail-403896.html

f1_score(iris.target,mlp.predict(iris.data),average = 'micro')
0.9733333333333334
f1_score(iris.target,mlp.predict(iris.data),average = 'macro')
0.9732905982905983
f1_score(iris.target,mlp.predict(iris.data),average = 'weighted')
0.9732905982905984

到了这里,关于【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分类模型评估(混淆矩阵, precision, recall, f1-score)的原理和Python实现

    当我们已经获取到一个分类模型的预测值,可以通过不同指标来进行评估。 往往衡量二分类模型是基于以下的混淆矩阵概念: True Positive:真实值为正、预测值为正(真阳性) False Positive:真实值为负、预测值为正(假阳性) False Negative:真实值为正、预测值为负(假阴性)

    2024年02月04日
    浏览(52)
  • 详细讲解分类模型评价指标(混淆矩阵)python示例

    对于回归模型的评估方法,通常会采用平均绝对误差(MAE)、均方误差(MSE)、平均绝对百分比误差(MAPE)等方法。 对于聚类模型的评估方法,较为常见的一种方法为轮廓系数(Silhouette Coefficient ),该方法从内聚度和分离度两个方面入手,用以评价相同数据基础上不同聚类

    2024年02月06日
    浏览(57)
  • 混淆矩阵、精确率、召回率和F1值:如何评估分类器的性能?

    ❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈 (封面图由文心一格生成) 在机器学习中,分类是一项非常重要的任务。在

    2024年02月02日
    浏览(60)
  • 【机器学习笔记15】多分类混淆矩阵、F1-score指标详解与代码实现(含数据)

    参考文章 4.4.2分类模型评判指标(一) - 混淆矩阵(Confusion Matrix)_进击的橘子猫的博客-CSDN博客_混淆矩阵 之前在逻辑回归的文章中简单提到过F1-score,但并没有详细对其进行说明和代码实现。这里补一下。 混淆矩阵 (又称 误差矩阵 )是评判模型结果的指标,属于模型评估的

    2023年04月17日
    浏览(50)
  • 成为AI产品经理——模型评估(混淆矩阵)

    混淆矩阵有两个定义 positive(正例) 和 negative(反例) 。分别代表模型结果的好和坏。 下图就是一个分类问题的混淆矩阵。横行代表真实的情况,而竖行代表预测的结果。 为了便于理解,我在这里举一个分出瓜的好坏的分类问题。 TP: True Positive,真正例。表示这个瓜实际

    2024年02月03日
    浏览(62)
  • 机器学习模型优劣评价指标:混淆矩阵,P-R曲线与平均精确度(附代码实现)

    文章参考:Mean Average Precision (mAP) Explained | Paperspace Blog 目录 一. Confusion Metrics混淆矩阵 二. Precision-Recall Curve, Average precision P-R曲线,平均精确度 三. 举例与代码实现 (1)从预测分数到类别标签(From Prediction Score to Class Label) (2)精确度-召回度曲线(Precision-Recall Curve) (3)平均

    2024年02月05日
    浏览(45)
  • python机器学习——分类模型评估 & 分类算法(k近邻,朴素贝叶斯,决策树,随机森林,逻辑回归,svm)

    交叉验证:为了让被评估的模型更加准确可信 交叉验证:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。 通常情

    2024年02月03日
    浏览(67)
  • 分类模型之混淆矩阵(Confusion Matrix)

    混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。 可以简单理解为:将一个分类模型的预测结果与正确结果做对比,将预测正确的统计量和预测错误的统计量分别写入一张矩阵图中,得到的这张图就是混淆矩阵了。 混

    2024年02月03日
    浏览(47)
  • 【机器学习】全网最全模型评价指标(性能指标、YOLOv5训练结果分析、轻量化指标、混淆矩阵详解)【基础收藏】

    在目标检测任务中,我们常用的评价指标一般有两种,一种是使用Pascal VOC的评价指标,一种是更加严格的COCO评价指标,一般后者会更常用点。 如何判断一个检测结果是否正确。目前最常用的方式就是去计算检测框与真实框的IOU,然后 根据IOU去判别两个框是否匹配 。 常见指

    2024年02月04日
    浏览(52)
  • 深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码

    深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法): 混淆矩阵,精确率,召回率,特异度作为卷积神经网络的模型性能评价指标,它们的计算和绘制具有非常重要的意义,特别是在写论文的时候,我们往往需要这些指标来证明我们模

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包