黄页 网站模板,手机营销型网站制作,深圳建设银行分行网站,开发公司质量安全科职责文章目录 (文末提供数据集下载)ML.NET库学习001#xff1a;基于PCA的信用卡异常检查之样本处理与训练目标项目概述代码结构概述1. **主要类和文件**2. **命名空间和使用指令**3. **数据类 (TransactionObservation)**4. **主程序入口 (Main 方法)**5. **数据预处理 (DataPrepr… 文章目录 (文末提供数据集下载)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算法进行异常检测模型的训练设置主成分数量Rank28和过采样率Oversampling20。 模型评估 在测试数据集上评估模型性能计算准确率、召回率和其他相关指标。使用ConsoleHelper.PrintAnomalyDetectionMetrics方法输出评估结果。 文件处理 通过相对路径获取绝对路径确保程序能够正确定位数据文件。解压ZIP文件到指定目录以便访问和处理数据集。 参数选择与优化 Rank设置为28可能是因为数据中有28个特征或者基于其他理论选择。Oversampling20意味着在训练过程中每个样本会被过采样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 : ITransformableToRowItem
{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.LoadFromTextFileTransactionObservation(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};IEstimatorITransformer 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 框架实现了从数据加载、预处理、模型训练到评估的完整流程。
数据集
数据集下载地址