matlab 数据降维和重构_处理不平衡机器学习数据时需要了解的技术

2023-11-12

我们在处理真实世界机器学习数据集时遇到的主要挑战之一是数据的比例不平衡。欺诈检测是这类数据的最好例子。在本文中,我们将使用kaggle中的信用卡欺诈检测数据集(www.kaggle.com/mlg-ulb/creditcardfraud)。

在全部数据中,欺诈事件不到1%。这种具有相当少的来自特定类的实例的数据称为不平衡数据。

采样技术

过采样

对少数类(数据集中实例较少的类)的数据进行复制,以增加少数类的比例。这种技术的一个主要问题是过度拟合。

from imblearn.over_sampling import RandomOverSampleroversample = RandomOverSampler(sampling_strategy='minority')X_over, y_over = oversample.fit_resample(X_train, y_train)

欠采样

对来自多数类(机器学习数据集中实例较多的类)的数据进行采样,以减少多数类的比例。这种技术的一个主要问题是信息的丢失。

from imblearn.over_sampling import RandomUnderSamplerundersample = RandomUnderSampler(sampling_strategy='majority')X_over, y_over = oversample.fit_resample(X_train, y_train)

合成少数类过采样技术(SMOTE)

我们将使用过采样技术生成样本,但不是盲目复制。SMOTE遵循以下步骤来生成数据。

  1. 对于少数类中的每个样本x,选择k个最近邻构成Q{y0,y1,…yk}(k的默认值为5)。
  2. 对少数类样本进行线性插值,得到新的样本x’。
70e9a66603d9edf042707ab21862ccbb.png

SMOTE之前的t-sne图

from imblearn.over_sampling import SMOTEsm = SMOTE(random_state = 2)X_train_res, y_train_res = sm.fit_sample(X_train, y_train)
33da6288be119682a0db774506c6c614.png

SMOTE之后的t-sne图

结合使用SMOTE和欠采样可获得更好的结果。

集成学习技巧

集成学习技术在不平衡数据上表现良好。集成技术结合了多个分类器的结果,以提高单个分类器的性能。

随机森林

e6cee11bd294020eef62b48e498c1c4d.png

集成学习

随机森林是一种减少决策树分类器方差的集成学习技术。随机森林从建立在采样数据上的多个决策树中获得最佳解。

from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier(n_estimators=100,                                bootstrap = True,                               max_features = 'sqrt')model.fit(X_train,y_train)y_pred2= model.predict(X_test)

我们检测到72个欺诈(总共98个欺诈)。因此,检测到欺诈的概率为0.734。

b82b458474300bf3fd9173ce12d08066.png

随机森林的混淆矩阵

XGBoost

0ed91e20f0411f598d88be039a4d6adb.png

Boosting

随机森林并行构建树。在boosting技术中,通过校正先前训练的树的误差来训练树。

import xgboost as xgbalg = xgb.XGBClassifier(learning_rate=0.1, n_estimators=140, max_depth=5,min_child_weight=3, gamma=0.2, subsample=0.6, colsample_bytree=1.0,objective='binary:logistic', nthread=4, scale_pos_weight=1, seed=27)alg.fit(X_train, y_train, eval_metric='auc')y_pred = alg.predict(X_test)y_score = alg.predict_proba(X_test)[:,1]

我们检测到74起欺诈/ 98起欺诈。因此,检测到欺诈的概率为0.755。

6212461f75c3de577b629cf1914758bd.png

XGBoost的混淆矩阵

Light GBM

Light GBM可以提高XGBoost的性能。Light GBM内存高效且与大型数据集兼容。

import lightgbm as lgbmlgbm_clf = lgbm.LGBMClassifier(boosting_type='gbdt',        class_weight=None,        colsample_bytree=0.5112837457460335,importance_type='split',        learning_rate=0.02, max_depth=7, metric='None',        min_child_samples=195, min_child_weight=0.01,        min_split_gain=0.0,        n_estimators=3000, n_jobs=4, num_leaves=44, objective=None,        random_state=42, reg_alpha=2, reg_lambda=10, silent=True,        subsample=0.8137506311449016, subsample_for_bin=200000,        subsample_freq=0)lgbm_clf.fit(X_train, y_train)y_pred1 = lgbm_clf.predict(X_test)y_score1 = lgbm_clf.predict_proba(X_test)[:,1]

我们检测到76起欺诈/ 98起欺诈。因此,检测到欺诈的概率为0.775。

fae180f661b2da130bcfd8f3b0af206f.png

Light GBM的混淆矩阵

深度学习技术

自编码器

4d714009fdbe796a096a4abf32292aa5.png

自编码器

自编码器尝试重建给定的输入。自编码器用于降维和深度异常检测。这些深度学习技术也可以应用于图像和视频。

我们将仅以正常交易来训练我们的自编码器。每当遇到欺诈检测时,自编码器都无法重建它。

autoencoder = tf.keras.models.Sequential([       tf.keras.layers.Dense(input_dim, activation='relu', input_shape=(input_dim, )),     tf.keras.layers.GaussianNoise(),    tf.keras.layers.Dense(latent_dim, activation='relu'),        tf.keras.layers.Dense(input_dim, activation='relu')    ])autoencoder.compile(optimizer='adam',                     loss='mse',                    metrics=['acc'])autoencoder.summary()

现在,我们将训练自编码器,并观察正常交易和欺诈交易的重构情况。

X_test_transformed = pipeline.transform(X_test)reconstructions = autoencoder.predict(X_test_transformed)mse = np.mean(np.power(X_test - reconstructions, 2), axis=1)
b761a3e36e4839cfafc58d8f118753f0.png

label-0是正常的,label-1是欺诈

欺诈交易的重构误差率很高。现在,我们需要设置将欺诈与正常交易区分开的阈值。

为了获得较高的精度值,我们可以采用较高的阈值,但是为了获得良好的召回率,我们需要降低它。

156e5681473adfb919fb5adbdf823ef6.png

With MAD threshold — 3

564f2319812845e4815ceb064087d46c.png

With MAD threshold — 5

DevNet

Deviation Networks (DevNet)定义了高斯先验和基于Z分数的偏差损失,以使端到端神经异常评分学习器能够直接优化异常评分。

69e791f76bec75e0ac8b47a0e02f2463.png

DevNet

该网络中使用的损失函数为:

Lφ(x;Θ)=(1- y)| dev(x)| + y max(0,a-dev(x))

dev(x)=φ(x;Θ)−μR/σR

其中a是Z分数置信区间。

根据中心极限定理,我们可以得出结论:高斯分布拟合从网络获得的异常分数数据。我们将在实验中设置μ= 0和σ= 1,这有助于DevNet在不同机器学习数据集上实现稳定的检测性能。

对于所有正常交易(y = 0):

Lφ(x;Θ)=(1-0)| dev(x)| = | dev(x)|

对于所有欺诈交易(y = 1):

Lφ(x;Θ)= 1(max(0,a-dev(x)))= max(0,a-dev(x))

因此,偏差损失相当于将所有异常对象的异常评分与正常对象的异常评分进行统计显著性偏差。

网络的代码是:

def dev_network(input_shape):       x_input = Input(shape=input_shape)    intermediate = Dense(1000                ,activation='relu',                               kernel_regularizer=regularizers.l2(0.01), name =                      'hl1')(x_input)        intermediate = Dense(250, activation='relu',                                 kernel_regularizer=regularizers.l2(0.01), name =                       'hl2')(intermediate)        intermediate = Dense(20, activation='relu',                                    kernel_regularizer=regularizers.l2(0.01), name =                     'hl3')(intermediate)        intermediate = Dense(1, activation='linear', name = 'score')                        (intermediate)       return Model(x_input, intermediate)

偏差损失的Pytyhon代码为:

def deviation_loss(y_true, y_pred):      confidence_margin = 5.             ref = K.variable(np.random.normal(loc = 0., scale= 1.0, size =                      5000) , dtype='float32')        dev = (y_pred - K.mean(ref)) / K.std(ref)        inlier_loss = K.abs(dev)         outlier_loss = K.abs(K.maximum(confidence_margin - dev, 0.))           return K.mean((1 - y_true) * inlier_loss +                                  y_true * outlier_loss)model = dev_network_d(input_shape)model.compile(loss=deviation_loss, optimizer=rms)

指标

对于不平衡的机器学习数据,准确性不是一个好的度量标准。相反,我们可以考虑使用Recall和F1-score。

我们也可以从ROC曲线转换到Precision-Recall曲线。

ROC曲线介于真阳性率(召回率)与假阳性率之间。

精度对不平衡数据的变化更为敏感,因为负样本的数量相当高。

FPR = FP /(FP + TN)

Precision= TP /(TP + FP)

最后

  1. 为了从图像或视频相关数据中检测异常,首选深度学习。
  2. 与集成方法相比,深度学习中需要调整的参数更多。因此,理解模型对于深度学习的调整起着关键作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab 数据降维和重构_处理不平衡机器学习数据时需要了解的技术 的相关文章

  • QT项目超详细打包教程

    一 将QT项目调成为release模式并运行程序 二 在QT中点击项目 三 复制项目的构建目录 四 进入项目的构建目录 找到release文件并进入 五 在release文件夹下新建一个文件夹 任意起名 六 将release文件夹下生成的可
  • Golang 切片删除指定元素的几种方法

    文章目录 1 截取法 修改原切片 2 拷贝法 不改原切片 3 移位法 修改原切片 3 1 方式一 3 2 方式二 4 性能对比 5 小结 参考文献 Go 并没有提供删除切片元素专用的语法或函数 需要使用切片本身的特性来删除元素 删除切片指定
  • C++中两个栈实现一个队列

    引言 首先看这个标题的时候 需要联想到栈和队列的特点 栈是先进后出 队列是先进先出 假如三个元素1 2 3 将这三个元素依次入栈1后 再将栈1中元素依次出栈放入到栈2中 栈1中只留下最后一个元素1 此时栈2中由两个元素 接下来获取栈1中的栈
  • QT-子线程访问主界面UI控件的有效方法

    引言 当软件需要导入大量数据文本时 若显示控件操作放在主界面UI线程中 会导致在导入数据的过程中存在界面卡死的现象 这种现象在工业控制工况中中是致命的 因此本文章旨在实现非UI子线程对UI主线程的操作 这里举一个简单的Demo 大文本数据通
  • 三款很酷很骚气的底部导航

    早上好 骚年 我是小菜 我的公众号 菜鸟翻身 会推荐 GitHub 上好玩的项目 一分钟 get 一个优秀的开源项目 挖掘开源的价值 欢迎关注我 底部导航栏是 APP 最常用的功能之一 想最初都是自己自定义 ViewGroup 实现 后来
  • PMBOK(第六版) PMP笔记——《第六章 项目进度管理》

    第 6 6 章 项目进度管理 项目进度管理包括为管理项目按时完成所需的各个过程 项目进度计划 Schedule 说明了项目如何以及何时交付项目范围中定义的产品 服务 和成果 创建 WBS 最底层得到的是工作包 但是为了更好的估算活动持续时间
  • SpringAOP学习--SpringAOP简介及原理

    前文对AOP做了介绍 实际项目中 一般不会直接上手手动实现aop 而是使用一些高级封装的aop实现 如SpringAOP Spring是一个广泛应用的框架 SpringAOP则是Spring提供的一个标准易用的aop框架 依托Spring的
  • vue props传Array/Object类型值,子组件报错解决办法(已解决)

    问题 Props with type Object Array must use a factory function to return the default value 1 在vue中如果当在父组件通过props传Array Obje
  • IPv6地址格式简介以及常见的IP地址

    toc 文章目录 1 IPv6地址格式 1 1首选格式 1 2 压缩格式 1 3 内嵌IPv4地址的IPv6 2 常见的IP地址 2 1 128 2 2 1 128 2 3 A B C D 2 4 FFFF A B C D 2 5 fe80
  • ElasticSearch入门学习笔记(2)--------Kibana语法学习

    ElasticSearch的ResultFul风格 基于Rest命令说明 原文链接 基础测试 创建一个索引 put 索引名 类型名 文档id 请求体 可以再head里面看到里面多了一个test1 从下面的图中可以看到本质上就是往里面put了
  • 如何在两个相关泛型类之间创建类似子类型的关系

    本文正在参加 金石计划 瓜分6万现金大奖 哈喽大家好 我是阿Q 事情是这个样子的 对话中的截图如下 看了阿Q的解释 你是否也和 马小跳 一样存在疑问呢 请往 看 我们都知道在java中 只要是类型兼容 就可以将一种类型的对象分配给另一种类型
  • vmware启动报错0xc000007b 解决方式

    1 官网下载vmwre 最新版后安装 2 运行vmwre报错结果如下 解决方法 安装最新版本C 运行库 VisualC2022 64 86 64位操作系统安装VisualC2022 64 86 32未操作系统安装VisualC2022 86
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • c++中的vector的用法

    参考博客 https blog csdn net msdnwolaile article details 52708144 基本用法 如下代码 include
  • Flutter Image图片显示

    目录 参数详解 代码示例 效果图 完整代码 使用资源图片前必做两个步骤 1 在根目录下创建子目录 子目录中创建2 0x和3 0x 也可以创建4 0x 5 0x 但是2 0和3 0是必须的 目录 在对应目录中添加对应分辨率图片 图1 2 打开
  • 2020笔记本性价比之王_2020十大笔记本电脑性价比排行(最新笔记本电脑推荐)...

    2020十大笔记本电脑性价比排行 最新笔记本电脑推荐 1 HP 惠普 战99 15 6英寸笔记本电脑 2 Acer 宏碁 墨舞P50 15 6英寸笔记本电脑 3 HONOR 荣耀 MagicBook Pro 16 1英寸笔记本电脑 4 AS
  • C++中的Unicode编码:wchar, UTF-8,UTF-16,UTF-32

    C 在C11标准中加入了对Unicode编码的支持 新增了wchar t char16 t char32 t内置数据类型 cout lt lt sizeof char lt lt endl cout lt lt sizeof wchar t
  • 上传新文件项目到svn上

    一 在之前有svn项目的文件夹中检出 这一步主要是为了获得svn的仓库地址 二 在一个之前有的svn项目里面右键tortoiseSvn gt 版本库浏览器 就会出现这样的界面 然后在这个界面里右键里选择加入文件夹 选择本地的文件夹就可以了
  • Python剪刀石头布

    这是以前刚刚开始学习python时自己编的第一个小游戏 很简单 分享给大家 import random 胜 0 负 0 平 0 while True 对方 str random randint 1 3 我方 input 请选择你的出拳 剪刀

随机推荐

  • [C]编译器对char数组声明的一个行为

    1 概述 如果使用char 来声明char数组 那么编译器会自动计算后面的字面量字符数 再加上一个空字符 作为它的长度 实际上这个数组最后一位被编译器强行加上了 0 include
  • VS里面关于.cpp文件与.cu文件混合编译问题---不要在.cpp文件声明核函数(__device__()和global__())

    原文出处 点击打开链接 不要在 cpp文件声明核函数 否则会报错 具体可以参考下面两个链接 http blog csdn net lingerlanlan article details 25063331 utm source tuicoo
  • 如何自己手动搭建一个RSS订阅机器人(rssbot),自己做一个RSS阅读器

    当你想RSS订阅一些自己感兴趣的博客 却又苦于免费的RSS阅读器广告很多时 可以自己借助Telegram机器人搭建一个RSS订阅机器人 本文老王介绍下如何搭建一个Telegram RSS订阅机器人 以及如何把RSS订阅机器人拖到Telegr
  • JAVA - 可变对象与不可变对象

    不可变对象在并发程序中比较有用 由于其状态无法改变 因此无法被线程的干扰损坏或者被视为不一致状态 基本概念 不可变对象 Immutable Objects 即对象一旦被创建它的状态 对象的数据 也即对象属性值 就不能改变 任何对它的改变都应
  • U3D Transform基本移动函数: 移动、旋转、缩放

    1 指定方向移动 移动速度 float TranslateSpeed 10f Vector3 forward 表示 向前 transform Translate Vector3 forward TranslateSpeed 2 全方向移动
  • Java 8新特性探究(十一)Base64详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt BASE64 编码是一种常用的字符编码 在很多地方都会用到 但base64不是安全领域下的加密解密算法 能起到安全作用的效果很差 而且很容易破解 他核心作用应该是传输数据的
  • 数字IC时钟

    目录 前言 1 时钟的概念与性质 2 时钟源 3 时钟管理模块 3 1 时钟门控 3 2 时钟分频 3 3 时钟切换 前言 时钟信号对于整个芯片的功能有着至关重要的作用 一旦芯片级的时钟信号质量不高 会导致许多不受控的异常bug 本人目前还
  • 数据库(第五版)课后习题答案

    仅供参考 有任何问题概不负责 请同学们谨慎参考 数据库系统概论第五版 答案 第1章 绪论 1 试述数据 数据库 数据库系统 数据库管理系统的概念 答 l 数据 Data 描述事物的符号记录称为数据 数据的种类有数字 文字 图形 图像 声音
  • inc指令是什么意思_工作台自动循环运动PLC控制指令与梯形图

    点击箭头处 工业之家 选择 关注公众号 工作台自动循环运动PLC控制指令与梯形图 一 数据传送指令 数据传送指令包括MOV 传送 SMOV BCD码移位传送 CML 取反传送 BMOV 数据块传送 FMOV 多点传送 XCH 数据交换 这里
  • FeignClient注解中各种属性详解

    一 value name 这两个属性的作用是一样的 如果没有配置url 那么配置的值将作为服务的名称 用于服务的发现 反之只是一个名称 注意 这里写的是你要调用的那个服务的名称 而不是你自己的那个服务的名称 另外 如果同一个工程中出现两个接
  • C语言 IDE的介绍及安装

    目录 C语言 IDE介绍 GCC C Free Code Blocks CLang CLion XCode Dev C Turbo C Visual C 6 0 Visual Studio C语言 IDE安装 安装包 版本选择 注意事项 C
  • 使用VMware给Ubuntu增加磁盘容量

    一般只给虚拟机里面的Ubuntu很少的空间 到了空间不足就尴尬了 那么就扩充磁盘解决问题吧 一 VMware手动扩容 打开虚拟机 选择你要扩充的客户机 点击 编辑虚拟机设置 然后详细设置 选择硬盘 gt 扩展 gt 目标总磁盘大小 不是增量
  • [力扣c++实现] 152. 乘积最大子数组

    152 乘积最大子数组 给你一个整数数组 nums 请你找出数组中乘积最大的非空连续子数组 该子数组中至少包含一个数字 并返回该子数组所对应的乘积 测试用例的答案是一个 32 位 整数 子数组 是数组的连续子序列 示例 1 输入 nums
  • xshell无法连接虚拟机原因Connection failed. Type `help' to learn how to use Xshell prompt.

    问题分析 xshell无法连接的问题有多种 比如虚拟机没有安装ssh服务 虚拟机没有启动ssh服务 又或者是防火墙 禁用端口等问题 这些都比较容易解决 下面我介绍的是我遇到的一种比较难的无法连接情况 VMware无法在Windows下创建适
  • Proxy(代理)服务器

    代理服务器 代理服务器必须有DNS地址 如果开启转发需要在客户端设置DNS地址 NAT 是直接与目标服务器通信的 也就是直接访问的baidu服务器 目标地址是baidu服务器的地址 所以必须要有DNS来解析主机名 如果是通过代理客户端是没有
  • 全球及中国生物技术产业创新发展模式及十四五应用方向研究报告2021-2027年

    全球及中国生物技术产业创新发展模式及十四五应用方向研究报告2021 2027年HS HS HS HS HS HS HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网
  • 交叉编译器简介以及ARM交叉编译器arm-linux-gcc

    一 交叉编译器简介 在一种计算机环境中运行的编译程序 能编译出在另外一种环境下运行的代码 这个编译过程就叫交叉编译 简单地说 就是在一个平台上生成另一个平台上的可执行代码 二 体系结构与操作系统 1 常见的体系结构有ARM结构 x86结构等
  • SPSS异常值处理编程

    SPSS异常值处理编程 异常值是指在数据集中与其他观测值相比明显不同的值 在数据分析过程中 异常值可能会对结果产生不良影响 因此需要进行异常值处理 SPSS作为一种广泛使用的数据分析工具 提供了多种方法来检测和处理异常值 本文将介绍SPSS
  • 【python】UI自动化——鼠标悬浮显示二级菜单相关操作

    一 来个百度示例吧 想要点击如下图的图片 先上代码 import time from selenium import webdriver from selenium webdriver import ActionChains def sta
  • matlab 数据降维和重构_处理不平衡机器学习数据时需要了解的技术

    我们在处理真实世界机器学习数据集时遇到的主要挑战之一是数据的比例不平衡 欺诈检测是这类数据的最好例子 在本文中 我们将使用kaggle中的信用卡欺诈检测数据集 www kaggle com mlg ulb creditcardfraud 在