C# 机器学习:功能、局限与代码示例

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

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

开始课程

介绍:机器学习世界中的 C#

机器学习(ML)世界与 Python 紧密相关:TensorFlow、PyTorch、scikit-learn——这些都是数据科学家(data scientist)的基本工具。然而,.NET 生态系统和 C# 语言提供了一条替代路径。微软的 ML.NET 平台允许将 ML 直接集成到 C# 业务应用程序中,而无需将代码重写为 Python。但这有多实用呢?在本文中,我们将分析实际能力、限制,并用 C# 编写可运行的机器学习代码。

在 pythonlib.ru

ML.NET 的关键能力:C# 能做什么?

ML.NET 是一个跨平台的开源库。它支持经典算法:回归、分类、聚类,以及通过集成 TensorFlow 和 ONNX 实现深度学习。



1. 文本分类(情感分析 Sentiment Analysis)

最流行的例子是情感分析。ML.NET 允许在 C# 中训练模型,而无需调用外部脚本。

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

// 1. 定义数据模式public class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}

public class SentimentPrediction{ [ColumnName("PredictedLabel")] public bool Prediction { get; set; } public float Probability { get; set; }}

// 2. 加载数据并训练模型var context = new MLContext();IDataView data = context.Data.LoadFromTextFile<SentimentData>("data.tsv", separatorChar: '\\t');

var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text)) .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());

var model = pipeline.Fit(data);

// 3. 进行预测var predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var result = predictionEngine.Predict(new SentimentData { Text = "C# is great for ML!" });Console.WriteLine($"Sentiment: {(result.Prediction ? "Positive" : "Negative")}");

这段代码完全自包含。你不需要 Python,不需要对外部服务的 REST 请求。一切都在一个 .NET 进程内运行。



2. 与 TensorFlow 和 ONNX 集成

如果你需要神经网络(例如,用于图像识别),ML.NET 可以加载预训练的 TensorFlow 或 ONNX 模型,并将其用于推理(inference)。

var pipeline = context.Transforms.LoadImages("Image", folder, "ImagePath")    .Append(context.Transforms.ResizeImages("Image", 224, 224))    .Append(context.Transforms.ExtractPixels("Input", "Image"))    .Append(modelTensorFlow);

var prediction = pipeline.Fit(data).CreatePredictionEngine<ImageData, ImagePrediction>(data);var result = prediction.Predict(new ImageData { ImagePath = "cat.jpg" });

一个重要细节:在 C# 中训练复杂的神经网络目前还不可能——为此需要使用 Python。但加载和使用现成模型是 100% 可行的方案。



C# 用于 ML 的局限性:为什么 Python 仍然更好?

尽管有诸多优点,C# 在几个关键方面不如 Python。



1. 社区和库的规模

用于 ML 的 NuGet 包数量比 PyPI 少数百倍。如果你需要一些非常规的东西(例如,2024 年论文中的新算法),很可能只有 Python 才有。ML.NET 每季度更新一次,而 scikit-learn 和 PyTorch 几乎是持续更新。



2. 模型训练(Training)

ML.NET 在处理表格数据任务(回归、分类)方面表现出色。但对于

博客

书籍推荐