C# 用于机器学习:功能、限制及初学者示例

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

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

开始课程

引言:为什么选择 C# 进行机器学习?

机器学习(ML)的世界传统上与 Python 联系在一起。然而,C# 生态系统和 .NET 平台提供了强大的替代方案,特别是对于已经在该环境中工作的开发者而言。如果你熟悉 C# 并希望将你的技能应用于 ML,那么本文就是为你准备的。

我们将探讨关键库、C# 在 ML 背景下的优势和劣势,并提供实用的代码示例。你将了解何时 C# 可能是最佳选择,以及何时应该转向 Python。



C# 机器学习的主要库

.NET 生态系统正在积极向 ML 方向发展。以下是每个初学者都应该了解的三个主要工具。



1. ML.NET — 微软的原生库

ML.NET 是一个跨平台、开源且免费的 .NET 机器学习库。它允许你在不离开 C# 生态系统的情况下将 ML 添加到应用程序中。

主要功能:

  • 分类(例如,检测邮件中的垃圾邮件)
  • 回归(价格预测)
  • 聚类(客户细分)
  • 排序与推荐
  • 异常检测
  • 图像处理(迁移学习)

示例:一个简单的文本情感分类模型。

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", "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 = "C# 用于 ML — 太棒了!" });Console.WriteLine($"情感: {(prediction.PredictedLabel ? "正面" : "负面")}");


2. TensorFlow.NET — 通往 TensorFlow 的桥梁

TensorFlow.NET (TF.NET) 提供了对流行框架 Google TensorFlow 的绑定。这使得你可以从 C# 中使用 TensorFlow 的所有功能(神经网络、深度学习)。

优势:

  • 访问预训练模型(例如,用于图像识别)
  • 支持微调(fine-tuning)
  • 在 GPU 上具有高性能

示例:加载用于图像分类的预训练模型。

using Tensorflow;using static Tensorflow.Binding;

// 加载 Inception 模型(假设模型文件在文件夹中)var graph = new Graph().as_default();graph.Import("inception_v3.pb");

var session = new Session(graph);var tensor = ImageUtil.CreateTensorFromImageFile("cat.jpg");var output = session.run(outputs: graph.OperationByName("output"), inputs: graph.OperationByName("input"), inputTensors: new[] { tensor });Console.WriteLine($"预测类别: {output[0].argmax()}");


3. Accord.NET 和 SciSharp 栈

Accord.NET 是一个较老但仍然有用的库,提供了广泛的算法(SVM、神经网络、统计)。SciSharp 是一个社区,致力于将流行的 Python 库(NumPy、Pandas、Scikit-learn)移植到 C#。

对于初学者开发者,我们建议从 ML.NET 开始,因为它与 .NET 生态系统集成度最高,并且拥有出色的

博客

书籍推荐