C# (.NET) 机器学习:ML.NET、Accord.NET、TensorFlow.NET 库概览

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 机器学习:关键库概览

尽管 Python 传统上被认为是机器学习的主要语言,但 C# (.NET) 生态系统也提供了强大且成熟的工具来构建 ML 模型。如果您的基础设施基于 Microsoft 技术栈,或者您偏好静态类型和高性能,.NET 库将帮助您在不更换技术栈的情况下引入人工智能。在本文中,我们将介绍三个主要库:ML.NET、Accord.NET 和 TensorFlow.NET,并提供实用的代码示例。



1. ML.NET — 微软官方库

ML.NET 是一个跨平台的开源机器学习库,专为 .NET 开发者设计。它允许您将 ML 集成到应用程序中,而无需学习 Python 或 R。ML.NET 支持分类、回归、聚类、排序、异常检测,甚至通过集成 ONNX 和 TensorFlow 支持深度学习。



关键特性:

  • 用于数据准备的内置转换器(归一化、编码、连接)。
  • 通过 AutoML.NET 实现自动模型选择 (AutoML)。
  • 将模型导出为 ONNX 格式,以便在其他平台上使用。
  • 通过 IDataView 支持大数据训练。


示例:二元评论分类(情感分析)

using Microsoft.ML;using Microsoft.ML.Data;

public class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}

public class SentimentPrediction{ public bool PredictedLabel { get; set; } public float Probability { get; set; }}

// 加载数据并训练var context = new MLContext();var data = context.Data.LoadFromTextFile<SentimentData>("data.csv", separatorChar: ',');var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text)) .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());var model = pipeline.Fit(data);

// 预测var predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var prediction = predictionEngine.Predict(new SentimentData { Text = "This product is amazing!" });Console.WriteLine($"Positive: {prediction.PredictedLabel}, Confidence: {prediction.Probability:P}");

这段代码展示了如何用几行代码在 CSV 文件上训练模型并进行预测。ML.NET 会自动处理数据类型并创建管道。



2. Accord.NET — 经典科学计算框架

Accord.NET 是一组用于信号处理、统计和机器学习的库。它包含 40 多种算法:从 SVM 和神经网络到隐马尔可夫模型。该库自 2010 年以来在学术界和工业界得到广泛应用。与 ML.NET 不同,Accord.NET 提供对算法的更低级别控制。



关键特性:

  • 广泛的分类器选择:KNN、NaiveBayes、RandomForest、SVM。
  • 内置预处理方法:PCA、LDA、归一化。
  • 支持神经网络(深度学习工具包)。
  • 与 Math.NET 集成,用于复杂数学运算。


示例:使用 KNN 对鸢尾花数据集进行分类

using Accord.MachineLearning;using Accord.MachineLearning.VectorMachines;using Accord.Statistics.Analysis;

// 加载数据(经典 Iris 数据集)double[][] inputs = new double[][]{ new double[] { 5.1, 3.5, 1.4, 0.2 }, new double[] { 4.9, 3.0, 1.4, 0.2 }, // ... 其余

推荐