样本不均衡与异常点检测处理|SMOTE|LOF|IForest

       在机器学习中,数据样本不均衡和异常值检测是数据科学家和机器学习工程师经常面临的挑战。这些问题如果不加以处理,会严重影响模型的性能和准确性。本文将概述这些问题,并提出相应的解决方案。

样本不均衡概述

在分类任务中,样本不均衡指的是不同类别的样本数量相差悬殊,比如y值中的正负样本不均衡。这种情况在实际应用中非常常见,比如在信贷审批中,违约的客户(负样本)往往远少于未违约的客户(正样本)。这种不均衡会导致模型在预测时偏向于多数类,从而降低对少数类的预测性能。

解决方案
  1. 下探

    下探是指在被拒绝的客户中放一部分人进来,即通过牺牲一部分收益,积累负样本,供后续模型学习。然而,下探的代价是风险增加和成本上升。它会造成信用质量的恶化,不是每个平台都愿意承担这部分坏账。并且,往往很难对每次下探的量给出一个较合适的参考值。

  2. 代价敏感(设置参数)

    代价敏感方法通过改变样本的权重来解决不均衡问题。类权重的计算方法通常如下:

    textweight=(n_classes×np.bincount(y))n_samples​

    其中,n_samples 为样本数,n_classes 为类别数量,np.bincount(y) 会输出每个类别的样本数量。

    逻辑回归模型在创建时,可以通过设置 class_weight='balanced' 参数来实现代价敏感。此外,还可以通过fpr和tpr的最大差值计算KS值来验证模型性能,KS值越大越好。

  3. 采样算法

    • 欠采样:通过减少多数类样本的数量来平衡数据集。

    • 过采样:通过增加少数类样本的数量来平衡数据集。

      其中,SMOTE算法是一种常用的过采样技术。它通过计算每个少数类样本的K个近邻,并从这些近邻中随机挑选样本进行线性插值,从而构造新的少数类样本。然而,SMOTE算法会放大数据集中的噪声和异常,因此需要对训练样本进行清洗。另一种随机过采样方法则是简单复制现有样本,但这种方法会导致训练得到的模型泛化能力较差。

      SMOTE算法的使用可以通过以下代码实现:

      from imblearn.over_sampling import SMOTE smote = SMOTE( 
      k_neighbors=K, # 找K个邻居 
      n_jobs=1, 
      random_state=random_state 
      ) x_resampled, y_resampled = smote.fit_resample(x, y)
异常点检测概述

异常值在实际数据中不可避免,异常点检测是数据处理的重要步骤。异常值通常指的是那些与大多数样本显著不同的样本点,它们可能是由于测量错误、数据录入错误或异常事件产生的。

解决方案
  1. z-score

    z-score是一种基于统计思想的异常值检测方法。它通过将每个样本点与其均值之间的差值除以标准差来计算z值,然后根据z值的绝对值大小来判断样本点是否为异常值。

  2. LOF(Local Outlier Factor)

    LOF是一种无监督的异常点检测算法。它基于密度来计算局部异常因子,密度越大说明样本越正常,反之则样本异常。LOF算法的实现流程如下:

    • 首先对样本空间进行去重,并计算每个样本到其余点的距离。
    • 将距离升序排列,并指定近邻样本个数k。
    • 对于每个样本点,寻找其k近邻样本,并计算LOF分数作为异常分数。

    LOF算法的使用可以通过以下代码实现:

    from pyod.models.lof import LOF clf = LOF(n_neighbors=k) 
    clf.fit(x) 
    y_pred = clf.predict(x)
  3. Isolation Forest

    Isolation Forest是一种基于树模型的异常点检测算法。它从样本的分割难易程度来区分正常点和异常点。Isolation Forest的构建过程类似于随机森林,但每个决策树的构建过程不同。它随机选择一个特征和一个特征值作为分割点,将样本空间划分为两部分,直到所有样本都被孤立或达到树的深度限制。

    Isolation Forest的使用可以通过以下代码实现:

    from pyod.models.iforest import IForest clf = IForest( 
    behaviour='new', # 为了兼容后续版本 
    n_estimators=500, 
    n_jobs=-1 
    ) clf.fit(x) 
    y_pred = clf.predict(x)

通过合理的策略处理样本不均衡和异常值,可以显著提高模型的性能和准确性。在实际应用中,需要根据具体的数据集和任务需求选择合适的解决方案。

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

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

相关文章

# Ubuntu 达人九步养成记(1)

Ubuntu 达人九步养成记(1) 目录: 一、ubuntu基本安装 二、设置语言环境 三、设置服务器镜像源 四、在启动栏添加终端图标 五、使用apt更新和升级系统软件 六、使用apt安装软件 七、使用apt删除软件以及apt-get 八、deb格式及谷歌浏览…

QT——TCP网络调试助手

目录 一.项目展示 ​编辑 二.开发流程 三.QTcpServer、QTcpSocket、QUdpSocket类的学习 1.QTcpServer服务端 2.QTcpSocket客户端 3.Udp通信 四.网络调试助手 1.首先我们实现当用户选择不同协议类型时不同的UI组件如何切换 2.实现打开/关闭按键图片的切换 方式一&…

导航栏渐变色iOS

- (void)viewDidLoad {[super viewDidLoad];// 设置导航栏属性self.navigationBar.translucent NO;[self.navigationBar setTitleTextAttributes:{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:28]}];// 修复iO…

《Web性能权威指南》-浏览器API与协议-读书笔记

本文是《Web性能权威指南》第四部分——浏览器API与协议的读书笔记。 第一部分——网络技术概览,请参考网络技术概览; 第二部分——无线网络性能,请参考无线网络性能; 第三部分——HTTP,请参考HTTP。 浏览器网络概述 …

使用TypeORM进行数据库操作

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用TypeORM进行数据库操作 引言 TypeORM 简介 安装 TypeORM 配置 TypeORM 定义实体 连接数据库 运行项目 高级功能 事务管理 关…

ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板

项目简介 在生活品质日益提升的今天,智能家居系统已经走进了千家万户,并逐渐成为现代生活的一部份。与此同时,一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板,已经成为众多家庭的新宠。这种高效、直观的智能化的解决方…

Hadoop生态圈框架部署(四)- Hadoop完全分布式部署

文章目录 前言一、Hadoop完全分布式部署(手动部署)1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 hdfs-site…

数据建模圣经|数据模型资源手册卷3,数据建模最佳实践

简介 本书采用了类设计模式的方式对数据模型进行高度抽象总结,展现了常见的数据模型构建模型等模型的作用、层次、分类、地位、沟通方式,和业务规则。使用一个强大的数据模型模式的数据建模,评估特定与广义模型的优缺点,有助于你改…

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Mongodb未授权访问

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

Golang--流程控制

1、分支结构 1.1 if分支 单分支 语法:if 条件表达式 { 逻辑代码 } 当条件表达式为true时,就会执行代码块的代码。条件表达式左右的()可以不写,也建议不写 if和表达式中间,一定要有空格在Golang中,{}是必须有的,就算你…

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法

一、项目背景 客户新系统上线,因为行业网络安全要求,需要做等保测评, 通过第三方漏扫工具扫描系统,漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞,具体结果如下: 1、ZooKeeper 未授权访问【…

Serverless + AI 让应用开发更简单

本文整理自 2024 云栖大会,阿里云智能高级技术专家,史明伟演讲议题《Serverless AI 让应用开发更简单》 随着云计算和人工智能(AI)技术的飞速发展,企业对于高效、灵活且成本效益高的解决方案的需求日益增长。本文旨在…

从0开始学PHP面向对象内容之(类,对象,构造/析构函数)

上期我们讲了面向对象的一些基本信息&#xff0c;这期让我们详细的了解一下 一、面向对象—类 1、PHP类的定义语法&#xff1a; <?php class className {var $var1;var $var2 "constant string";function classfunc ($arg1, $arg2) {[..]}[..] } ?>2、解…

(八)JavaWeb后端开发——Tomcat

目录 1.Web服务器概念 2.tomcat 1.Web服务器概念 服务器&#xff1a;安装了服务器软件的计算机服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应web服务器软件&#xff1a;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让用户通…

【Linux系列】Linux 和 Unix 系统中的`set`命令与错误处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Nuxt.js 应用中的 nitro:config 事件钩子详解

title: Nuxt.js 应用中的 nitro:config 事件钩子详解 date: 2024/11/2 updated: 2024/11/2 author: cmdragon excerpt: nitro:config 是 Nuxt 3 中的一个生命周期钩子,允许开发者在初始化 Nitro 之前自定义 Nitro 的配置。Nitro 是 Nuxt 3 的服务器引擎,负责处理请求、渲…

[论文阅读]LOGAN: Membership Inference Attacks Against Generative Models

LOGAN: Membership Inference Attacks Against Generative Models https://arxiv.org/abs/1705.07663v4 Proceedings on Privacy Enhancing Technologies &#xff08;PoPETs&#xff09;&#xff0c;第 2019 卷&#xff0c;第 1 期。 这篇文章是17年的一篇文章&#xff0c;…

使用Vite构建现代化前端应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Vite构建现代化前端应用 引言 Vite 简介 安装 Vite 创建项目 启动开发服务器 项目结构 配置 Vite 开发模式 生产构建 使用插…

Node.js:模块 包

Node.js&#xff1a;模块 & 包 模块module对象 包npm安装包配置文件镜像源 分类 模块 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 简单来说&#xff0c;就是把一个…