机器学习入门之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

目录
相关文章
|
3月前
|
机器学习/深度学习 数据采集 算法
深入了解机器学习:从入门到应用
【10月更文挑战第6天】深入了解机器学习:从入门到应用
|
22天前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
57 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
2月前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
65 8
|
2月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
46 2
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
38 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
71 0
|
2月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
40 0
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
29 1
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
72 2