(文末提供数据集下载)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 框架,实现了从数据加载、预处理、模型训练到评估的完整流程。

数据集

数据集下载地址

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库系统概论的第六版与第五版的区别,附pdf

我用夸克网盘分享了「数据库系统概论第五六版资源」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quark.cn/s/21a278378dee 第6版教材修订的主要内容 为了保持科学性、先进性和实用性&#xff0c;在第5版教材基础上对全书内容进行了修改、更新和充实。 在科…

简单说一下CAP理论和Base理论

CAP理论 什么是CAP 一致性 可用性 分区容错性&#xff1a;系统如果不能再时限内达成数据一致性&#xff0c;就说明发生了分区的情况 然后当前操作在C和A之间做出选择 例如我的网络出现问题了&#xff0c;但是我们的系统不能因为网络问题就直接崩溃 只要我们的分布式系统没…

网络工程师 (22)网络协议

前言 网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合&#xff0c;它规定了通信时信息必须采用的格式和这些格式的意义。 一、基本要素 语法&#xff1a;规定信息格式&#xff0c;包括数据及控制信息的格式、编码及信号电平等。这是协议的基础&#xff0c;确…

Linux网络 | 理解NATPT, 数据链路层Done

前言&#xff1a;本节内容结束数据链路层&#xff0c; 本节的重要内容有两个&#xff1a;一个是见一个综合性面试题&#xff0c;另一个就是NAT技术NATPT。 那么废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01;&#xff01; ps&#xff1a;最好先看一下上一篇…

Linux/C高级(精讲)----shell结构语句、shell数组

shell脚本 功能性语句 test 可测试对象三种&#xff1a;字符串 整数 文件属性 每种测试对象都有若干测试操作符 1&#xff09;字符串的测试&#xff1a; s1 s2 测试两个字符串的内容是否完全一样 s1 ! s2 测试两个字符串的内容是否有差异 -z s1 测试s1 字符串的长度是…

DeepSeek本地部署并提供远程连接(小白教程)

文章目录 一、DeepSeek介绍二、为什么要本地部署三、本地部署教程1.安装Ollama2.下载部署DeepSeek模型3.安装Chatbox可视化工具4.非局域网远程连接 四、DeepSeek官方开放平台API对接 参考资料&#xff1a;DeepSeek本地搭建部署详细图文教程 - 搬主题 一、DeepSeek介绍 DeepSeek…

足球俱乐部管理系统的设计与实现

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 足…

Star300+ 开源项目Developer-RoadMap 计算机各领域学习路线图集大成者

一、开发者的“成长宝典”来了 你是否在编程的海洋中迷茫&#xff0c;不知该驶向何方&#xff1f;你是否渴望一份清晰的指南&#xff0c;引领你在开发者的道路上稳步前行&#xff1f;今天&#xff0c;就为大家带来一份堪称“成长宝典”的开源项目: https://github.com/kamran…

链表和 list

一、单链表的模拟实现 1.实现方式 链表的实现方式分为动态实现和静态实现两种。 动态实现是通过 new 申请结点&#xff0c;然后通过 delete 释放结点的形式构造链表。这种实现方式最能体 现链表的特性&#xff1b; 静态实现是利用两个数组配合来模拟链表。一个表示数据域&am…

C语言switch case语句详解(非常详细)

在C语言中&#xff0c;switch case 语句是一种多分支选择结构&#xff0c;用于根据变量的值执行不同的代码块。 相比于if else语句&#xff0c;switch case在处理多个固定值的条件判断时更加简洁和高效。本文将详细讲解switch case语句的用法、语法格式、实例代码、注意事项&a…

DeepSeek本地部署

前言 蛇年过年前&#xff0c;国产大模型 DeepSeek以更高的效率、更低的计算成本火爆国内外&#xff0c;成为现象级AI&#xff0c;但由于访问人数过多经常频繁出现反应迟缓甚至是宕机的情况。 但万幸的是&#xff0c;DeepSeek 是一个开源模型&#xff0c;我们可以通过本地部署…

springboot简单应用

快速开发Springboot项目实现简单的增删改查&#xff0c;前期需要准备&#xff1a;idea与postman安装 Maven&#xff0c;MySQL&#xff08;8&#xff09;&#xff0c;JDK(21) 目录 前言 springboot 使用3.0版本&#xff0c;JDK使用21,MySQL使用8版本 开发环境IDEA使用2024版本 …

tomcat核心组件及原理概述

目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…

【Linux】24.进程间通信(3)

文章目录 3.6 systemv共享内存3.6.1 共享内存函数3.6.3 一个简单的共享内存代码实现3.6.4 一个复杂的共享内存代码实现3.6.4 key和shmid的主要区别: 3.7 systemv消息队列&#xff08;了解&#xff09;3.8 systemv信号量&#xff08;了解&#xff09;进程互斥四个问题理解信号量…

115,【7】 攻防世界 web fileinclude

进入靶场 试着访问了几个文件&#xff0c;都没得到信息&#xff0c;f12看看源码 还真有 <?php // 检查是否开启了错误显示功能 // ini_get 函数用于获取 PHP 配置选项的值&#xff0c;这里检查 display_errors 选项是否开启 if( !ini_get(display_errors) ) {// 如果错误…

深入理解Java引用传递

先看一段代码&#xff1a; public static void add(String a) {a "new";System.out.println("add: " a); // 输出内容&#xff1a;add: new}public static void main(String[] args) {String a null;add(a);System.out.println("main: " a);…

langchain教程-7.Embedding/文本向量化

前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…

Mac下使用brew安装go 以及遇到的问题

首先按照网上找到的命令进行安装 brew install go 打开终端输入go version&#xff0c;查看安装的go版本 go version 配置环境变量 查看go的环境变量配置&#xff1a; go env 事实上安装好后的go已经可以使用了。 在home/go下新建src/hello目录&#xff0c;在该目录中新建…

Ubuntu部署Deepseek-R1模型(8b)

安装ubuntu系统 本机电脑系统ubuntu-20.04 #升级软件 sudo apt-get update#安装curl sudo apt-get install curl通过以上两条指令&#xff0c;完成了curl命令的安装。 安装ollama 打开Ollama官网 选择Linux&#xff0c; 给出如上图方框所示的一条指令 curl -fsSL https:…

【ROS视频推流】使用web_video_server完成视频推流

&#x1f680; 本文简要介绍一下使用web_video_server功能包完成实时视频推流的方法。 假设有A,B两个设备&#xff0c;它们之间可以ping通。我们需要将A设备上的实时摄像头图像推流并在B设备的浏览器上显示。 &#x1f314;01准备工作 # A设备 # 下载视频推流功能包 #&#xff…