ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练
文章目录
- (文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练
- 目标
- 项目概述
- 代码结构概述
- 1. **主要类和文件**
- 2. **命名空间和使用指令**
- 3. **数据类 (`TransactionObservation`)**
- 4. **主程序入口 (`Main` 方法)**
- 5. **数据预处理 (`DataPreprocessing` 方法)**
- 6. **模型训练 (`TrainModel` 方法)**
- 7. **模型评估 (`EvaluateModel` 方法)**
- 8. **文件操作 (`FileHandling` 方法)**
- 代码功能详解
- **1. 数据加载与预处理**
- **2. 模型训练**
- **3. 模型评估**
- **4. 文件操作**
- 代码依赖
- 示例用法
- **数据文件 (`transaction_data.txt)`**
- **运行程序**
- 输出结果
- 代码优势
- 总结
- 数据集
(文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练
目标
-
AnomalyDetectCreditCardFraudDetection.Solution
-
CreditCardFraudDetection.Trainer
-
学习知识点:PCA、表格数据的预处理方法、模型训练步骤;ML库的学习初体验
项目概述
-
项目概述:
- 这是一个使用ML.NET进行异常检测的C#控制台应用程序,目标是检测欺诈交易。
-
数据加载与预处理:
- 使用
LoadData
方法从CSV文件加载交易数据。 - 将文本数据转换为数值型特征向量,并构建包含这些特征的数据集。
- 使用
-
模型训练:
- 构建了一个管道,包括特征拼接、归一化和PCA变换。
- 使用随机化PCA算法进行异常检测模型的训练,设置主成分数量(Rank=28)和过采样率(Oversampling=20)。
-
模型评估:
- 在测试数据集上评估模型性能,计算准确率、召回率和其他相关指标。
- 使用
ConsoleHelper.PrintAnomalyDetectionMetrics
方法输出评估结果。
-
文件处理:
- 通过相对路径获取绝对路径,确保程序能够正确定位数据文件。
- 解压ZIP文件到指定目录,以便访问和处理数据集。
-
参数选择与优化:
- Rank设置为28可能是因为数据中有28个特征,或者基于其他理论选择。
- Oversampling=20意味着在训练过程中每个样本会被过采样20次,以增强模型的泛化能力。
-
数据平衡性处理:
- 在训练数据中使用过滤变换,仅保留标签为0(正常交易)的数据,可能是因为欺诈交易较少,通过减少正常交易的数量来平衡数据集。
- 也可以考虑其他方法如过采样欺诈交易或使用调整类别权重的方法。
-
潜在改进点:
- 实现更复杂的特征工程,例如提取时间序列特征或使用统计聚合特征。
- 调整PCA参数,进行网格搜索以找到最佳的主成分数量和过采样率。
- 使用交叉验证评估模型性能,确保模型在不同数据子集上的泛化能力。
-
代码实现步骤:
- 编写
LoadData
方法,读取CSV文件并解析数据字段。 - 实现特征向量的构建,可能需要将文本类型转换为数值型。
- 配置和训练模型管道,包括所有必要的变换步骤。
- 解压数据集到指定目录,并确保程序能够正确访问这些文件。
- 编写
-
运行环境与依赖:
- 确保项目引用了ML.NET库。
- 安装必要的NuGet包,如
Microsoft.ML
和Microsoft.ML.Transforms
.
通过以上步骤,可以全面理解并实现这个欺诈交易检测系统。
代码结构概述
1. 主要类和文件
Program.cs
: 包含主程序入口,数据处理逻辑,模型训练和评估。
2. 命名空间和使用指令
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Transforms;
using Microsoft.ML.AnomalyDetection;
using System;
using System.Collections.Generic;
using System.IO;
3. 数据类 (TransactionObservation
)
定义了事务观测的结构,包含以下字段:
Id
: 事务ID。Features
: 特征向量(长度为28)。Label
: 标签(0表示正常,1表示异常)。
public class TransactionObservation : ITransformableTo<RowItem>
{public float[] Features;public float Label;public void PrintToConsole(){Console.WriteLine($"ID: {Id}, Label: {(Label == 1 ? "Fraud" : "Not Fraud")}");// 打印特征向量Console.WriteLine($"Features: [{string.Join(", ", Features)}]");Console.WriteLine();}
}
4. 主程序入口 (Main
方法)
public static void Main(string[] args)
{var mlContext = new MLContext();// 加载数据集IDataView data = mlContext.Data.LoadFromTextFile<TransactionObservation>(@"data\transaction_data.txt",separatorChar: '\t',useHeader: true);// 数据预处理和训练ITransformer model = TrainModel(mlContext, data);// 评估模型EvaluateModel(mlContext, model, data);
}
5. 数据预处理 (DataPreprocessing
方法)
private static ITransformer PreprocessData(MLContext mlContext, IDataView data)
{var preprocessPipeline = mlContext.Transforms.Concatenate("Features", new[] { nameof(TransactionObservation.Features) }).Append(mlContext.Transforms.NormalizeLpNorm(outputColumnName: "NormalizedFeatures",inputColumnName: "Features"));return preprocessPipeline;
}
6. 模型训练 (TrainModel
方法)
private static ITransformer TrainModel(MLContext mlContext, IDataView data)
{var options = new RandomizedPcaTrainer.Options{FeatureColumnName = "NormalizedFeatures",Rank = 28,Oversampling = 20,EnsureZeroMean = true,Seed = 1};IEstimator<ITransformer> trainer = mlContext.AnomalyDetection.Trainers.RandomizedPca(options);var trainingPipeline = preprocessPipeline.Append(trainer);return trainingPipeline.Fit(data);
}
7. 模型评估 (EvaluateModel
方法)
private static void EvaluateModel(MLContext mlContext, ITransformer model, IDataView testData)
{var predictions = model.Transform(testData);AnomalyDetectionMetrics metrics = mlContext.AnomalyDetection.Evaluate(predictions);Console.WriteLine("Precision: {0}", metrics.Precision);Console.WriteLine("Recall: {0}", metrics.Recall);Console.WriteLine("F1-Score: {0}", metrics.F1Score);
}
8. 文件操作 (FileHandling
方法)
private static string GetAbsolutePath(string relativePath)
{FileInfo _dataRoot = new FileInfo(typeof(Program).Assembly.Location);string assemblyFolderPath = _dataRoot.Directory.FullName;return Path.Combine(assemblyFolderPath, relativePath);
}private static void UnZipDataSet(string zipDataSet, string destinationFile)
{if (!File.Exists(destinationFile)){ZipFile.ExtractToDirectory(zipDataSet, Path.GetDirectoryName(destinationFile));}
}
代码功能详解
1. 数据加载与预处理
- 数据加载: 使用
MLContext.Data.LoadFromTextFile
方法从文件加载事务数据。 - 数据预处理: 包括特征向量拼接和归一化处理,确保模型输入格式一致。
2. 模型训练
- PCA异常检测器: 使用随机化 PCA 算法进行异常检测,设置参数如主成分数量、过采样率等。
- 模型拟合: 通过
Fit
方法在预处理后的数据上训练模型。
3. 模型评估
- 预测与评估: 在测试数据上应用训练好的模型,并使用
AnomalyDetectionMetrics
计算精度、召回率和 F1 分数等指标。
4. 文件操作
- 路径获取: 使用反射获取程序集目录,构造绝对路径。
- 文件解压: 解压事务数据文件到指定位置。
代码依赖
- Microsoft.ML 包: 需要安装
Microsoft.ML
和相关组件包(如Microsoft.ML.AnomalyDetection
)。 - 文本文件格式: 数据文件应为制表符分隔的文本文件,包含标题行。
示例用法
数据文件 (transaction_data.txt)
Id Features Label
1 0.5,0.6,...,0.3 0
2 0.7,0.8,...,0.4 1
...
运行程序
dotnet run --project ./AnomalyDetection.csproj
输出结果
模型训练完成后,将在控制台输出以下信息:
- 训练完成: 显示训练耗时。
- 评估结果: 显示 Precision、Recall 和 F1-Score。
代码优势
- 高效处理: 使用 ML.NET 进行高效的机器学习任务处理。
- 模块化设计: 代码结构清晰,功能模块独立,便于扩展和维护。
- 易用性: 提供了完整的文件操作和数据预处理逻辑,方便用户直接使用。
总结
该代码实现了一个基于随机化 PCA 的异常检测系统,适用于金融事务等场景中的欺诈 detection。通过 ML.NET 框架,实现了从数据加载、预处理、模型训练到评估的完整流程。
数据集
数据集下载地址
相关文章:
ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练
文章目录 (文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练目标项目概述代码结构概述1. **主要类和文件**2. **命名空间和使用指令**3. **数据类 (TransactionObservation)**4. **主程序入口 (Main 方法)**5. **数据预处理 (DataPrepr…...
【华为OD机考】华为OD笔试真题解析(1)--AI处理器组合
一、题目描述 某公司研发了一款高性能AI处理器,每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。 编号0~3的处理器处于同一链路中,编号4~7的处理器处于另外一个链路中,不同链路中的处理器不能通信,如…...

edu小程序挖掘严重支付逻辑漏洞
edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号,直接搜索引擎搜索即可得到,这就不用多说了,但是这里的手机号可以任意输入,只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…...
力扣 279. 完全平方数
🔗 https://leetcode.cn/problems/perfect-squares 题目 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量完全平方数可以拆解为两个相同数的乘积 思路 dp 公式,就是从看用哪个完全平方数 1 2 4 9…… 到当前 sum 的数量最少 代码 …...
鸿蒙生态潮起:开发者的逐浪之旅
鸿蒙生态潮起:开发者的逐浪之旅 在全球科技的澎湃浪潮中,鸿蒙生态宛如一座正在崛起的新大陆,熠熠生辉,吸引着无数开发者扬帆起航,探寻其中蕴藏的无限机遇,也直面诸多挑战。 鸿蒙生态的机遇,首先…...

Diskgenius系统迁移之后无法使用USB启动
前言 本文用于记录系统迁移中遇到的问题及解决方法,如有不对请指出,谢谢! 现象 使用DiskGenius进行系统迁移后,使用USB启动失败,反复在品牌logo和黑屏之间切换,期间还会在左上角显示”reset system“报错…...

Kafka 可靠性探究—副本刨析
Kafka 的多副本机制提升了数据容灾能力。 副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据;服务副本指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理。 1 副本刨析 1.1 相关概念 AR&…...

我的博文天地测试报告
我的博文天地测试报告 文章目录 我的博文天地测试报告 一.项目背景 二.项目功能 2.1 功能介绍 三.测试分类 3.1 功能测试 3.1.1 测试用例 3.1.2 实际执行测试的部分操作步骤/结果的截图 3.2 自动化测试 3.3 性能测试 3.1.2 用户登录 jmeter性能测试结果 性能测试遇到的困难 …...
EtherCAT主站IGH-- 35 -- IGH之pdo_list.h/c文件解析
EtherCAT主站IGH-- 35 -- IGH之pdo_list.h/c文件解析 0 预览一 该文件功能`pdo_list.c` 文件功能函数预览二 函数功能介绍`pdo_list.c` 中主要函数的作用1. `ec_pdo_list_init`2. `ec_pdo_list_clear`3. `ec_pdo_list_clear_pdos`4. `ec_pdo_list_total_size`5. `ec_pdo_list_a…...

嵌入式开发神器:Buildroot的介绍和使用方法
目录 引言**Buildroot 能做什么?****1. 生成交叉编译工具链(Toolchain)****2. 生成嵌入式 Linux 根文件系统(RootFS)****3. 编译 Linux 内核和设备树文件****4. 编译 Bootloader(U-Boot)****5. …...
JavaScript系列(61)--边缘计算应用开发详解
JavaScript边缘计算应用开发详解 🌐 今天,让我们深入探讨JavaScript的边缘计算应用开发。边缘计算是一种将计算和数据存储分布到更靠近数据源的位置的架构模式,它能够提供更低的延迟和更好的实时性能。 边缘计算基础架构 🌟 &am…...

【LeetCode】day15 142.环形链表II
142. 环形链表 II - 力扣(LeetCode) 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则…...
代理对象与目标对象
1. 定义:代理对象和目标对象 1.1 目标对象(Target Object) 目标对象是指 被增强的原始对象,即需要通过 AOP 切面(Aspect)增强功能的业务对象(原始类)。增强逻辑(Advice…...

【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信
引言 我们之前了解了在不同场景下,Kubernetes中Pod之间的通信是如何路由的。 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信现在,我们来看看在集群中,Pod与服务之间的通信是如何…...

DNN(深度神经网络)近似 Lyapunov 函数
import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt # from torchviz import make_dot import torchviz# 1. Lyapunov 函数近似器(MLP 结构) class LyapunovNet(nn.Module):def __init__(self, input_dim…...

128陷阱
首先我们了解一下关于包装器类型 java是面向对象的语言,但基本类型并不是面向对象的,从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将…...
PromptSource和LangChain哪个更好
目录 1. 设计目标与定位 PromptSource LangChain 2. 功能对比 3. 优缺点分析 PromptSource LangChain 4. 如何选择? 5. 总结 PromptSource 和 LangChain 是两个在自然语言处理(NLP)领域非常有用的工具,但它们的设计目标和…...
构成正方形的数量:算法深度剖析与实践
目录 引言算法核心概念 定义正方形的构成条件数据结构与输入形式算法数学原理 几何关系的数学表达坐标运算与判定逻辑Python 实现 代码展示代码解析Python 实现的优势与局限C 语言实现 代码展示代码解析C 语言实现的性能特点性能分析与优化 性能分析 时间复杂度空间复杂度优化思…...
Redis持久化-秒杀系统设计
在构建高性能、高可用的系统时,Redis 作为缓存和消息队列的角色越来越重要。在一些场景下,我们还需要将 Redis 的数据进行持久化,以确保数据的安全性和恢复能力。除此之外,秒杀系统也越来越成为电商、抢购等平台的核心功能之一。本…...

音视频入门基础:RTP专题(8)——使用Wireshark分析RTP
一、引言 通过Wireshark可以抓取RTP数据包,该软件可以从Wireshark Go Deep 下载。 二、通过Wireshark抓取RTP数据包 首先通过FFmpeg将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec copy -an -f rtp …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...