dotnet add package Microsoft.ML
///////////////////////////////////////////
- scikit-learn ≈ ML.NET(侧重传统机器学习:分类、回归、聚类、管道/预处理、模型持久化)。
- 深度学习对等物是 TensorFlow 或 PyTorch(ML.NET 通过 Microsoft.ML.TensorFlow / ONNX 支持推理)。
- 数据处理:pandas 常用于 Python,功能上和 ML.NET 的 IDataView 用途相近(注意 IDataView 是列式/延迟的)。
- AutoML:auto-sklearn / TPOT 类似于 Microsoft.ML.AutoML。AutoML 是机器学习中一个相对较新的领域,它主要将机器学习中所有耗时过程自动化,如数据预处理、最佳算法选择、超参数调整等,这样可节约大量时间在建立机器学习模型过程中。
- 互操作:两边常用 ONNX 作为模型交换格式。 ////////////////////////////////////////////////////////////////
ML.NET 是微软提供的一个开源、跨平台的机器学习框架,专为 .NET 生态(C#/F#/.NET Core/.NET)设计并以 NuGet 包形式分发。简要要点:
- 定位:在 .NET 应用中训练、评估并部署机器学习模型(无需离开 .NET 语言栈)。
- 支持任务:分类、回归、聚类、异常检测、推荐、排序、时间序列预测、以及通过 ONNX/TensorFlow 做图像/文本/深度学习推理。
- 核心概念:
MLContext:入口上下文。IDataView:高效的列式数据管道(类似 DataFrame,但延迟/流式)。- Estimator / Transformer:以管道方式构建数据转换与训练流程,使用
Fit()/Transform()。 - 模型保存/加载:
mlContext.Model.Save/Load。 PredictionEngine<TSrc,TDest>:单次预测(注意线程安全问题,生产可使用PredictionEnginePool)。
- 常见 NuGet 包:
Microsoft.ML、Microsoft.ML.Data、Microsoft.ML.LightGBM、Microsoft.ML.TensorFlow、Microsoft.ML.OnnxTransformer、Microsoft.ML.AutoML等。 - 工具与生态:Visual Studio 的 Model Builder、ML.NET CLI、AutoML 帮助快速生成模型。
- 适用场景:想在 .NET 项目里直接集成 ML 功能(轻/中量级模型、企业应用、嵌入式预测服务)。对于大规模深度学习训练,通常结合专用框架并通过 ONNX/TensorFlow 导入推理模型。
快速开始(安装 + 最小示例):
- 安装:
dotnet add package Microsoft.ML - 最小示例(概念):
var ml = new MLContext();
var data = ml.Data.LoadFromTextFile<MyData>("data.csv", hasHeader:true, separatorChar:',');
var pipeline = ml.Transforms.Concatenate("Features", "Feature1","Feature2")
.Append(ml.BinaryClassification.Trainers.SdcaLogisticRegression());
var model = pipeline.Fit(data);
GitHub Copilot
简短说明这段代码在做什么:
-
var ml = new MLContext();
创建 ML.NET 的运行上下文,后续所有操作(加载数据、构建管道、训练、评估)都通过它来协调。 -
var data = ml.Data.LoadFromTextFile<MyData>("data.csv", hasHeader:true, separatorChar:',');
从 CSV 文件读入数据,返回一个延迟、列式的IDataView。MyData是用户定义的 POCO 类,用于映射 CSV 列(例如public float Feature1 {get;set;}、public float Feature2 {get;set;}、public bool Label {get;set;}或float Label)。hasHeader:true表示文件首行是列名,separatorChar:','指定分隔符。 -
ml.Transforms.Concatenate("Features", "Feature1","Feature2")
构建数据转换步骤,把多个特征列合并成一个名为Features的特征向量列(类型通常是float[]/Vector<float>),供训练器使用。 -
.Append(ml.BinaryClassification.Trainers.SdcaLogisticRegression());
在管道后追加二分类训练器(基于 SDCA 的逻辑回归)。训练器默认使用列名Features作为输入特征、列名Label作为标签(可通过参数修改)。 -
var model = pipeline.Fit(data);
将整个管道在data上训练(Fit),返回一个ITransformer(包括所有转换器和训练好的模型)。训练完成后可用此model执行预测、评估或保存到磁盘(ml.Model.Save)。
额外提示(简短):
- 单次预测可用
ml.Model.CreatePredictionEngine<TSrc,TDest>(model)(非线程安全,生产建议用PredictionEnginePool或批量Transform)。 - 训练前可能还需做标量归一化、缺失值处理、类别编码等预处理,这些也放在管道里。