sklearn中的roc_auc_score(二分类或多分类)

news2024/11/30 2:26:19

官方API地址:

sklearn.metrics.roc_auc_score — scikit-learn 1.2.2 documentationExamples using sklearn.metrics.roc_auc_score: Release Highlights for scikit-learn 0.22 Release Highlights for scikit-learn 0.22 Probability Calibration curves Probability Calibration curves Multicl...https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc_score#sklearn.metrics.roc_auc_score

对于二分类

直接用预测值与标签值计算

代码:

# ---encoding:utf-8---
# @Time    : 2023/6/6 17:41
# @Author  : CBAiotAigc
# @Email   :1050100468@qq.com
# @Site    : 
# @File    : 癌症分类.py
# @Project : 机器学习
# @Software: PyCharm
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd
from sklearn.metrics import accuracy_score, roc_auc_score


def logistic_regression_二分类():
    data = pd.read_csv("./breast-cancer-wisconsin.csv")
    data.info()

    data = data.replace(to_replace="?", value=np.NaN)
    data = data.dropna()

    x = data.iloc[:, 1:-1].values
    y = data.iloc[:, -1].values

    x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, shuffle=True, stratify=y, random_state=22)
    transformer = StandardScaler()
    x_train = transformer.fit_transform(x_train)
    x_test = transformer.transform(x_test)

    estimator = LogisticRegression()
    estimator.fit(x_train, y_train)

    y_pred = estimator.predict(x_test)
    print(accuracy_score(y_pred, y_test))
    print(roc_auc_score(y_test, y_test))


if __name__ == '__main__':
    logistic_regression_二分类()

 对于多分类

与二分类y_pred不同的是,概率分数y_pred_prob

代码:

# ---encoding:utf-8---
# @Time    : 2023/6/6 17:41
# @Author  : CBAiotAigc
# @Email   :1050100468@qq.com
# @Site    : 
# @File    : 癌症分类.py
# @Project : 机器学习
# @Software: PyCharm
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd
from sklearn.metrics import accuracy_score, roc_auc_score


def logistic_regression_多分类():
    data = pd.read_csv("./iris.csv", header=None)
    data.info()
    x = data.iloc[:, :-1].values
    data.columns = ["1", "2", "3", "4", "Class"]
    y = data[["Class"]]

    def myapply(x):
        classify = x.unique().tolist()
        list_ = []
        for current in x:
            for idx, c in enumerate(classify):
                if current == c:
                    list_.append(idx)

        return list_

    y = y.apply(myapply)["Class"].values
    # print(y)

    x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, shuffle=True, stratify=y, random_state=22)

    transformer = StandardScaler()
    x_train = transformer.fit_transform(x_train)
    x_test = transformer.fit_transform(x_test)

    estimator = LogisticRegression()
    estimator.fit(x_train, y_train)

    y_pred = estimator.predict(x_test)

    print(accuracy_score(y_pred, y_test))
    print(roc_auc_score(y_test, estimator.predict_proba(x_test), multi_class="ovr"))


if __name__ == '__main__':
    logistic_regression_多分类()

roc_auc_score的multi_class参数的解释:

multi_class是用于多分类问题的参数。在二元分类时,分类器需要将每个实例分到两个类别之一。而在多元分类时,分类器一般需要将一个实例分到多个类别之一。

multi_class参数共有三种取值:

  1. 'raise': 如果标签中包含了多个类别并且multi_class没有显式地被设置为 'ovr' 或 'ovo' ,那么roc_auc_score函数将抛出一个 ValueError 异常。

  2. 'ovr': One-vs-rest策略。将多分类问题拆成多个二分类子问题。对于每个类别,都训练一个二分类模型来区分该类别和其他所有类别的差异。对于多分类问题,将会创建n个模型,其中n是类别的数量。

  3. 'ovo': One-vs-one策略。 每次只选择两个类别计算AUC,最终的AUC为所有类别的AUC均值。对于多分类问题,将会创建$ n*(n-1)/2 $个模型,其中n是类别的数量。

在处理具有大量类别的多分类问题时,ovo 策略的计算代价会变得非常高,因为它需要构建大量的二分类器。而 ovr 策略通常比 ovo 策略更有效,但也更容易受到样本不平衡和噪音数据的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI创作与大语言模型:2023亚马逊云科技中国峰会引领企业应用新潮流

川川出品,必属精品。 文章目录 CodeWhispere免费的代码生成器安装教程使用自动编码 2023亚马逊云科技中国峰会最后总结 CodeWhispere免费的代码生成器 这里我介绍亚马逊云科技的一个产品,那就是Amazon codewhisperer。大家肯定对AI各种产品的火爆已经有…

F/S系统分分钟系统秒变BS/CS,但共享文件夹上的DBF访问掉了个坑

接VFP MIX ALL社群狐友求助,说IIS访问共享文件夹的DBF出错了: 猫猫复现了一下错误: 错误号1705 不能访问DBF表 这个问题估计还是会有很多狐友会遇到这个问题,那么我们就来解决一下吧. 在服务器上面建好共享文件夹 \\newserver\dbf 里面放一个…

开源项目|EasyOCR一款实用的图片OCR文字识别项目

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页:[ https://www.weiyigeek.top ] 博客&…

一级建造师执业资格考试--工程经济--速学36记--联想法

第一记:利息的计算 第二记:等值计算 第三记:名义利率与有效利率 第四记:经济效果评价指标体系 第五记:静态投资回收期分析 第六记:静态投资回收期分析 第七记:预付款 第八记:施工索赔…

2023年深圳某互联网公司前端开发初级岗笔试真题(含解析和源码)

📚关于该专栏: 该专栏的发布内容是前端面试中笔试部分真题、答卷类、机试等等的题目,题目类型包括逻辑题、算法题、选择题、问答题等等,除了内容的分享,还有解析和答案。真实来自某些互联网公司,坐标广东广州、深圳。 …

如何使用Python Flask和MySQL创建管理用户的REST API

部分数据来源:ChatGPT 引言 在现代化的应用开发中,数据库是一个非常重要的组成部分。关系型数据库(例如:MySQL、PostgreSQL)在这方面尤其是很流行。Flask是一个Python的web框架,非常适合实现REST API。在…

NLP学习笔记六-lstm模型

NLP学习笔记六-lstm模型 上一篇我们讲的是simple RNN模型,那么其实lstm模型更像是simple RNN模型的改进或者变种。 对于lstm模型,我们先看下面一张图: 其实lstm模型的思想是建立在simple RNN模型上的,但是要更加贴近于显示&…

内网安全:内网渗透.(拿到内网主机最高权限 vulntarget 靶场 A)

内网安全:内网渗透.(拿到内网主机最高权限) 内网穿透又被称为NAT穿透,内网端口映射外网,在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题。通过映射端口,让外网的电脑找到处于内网的电脑。…

数据分析第19课pyecharts布局(基础图形绘制)

官网:https://pyecharts.org/#/zh-cn/global_options?id=legendopts%ef%bc%9a%e5%9b%be%e4%be%8b%e9%85%8d%e7%bd%ae%e9%a1%b9 不想每个属性方法的看,可以直接看gallery 官网的数据都是静态的,如果要做数据实时更新的,即做前后端结合时,会用到Vue框架,与后端连接,实现动…

Nacos架构与原理 - CAP一致性协议 ( Raft Distro)

文章目录 为什么 Nacos 需要⼀致性协议为什么 Nacos 选择了 Raft 以及 Distro从服务注册发现来看从配置管理来看为什么是 Raft 和 Distro ?Raft (CP模式)Distro (AP模式) Nacos ⼀致性协议的演进早期的 Nacos ⼀致性协议当前 Nacos 的⼀致性协…

[Python图像处理] 基于离散余弦变换的安全扩频数字水印

基于离散余弦变换的安全扩频数字水印 数字水印基于离散余弦变换的安全扩频数字水印实现安全扩频数字水印相关链接 数字水印 数字水印是可见的或不可见的标识码,这种标识码被永久嵌入图像中,并且即使在解码过后后仍存在于图像中。为了保证有效性&#xf…

Jetpack Compose 中在屏幕间共享数据的 5 种方案

1. 路由传参 Jetpack Compose 中路由传参的方式有很多种,具体可以参考 Jetpack Compose 中的导航路由 以下是最简单的路由传参测试代码: import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.…

Java开发框架:Spring介绍

Spring 概述特点Spring 程序遇到的问题与解决 概述 Spring 是 Java EE 编程领域中的一个轻量级开源框架,由 Rod Johnson 在 2002 年最早提出并随后创建,目的是解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。其中,轻量…

代理模式的运用

文章目录 一、代理模式的运用1.1 介绍1.2 结构1.3 静态代理1.3.1 火车站买票案例类图1.3.2 代码 1.4 JDK动态代理1.4.1 代码1.4.2 JDK动态代理的执行流程 1.5 CGLIB动态代理1.5.1 导包1.5.2 代码 1.6 三种代理的对比1.7 优缺点1.8 使用场景 一、代理模式的运用 1.1 介绍 由于…

从0开始搭建Hyperledger Fabric2.x环境(fabric2.5版本)

Hyperledger Fabric 2.5环境搭建 一.Linux环境准备 # root登录 yum -y install git curl docker docker-compose tree yum -y install autoconf autotools-dev automake m4 perl yum -y install libtool autoreconf -ivf # 安装jq相关包 cd /opt git clone --recursive https…

软考A计划-系统架构师-官方考试指定教程-(8/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例

文章目录 0.前言1. 基本概念1.1. Stream的结构1.2. 持久化1.3. Stream的消费者组 2.实现原理2.1. Stream的数据结构2.2. Stream的消息追加2.3. Stream的消费2.4. Stream的消费者组 3.Redis Stream底层原理3.1. 基数树(Radix Tree)3.2. listpacks小结 4.命…

数据清洗、数据处理入门!R语言我来了,数据不再零散!

一、引言 数据清洗和预处理是数据科学中必不可少的一部分,它们能够帮助我们准确地分析和预测未来趋势。如果你曾经尝试过进行分析或建模,你会发现数据往往不像我们所想象的那样干净、整洁。需要对数据进行仔细的检查、清理和处理,才能真正把…

JavaSE笔记(五)重制版

泛型程序设计 在前面我们学习了最重要的类和对象,了解了面向对象编程的思想,注意,非常重要,面向对象是必须要深入理解和掌握的内容,不能草草结束。在本章节,我们还会继续深入了解,从泛型开始&a…

delphi D11编程语言手册 学习笔记(P344-392) 接口/类操作

P344-365 接口 "接口" 的概念和 "类" 特别是 "抽象类" 近似, Delphi 之初并没有接口, 后来(Delphi 3)为了支持 COM 引入了接口, 再后来发展成为 Delphi 重要的语言特性. 使用 COM 步骤可能是这样的:     1.程序在使用组件之初, 先联系 "…