机器学习入门之PR曲线画法

简介: 机器学习过程中一直没搞明白PR曲线老师说的“对预测结果进行排序,排在最前面的是模型认为最可能为正例的样本,排在最后的是模型认为最不可能为正例的样本,按此顺序逐个把样本作为正例进行预测,每次都可以得出查准率和查全率”,通过查询和看别人示例终于明白了,这其实是一个预测过程,将每个实例预测结果作为阈值对所有样本进行预测计算查准率和查全率。

说明:

  • 一直没搞明白PR曲线老师说的“对预测结果进行排序,排在最前面的是模型认为最可能为正例的样本,排在最后的是模型认为最不可能为正例的样本,按此顺序逐个把样本作为正例进行预测,每次都可以得出查准率和查全率”,通过查询和看别人示例终于明白了,这其实是一个预测过程,将每个实例预测结果作为阈值对所有样本进行预测计算查准率和查全率。
  • PR曲线是由模型的查准率和查全率为坐标轴形成的曲线,查准率P为纵坐标 查全率R为横坐标
  • P 查准率:在二分类问题中所有预测为正向的样本中真正为正向样本的比例 P=TP/(TP+FP)
  • R 查全率:在二分类问题中所有正向样本中被正确预测的样本的比例 R=TP/(TP+FN)
  • TP:真正例 FP:假正例 TN:真反例 FN:假反例
  • 用于生成PR曲线的数据为随机数据,不能代表真正模型预测评估,只用于完成PR曲线
导入包
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
产生测试数据
  • 数据随机产生,仅用于演示效果
# 产生两组 0到1之间的随机数

# 演示数据1
rand_1 = list(np.random.random(20))

# 生成标签和预测概率数据
test_1 = []
for i in range(20):
    label = "P" if i < 10 else "N"
    test_1.append({"value": rand_1[i], "label": label})

# 对概率进行排序
rand_1.sort(reverse=True)

# 演示数据2
rand_2 = list(np.random.random(20))

# 生成标签和预测概率数据
test_2 = []
for i in range(20):
    label = "P" if i < 10 else "N"
    test_2.append({"value": rand_2[i], "label": label})

# 对概率进行排序
rand_2.sort(reverse=True)
计算PR值
# 计算PR值
# values 模型预测的所有样本为正的概率列表
# data 模型预测的数据与样本自身正确标签

def get_pr(values=[], datas=[]):
    
    pr = []
    
    for value in values:
        counts = {"TP": 0, "FP": 0, "TN": 0, "FN": 0}
        for data in datas:
            predict_label = "P" if data["value"] >= value else "N"
            if predict_label == "P" and data["label"] == "P":
                counts["TP"] += 1
            elif predict_label == "P" and data["label"] == "N":
                counts["FP"] += 1
            elif predict_label == "N" and data["label"] == "N":
                counts["TN"] += 1
            elif predict_label == "N" and data["label"] == "P":
                counts["FN"] += 1
        # 计算查准率
        p = round(counts["TP"]/(counts["TP"]+counts["FP"]), 2)

        # 计算查全率
        r = round(counts["TP"]/(counts["TP"]+counts["FN"]), 2)
        pr.append({"p": p, "r": r})
    
    return pr
组合数据 用于绘制图表
pr_1 = get_pr(rand_1, test_1)
pr_2 = get_pr(rand_2, test_2)

# 生成展示数据
data_show = []
for pr in pr_1:
    data_show.append({'p': pr['p'], 'r': pr['r'], 'model': 'model_1'})
    
for pr in pr_2:
    data_show.append({'p': pr['p'], 'r': pr['r'], 'model': 'model_2'})

for pr in range(20):
    value = (1.0/20)*pr
    data_show.append({'p': value, 'r': value, 'model': 'BEP'})
data_show = pd.DataFrame(data_show)
绘制图表
sns.relplot(x="r", y="p", ci=None, hue='model', kind="line", data=data_show);

image.png

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 供应链
掌握机器学习:从理论到实践PHP:从入门到精通的旅程
【8月更文挑战第20天】在探索人工智能的无限可能时,机器学习作为核心驱动力,引领着技术革新和产业变革。本文深入浅出地介绍了机器学习的基本概念、核心算法及其在实际中的应用,旨在为初学者提供一个清晰的学习路径和对这一激动人心领域的全面理解。通过探讨机器学习如何影响我们的生活和工作,本文不仅阐述了理论知识,还分享了实践案例,帮助读者把握机器学习的精髓,激发对未来技术发展的想象与创造。
167 65
|
23天前
|
机器学习/深度学习 人工智能 算法
探索AI的奥秘:机器学习入门之旅
【8月更文挑战第43天】本文将带领读者开启一段奇妙的学习之旅,探索人工智能背后的神秘世界。我们将通过简单易懂的语言和生动的例子,了解机器学习的基本概念、算法和应用。无论你是初学者还是有一定基础的学习者,都能从中获得启发和收获。让我们一起踏上这段激动人心的学习之旅吧!
|
1月前
|
机器学习/深度学习 算法 数据挖掘
|
2月前
|
机器学习/深度学习 人工智能 算法
AI基础科普:机器学习入门与实践
本文全面介绍了机器学习及其在信用评分预测中的应用。首先概览了机器学习作为人工智能核心领域的重要性及其实现数字化转型的作用。接着定义了机器学习,并区分了监督、无监督和强化学习等主要类型。随后,通过一个具体的场景——利用Python与scikit-learn库构建逻辑回归模型来预测客户的信用等级,详细阐述了从数据准备、模型训练到评估的全过程。此外,还介绍了如何借助阿里云机器学习平台PAI进行云上的模型训练和部署。最后,通过总结逻辑回归算法和其在金融领域的应用,鼓励读者深入学习并实践AI技术,以适应快速发展的科技趋势。
89 2
AI基础科普:机器学习入门与实践
|
26天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
21 0
|
2月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
51 7
|
2月前
|
机器学习/深度学习 人工智能 算法
探索AI的奥秘:机器学习入门之旅
【8月更文挑战第31天】本文将带领读者开启一段奇妙的学习之旅,探索人工智能背后的神秘世界。我们将通过简单易懂的语言和生动的例子,了解机器学习的基本概念、算法和应用。无论你是初学者还是有一定基础的学习者,都能从中获得启发和收获。让我们一起踏上这段激动人心的学习之旅吧!
|
2月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
31 0
|
2月前
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow 入门超简单!从零开始构建你的第一个神经网络,开启机器学习精彩之旅!
【8月更文挑战第31天】本文介绍了流行开源机器学习框架 TensorFlow,涵盖其安装与首个神经网络构建步骤。TensorFlow 由 Google 开发,适用于计算机视觉及自然语言处理等领域。掌握它不仅提升就业机会,还加深对机器学习的理解。通过安装 Python 并使用 pip 命令安装 TensorFlow,即可按照示例构建、训练并评估简单的线性回归模型,快速开启机器学习之旅。
30 0
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【8月更文挑战第3天】踏入人工智能领域,神经网络是开启智慧之门的钥匙。它不仅是一种技术,更是模仿人脑学习与推理的思维方式。从理解神经元间的连接到构建神经网络的基本概念,再到使用Python与TensorFlow搭建手写数字识别模型,每一步都揭示着机器学习的奥秘。随着深入学习,我们将探索更高级的主题,比如深度神经网络、卷积神经网络和循环神经网络,以及如何优化模型性能。掌握背后的数学原理,将帮助我们设计更高效准确的模型。在这个旅程中,Python将是我们的得力助手,引领我们探索AI世界的无限可能。
38 2
下一篇
无影云桌面