(文末提供数据集下载)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库的学习初体验

项目概述

  1. 项目概述

    • 这是一个使用ML.NET进行异常检测的C#控制台应用程序,目标是检测欺诈交易。
  2. 数据加载与预处理

    • 使用LoadData方法从CSV文件加载交易数据。
    • 将文本数据转换为数值型特征向量,并构建包含这些特征的数据集。
  3. 模型训练

    • 构建了一个管道,包括特征拼接、归一化和PCA变换。
    • 使用随机化PCA算法进行异常检测模型的训练,设置主成分数量(Rank=28)和过采样率(Oversampling=20)。
  4. 模型评估

    • 在测试数据集上评估模型性能,计算准确率、召回率和其他相关指标。
    • 使用ConsoleHelper.PrintAnomalyDetectionMetrics方法输出评估结果。
  5. 文件处理

    • 通过相对路径获取绝对路径,确保程序能够正确定位数据文件。
    • 解压ZIP文件到指定目录,以便访问和处理数据集。
  6. 参数选择与优化

    • Rank设置为28可能是因为数据中有28个特征,或者基于其他理论选择。
    • Oversampling=20意味着在训练过程中每个样本会被过采样20次,以增强模型的泛化能力。
  7. 数据平衡性处理

    • 在训练数据中使用过滤变换,仅保留标签为0(正常交易)的数据,可能是因为欺诈交易较少,通过减少正常交易的数量来平衡数据集。
    • 也可以考虑其他方法如过采样欺诈交易或使用调整类别权重的方法。
  8. 潜在改进点

    • 实现更复杂的特征工程,例如提取时间序列特征或使用统计聚合特征。
    • 调整PCA参数,进行网格搜索以找到最佳的主成分数量和过采样率。
    • 使用交叉验证评估模型性能,确保模型在不同数据子集上的泛化能力。
  9. 代码实现步骤

    • 编写LoadData方法,读取CSV文件并解析数据字段。
    • 实现特征向量的构建,可能需要将文本类型转换为数值型。
    • 配置和训练模型管道,包括所有必要的变换步骤。
    • 解压数据集到指定目录,并确保程序能够正确访问这些文件。
  10. 运行环境与依赖

    • 确保项目引用了ML.NET库。
    • 安装必要的NuGet包,如Microsoft.MLMicrosoft.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 框架,实现了从数据加载、预处理、模型训练到评估的完整流程。

数据集

数据集下载地址

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

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

相关文章

基于GA-BP遗传算法优化神经网络+NSGAII多目标优化算法的工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GA-BP遗传算法优化神经网络NSGAII多目标优化算法&#xff0c;工艺参数优化、工程设计优化&#xff01;&#xff08;Matlab完整源码和数据&#xff09; 多目标优化是指在优化问题中同时考虑多个目标的优化过程。在多…

1、http介绍

一、HTTP 和 HTTPS 简介 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 用途&#xff1a;用于网页数据传输&#xff08;不加密&#xff09;。协议特性&#xff1a;以明文形式传输数据&#xff0c;默认端口 80&#xff0c;无身份验证和完整性保护。典型场景&#xf…

电商行业的新篇章:3D和AR技术助力销售转化率提升!

3D模型在电商行业的应用十分广泛&#xff0c;其影响深远且意义重大。以下是关于3D模型在电商行业应用的具体分析&#xff1a; 一、提升消费者购物体验与决策效率 三维呈现&#xff1a;通过3D技术&#xff0c;商品可以在电商平台上以三维形式呈现&#xff0c;消费者可以720旋转…

书籍《新能源汽车动力电池安全管理算法设计》和《动力电池管理系统核心算法》脑图笔记

目录 一、阅读背景二、《新能源汽车动力电池安全管理算法设计》脑图笔记三、《动力电池管理系统核心算法》脑图笔记四、后记参考学习 一、阅读背景 如今身处新能源动力电池行业&#xff0c;欲对动力电池相关算法做一些了解&#xff0c;通过查找相关电子书app&#xff0c;最后找…

前端布局与交互实现技巧

前端布局与交互实现技巧 1. 保持盒子在中间位置 在网页设计中&#xff0c;经常需要将某个元素居中显示。以下是一种常见的实现方式&#xff1a; HTML 结构 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><m…

2025年最新版武书连SCD期刊(中国科学引文数据库)来源期刊已更新,可下载PDF版!需要的作者进来了解~

2025年最新版武书连SCD期刊&#xff08;中国科学引文数据库&#xff09;来源期刊已更新&#xff01; 官网是不提供免费查询的。小编给大家两个路径&#xff0c;无需下载PDF&#xff0c;随时随地都能查25版SCD目录。 路径一&#xff1a;中州期刊联盟官网&#xff0c;25版SCD目…

linux 性能60秒分析

linux 60秒分析 需要运行的工具是 1、uptime 2、dmesg | tail 3、vmstat 1 4、mpstat -P ALL 1 5、pidstat 1 6、iostat -xz 1 7、free -m 8、sar -n DEV 1 9、sar -n TCP,ETCP 1 10、topuptime 快速检查平均负载 [rootaaaaaa ~]# uptime15:17:20 up 3 days, 14 min, 7 us…

c++ template-3

第 7 章 按值传递还是按引用传递 从一开始&#xff0c;C就提供了按值传递&#xff08;call-by-value&#xff09;和按引用传递&#xff08;call-by-reference&#xff09;两种参数传递方式&#xff0c;但是具体该怎么选择&#xff0c;有时并不容易确定&#xff1a;通常对复杂类…

unity碰撞的监测和监听

1.创建一个地面 2.去资源商店下载一个火焰素材 3.把procedural fire导入到自己的项目包管理器中 4.给magic fire 0 挂在碰撞组件Rigidbody , Sphere Collider 5.创建脚本test 并挂在magic fire 0 脚本代码 using System.Collections; using System.Collections.Generic; usi…

CLion2024.3.2版中引入vector头文件报错

报错如下&#xff1a; 在MacBook端的CLion中引入#include <vector>报 vector file not found&#xff08;引入map、set等也看参考此方案&#xff09;&#xff0c;首先可以在Settings -> Build,Execution,Deployment -> Toolchains中修改C compiler和C compiler的路…

viem库

viem是一个用于和以太坊进行交互的javascript库&#xff0c;它提供了简单的API进行智能合约的读取和写入操作&#xff0c;你可以使用它来与区块链上智能合约进行交互&#xff0c;查询链上数据等。 基本功能 1&#xff0c;创建公有客户端 createPublicClient 可以创建一个链接…

常用数据结构之String字符串

字符串 在Java编程语言中&#xff0c;字符可以使用基本数据类型char来保存&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 操作字符串常用的有三种类&#xff1a;String、StringBuilder、StringBuffer 接下来看看这三类常见用…

64【32与64位程序的区别】

很多人可能有一个观念&#xff0c;那就是64位的程序NB&#xff0c;有技术含量&#xff0c;但是要说nb在哪&#xff0c;很多人又说不上来&#xff0c;本节来对这个问题做一个探讨 下图中左边的是加载的64程序&#xff0c;右边的是32位程序&#xff0c; 在上一节课我们已经理解…

PHP 完整表单实例

PHP 完整表单实例 引言 表单是网站与用户交互的重要方式&#xff0c;尤其是在收集用户输入数据时。PHP 作为一种流行的服务器端脚本语言&#xff0c;在处理表单数据方面具有强大的功能。本文将提供一个完整的 PHP 表单实例&#xff0c;涵盖表单创建、数据收集、验证和存储等关…

从 Facebook 到元宇宙:社交网络的技术进化与前景

引言 社交网络的演变不仅仅是技术进步的体现&#xff0c;更是人类沟通方式革命的缩影。从 Facebook 的诞生到元宇宙的兴起&#xff0c;我们见证了社交互动从简单的信息交换到沉浸式虚拟体验的转变。本文将探讨这一技术演进的历程&#xff0c;并展望社交网络在元宇宙时代的新形…

响应式编程库(三) -r2dbc

r2dbc整合 什么是r2dbc版本选择简单试用整合springbootDatabaseClient 进行查询使用Repository接口(对应mapper)实体类复杂查询&#xff08;一对一&#xff09;实体类转换器测试代码一对多关系 什么是r2dbc 反应式关系数据库连接&#xff08;R2DBC&#xff09;项目为关系数据库…

stm32电机驱动模块

电机驱动模块是智能车等电子设备中用于驱动电机运转的重要部件&#xff0c;它能将微控制器输出的控制信号转换为足够的功率和电流来驱动电机。以下为你详细介绍电机驱动模块的相关信息&#xff1a; 常见类型 1. L298N 电机驱动模块 特点 高电压、大电流驱动能力&#xff1a;能…

后台管理系统网页开发

CSS样式代码 /* 后台管理系统样式文件 */ #container{ width:100%; height:100%; /* background-color:antiquewhite;*/ display:flex;} /* 左侧导航区域:宽度300px*/ .left{ width:300px; height: 100%; background-color:#203453; display:flex; flex-direction:column; jus…

SpringBoot3与MyBatis-Plus

4.1 介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个基于 MyBatis 的增强工具&#xff0c;提供通用 CRUD 操作、代码生成器、条件构造器、分页插件等功能&#xff0c;简化开发流程&#xff0c;提升效率。 4.2 特点 无侵入&#xff1a;只做增强不做修改&#xff0c;与…

【Spring相关知识】Spring应用如何优雅使用消息队列

文章目录 概述**核心概念****使用场景****快速入门**1. 添加依赖2. 配置 Binder3. 定义消息通道4. 发送和接收消息5. 运行应用 **高级特性****优点****适用场景** 概述 Spring Cloud Stream 是一个用于构建消息驱动微服务的框架&#xff0c;它基于 Spring Boot 和 Spring Inte…