机器学习中的决策阈值
什么是决策阈值?
sklearn不允许我们直接设置决策阈值,但它允许我们访问用于进行预测的决策分数(决策函数o/p)。我们可以从决策函数输出中选择最佳得分并将其设置为决策阈值,并且将小于该决策阈值的所有那些决策得分值视为负类(0),并且将大于该决策阈值的所有那些决策得分值视为正类(1)。
对各种决策阈值使用精度-召回曲线,我们可以选择最佳的决策阈值,使它提供高精度(不影响召回很多)或高召回(不影响精度很多)的基础上,根据我们的项目是面向精度还是面向召回的。
这样做的主要目的是得到一个高精度ML模型,或高召回ML模型。
用于构建高精度ML模型的Python代码
# Import required modules.
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, recall_score, precision_score, accuracy_score# Get the data.
data_set = datasets.load_breast_cancer()# Get the data into an array form.
x = data_set.data # Input feature x.
y = data_set.target # Input target variable y.# Get the names of the features.
feature_list = data_set.feature_names# Convert the data into pandas data frame.
data_frame = pd.DataFrame(x, columns = feature_list)# To insert an output column in data_frame.
data_frame.insert(30, 'Outcome', y) # Run this line only once for every new training.# Data Frame.
data_frame.head(7)
训练模型
# Train Test Split.
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 42)# Create Classifier Object.
clf = SVC()
clf.fit(x_train, y_train)# Use decision_function method.
decision_function = clf.decision_function(x_test)
获得实际评分
# Actual obtained results without any manual setting of Decision Threshold.
predict_actual = clf.predict(x_test) # Predict using classifier.
accuracy_actual = clf.score(x_test, y_test)
classification_report_actual = classification_report(y_test, predict_actual)
print(predict_actual, accuracy_actual, classification_report_actual, sep ='\n')
在上面的分类报告中,我们可以看到我们的模型精度值(1)是0.92,召回值(1)是1.00。由于本文中我们的目标是在预测(1)时构建一个高精度ML模型而不影响召回率,因此我们需要从下面的精确度-召回曲线中手动选择最佳的决策阈值值,以便我们可以提高该模型的精度。
# Plot Precision-Recall curve using sklearn.
from sklearn.metrics import precision_recall_curve
precision, recall, threshold = precision_recall_curve(y_test, decision_function)# Plot the output.
plt.plot(threshold, precision[:-1], c ='r', label ='PRECISION')
plt.plot(threshold, recall[:-1], c ='b', label ='RECALL')
plt.grid()
plt.legend()
plt.title('Precision-Recall Curve')
在上面的图中,我们可以看到,如果我们想要高精度值,那么我们需要增加决策阈值的值 (X轴),但这将降低召回值(这是不利的)。因此,我们需要选择决策阈值,它可以提高准确率,但召回率不会下降太多。形成上述曲线的一个这样的值是大约0.6决策阈值。
# Implementing main logic.# Based on analysis of the Precision-Recall curve.
# Let Decision Threshold value be around 0.6... to get high Precision without affecting recall much.
# Desired results.# Decision Function output for x_test.
df = clf.decision_function(x_test)# Set the value of decision threshold.
decision_teshold = 0.5914643767268305# Desired prediction to increase precision value.
desired_predict =[]# Iterate through each value of decision function output
# and if decision score is > than Decision threshold then,
# append (1) to the empty list ( desired_prediction) else
# append (0).
for i in df:if i<decision_teshold:desired_predict.append(0)else:desired_predict.append(1)
新旧精度值的比较
# Comparison# Old Precision Value
print("old precision value:", precision_score(y_test, predict_actual))
# New precision Value
print("new precision value:", precision_score(y_test, desired_predict))
输出
old precision value: 0.922077922077922
new precision value: 0.9714285714285714
结论
- 精度值从0.92增加到0.97。
- 召回值因精度-召回权重而减少。
注: 上面的代码没有经过数据预处理(数据清理),这只是一个在实践中如何使用决策阈值的想法。
相关文章:

机器学习中的决策阈值
什么是决策阈值? sklearn不允许我们直接设置决策阈值,但它允许我们访问用于进行预测的决策分数(决策函数o/p)。我们可以从决策函数输出中选择最佳得分并将其设置为决策阈值,并且将小于该决策阈值的所有那些决策得分值…...

mongodb导出聚合查询的数据
❗️❗️❗️在正文之前先要讲一个坑,就是mongoexport这个命令工具不支持导出聚合查询的数据,比如通过某某字段来分组 我查了一天关于mongoexport怎么来导出聚合查询的结果集,最终还是gpt给了我答案 😭 既然mongoexport不支持&…...

U-Mail信创邮件系统解决方案
近年来,在国家政策的大力引导和自身数字化转型需求驱动下,国产化成为国内数字化发展道路上的关键词,企业不断加强自主创新能力,进行信创建设,实现软硬件系统国产化替代,已成为大势所趋。邮件系统作为企业管…...

GUI:贪吃蛇
以上是准备工作 Data import javax.swing.*; import java.net.URL;public class Data {public static URL headerURLData.class.getResource("static/header.png");public static ImageIcon header new ImageIcon(headerURL);public static URL upURLData.class.getR…...

leaflet:个性化配置,利用Leaflet-Geoman绘制多种图形(136)
第136个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中个性化配置,利用Leaflet-Geoman绘制多种图形。 灵活地配置Leaflet-Geoman的属性,可以产生各种美妙的绘图效果。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方…...

【Shell脚本8】Shell printf 命令
Shell printf 命令 printf 命令模仿 C 程序库(library)里的 printf() 程序。 printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。 printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化…...
CSAPP第4章:RISC和CISC指令集
RISC和CISC指令集 IA32被称为复杂指令集计算机(CISC),与精简指令集计算机(RISC)相对。 从历史上看,先出现了CISC机器,计算机不断发展使指令集非常大。 RISC设计理念在80年代早期发展,使用更简单的指令集产生高效的代码。 许多加…...

【LeetCode】每日一题 2023_11_9 逃离火灾(bfs 练习)
文章目录 刷题前唠嗑题目:最长平衡子字符串题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动!!! 嗯?什么?今天是 hard?陷入沉思。。。先看看题吧 题目:最长平…...

flink1.18.0 自适应调度器 资源弹性缩放 flink帮你决定并行度
jobmanager.scheduler Elastic Scaling | Apache Flink 配置文件修改并重启flink后,webui上会显示调整并行度的按钮,他可以自己调整,你也可以通过webUI手动调整: 点击 之后: 调整完成后:...

如何设计vue项目的权限管理?
权限管理的重要性及必要性 数据安全:权限管理可以确保只有具有相应权限的用户能够访问和操作特定的数据。这可以保护敏感数据不被未授权的用户访问,从而提高数据的安全性。功能控制:权限管理可以根据用户的角色和权限设置,控制用户…...
HBase学习笔记(2)—— API使用
对HBase中常用的API操作进行简单的介绍 对应HBase学习笔记(1)—— 知识点总结-CSDN博客中介绍的HBase Shell常用操作 更多用法请参考官网:Apache HBase ™ Reference Guide 依赖导入 <dependencies><dependency><groupId>o…...

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发004:游戏核心消息处理 - 玩家类的实现
文章目录 0 代码仓库1 需求2 AOI设计2.1 AOI算法简介2.2 AOI数据结构及实现2.2.1 玩家2.2.2 网格对象2.2.3 游戏世界矩形2.2.4 获取周围玩家的实现2.2.5 代码测试 2.3 GameRole结合AOI创建玩家2.3.1 创建游戏世界全局对象-GameRole继承AOIWorld的Player2.3.2 把玩家到游戏世界的…...
Python Selenium元素定位方法详解
引言 在Web自动化测试中,元素定位是一项非常重要的技术。Python Selenium提供了各种元素定位方法,可以帮助我们定位页面上的元素并与之交互。本文将详细介绍Python Selenium中常用的元素定位方法,并提供实例代码。 1. ID定位 ID是元素在HT…...
分布式事务,你了解多少?(上)
本文主要是讲述分布式事务的理论及常用的技术方案,主要源自各类学习和工作总结,如有不妥之处,还望指正。分布式事务的其他基础请自行查阅资料。 一、分布式事务产生的原因 分布式事务的产生,源自互联网、电商等的发展,…...

ClickHouse主键索引最佳实践
在本文中,我们将深入研究ClickHouse索引。我们将对此进行详细说明和讨论: ClickHouse的索引与传统的关系数据库有何不同ClickHouse是怎样构建和使用主键稀疏索引的ClickHouse索引的最佳实践 您可以选择在自己的机器上执行本文给出的所有Clickhouse SQL…...
Flink 基础 -- 应用开发(项目配置)
1、概述 本节中的指南将向您展示如何通过流行的构建工具(Maven, Gradle)配置项目,添加必要的依赖项(即连接器和格式,测试),并涵盖一些高级配置主题。 每个Flink应用程序都依赖于一组Flink库。至少,应用程序依赖于Flink api&…...
空间曲面@常见曲面方程
文章目录 曲面的基本问题特殊曲面球面方程球的标准形方程一般形方程例 柱面柱面方程不同维度下同方程的图形常见柱面方程 旋转曲面旋转曲面的方程旋转情况分类以yOz上的曲线绕 z z z轴旋转为例 旋转曲面的方程常见旋转曲面方程 锥面其他曲面 曲面的基本问题 根据曲面(点的几何…...
unity 接收和发送Udp消息
因为需要用到unity和其他的程序交互,其他程序可以提供Udp消息,因此找了合适的相互连接方法。这里直接上代码。 工具类: using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net; u…...

机器学习股票大数据量化分析与预测系统 - python 计算机竞赛
文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…...
架构描述语言(ADL)
1.架构描述语言(ADL) 架构描述语言(Architecture Description Language, ADL)是一种为明确说明软件系统的概念架构和对这些概念架构建模提供功能的语言。 2.ADL基本构成要素 ADL即架构描述语言,其基本构成要素包括:…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...

如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...