当前位置: 首页 > news >正文

样本不均衡与异常点检测处理|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.mrgr.cn/news/64535.html

相关文章:

  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑时空非均匀的特高压阀侧套管数字孪生模型降阶算法研究 》
  • 模块功能的描述方法
  • 服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例
  • 基于MATLAB DCT域图像水印技术
  • 电脑怎么设置开机密码:保障个人信息安全的第一步
  • 性能测试方法-基本流程
  • SVN 提交操作
  • 【语义分割|代码解析】CMTFNet-4: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!
  • 非线性数据结构之图
  • Python编程风格:保持逻辑完整性
  • Linux运行Java程序,并按天输出日志
  • 【Orange Pi 5 Linux 5.x 内核编程】-设备驱动中的sysfs
  • 【单片机C51两个按键K1、K2控制8个LED灯,初始值0xFE。摁下一次K1,LED灯左移;摁下一次K2,LED灯右移;】2022-1-5
  • 再学FreeRTOS---(中断管理)
  • 智能指针、移动语义、完美转发、lambda
  • 数字信号处理Python示例(3)生成三相正弦信号
  • 鸿蒙开发案例:分贝仪
  • Android中的Handle底层原理
  • 如何设置和使用低代码平台中的点击事件?
  • redis源码系列--(二)--eventlooop+set流程
  • 常用滤波算法(三)-算术平均滤波法
  • 【51蛋骗鸡单按键控制计数开始暂停复位】
  • 【ChatGPT】通过自定义参数让ChatGPT输出特定格式的文本
  • 同一局域网内A主机连接B主机的虚拟机中的服务
  • C++入门基础知识135—【关于C 库函数 - mktime()】
  • C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(1)