开源项目 dotnet/machinelearning
使用教程
1. 项目的目录结构及介绍
dotnet/machinelearning
项目的目录结构如下:
/dotnet/machinelearning
├── src
│ ├── Microsoft.ML
│ ├── Microsoft.ML.Data
│ ├── Microsoft.ML.KMeansClustering
│ ├── Microsoft.ML.PCA
│ └── ...
├── test
│ ├── Microsoft.ML.Tests
│ ├── Microsoft.ML.Data.Tests
│ ├── Microsoft.ML.KMeansClustering.Tests
│ └── ...
├── tools
├── docs
├── samples
└── ...
目录介绍
- src: 包含项目的源代码,按模块划分,如
Microsoft.ML
是核心库,Microsoft.ML.Data
是数据处理模块等。 - test: 包含项目的单元测试代码,每个模块都有对应的测试文件夹。
- tools: 包含项目开发和构建过程中使用的工具。
- docs: 包含项目的文档,如 API 文档、用户指南等。
- samples: 包含示例代码,帮助用户理解如何使用该项目。
2. 项目的启动文件介绍
项目的启动文件通常位于 src
目录下,具体位置取决于项目的结构。以下是一个典型的启动文件示例:
using Microsoft.ML;
using Microsoft.ML.Data;
class Program
{
static void Main(string[] args)
{
// 创建 MLContext
var context = new MLContext();
// 加载数据
IDataView dataView = context.Data.LoadFromTextFile<MyData>("data.csv", separatorChar: ',');
// 定义数据处理和训练管道
var pipeline = context.Transforms.Concatenate("Features", nameof(MyData.Feature1), nameof(MyData.Feature2))
.Append(context.Transforms.NormalizeMinMax("Features"))
.Append(context.Transforms.Concatenate("Label", nameof(MyData.Label)))
.Append(context.Transforms.Conversion.MapValueToKey("Label"))
.Append(context.MulticlassClassification.Trainers.SdcaMaximumEntropy())
.Append(context.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
// 训练模型
var model = pipeline.Fit(dataView);
// 评估模型
var predictions = model.Transform(dataView);
var metrics = context.MulticlassClassification.Evaluate(predictions);
// 输出评估结果
Console.WriteLine($"Micro Accuracy: {metrics.MicroAccuracy}");
Console.WriteLine($"Macro Accuracy: {metrics.MacroAccuracy}");
Console.WriteLine($"Log Loss: {metrics.LogLoss}");
}
}
public class MyData
{
public float Feature1 { get; set; }
public float Feature2 { get; set; }
public string Label { get; set; }
}
启动文件介绍
- MLContext: 是 ML.NET 的核心类,用于创建和管理 ML.NET 的上下文。
- IDataView: 用于加载和处理数据。
- Pipeline: 定义数据处理和模型训练的流程。
- Model: 通过
Fit
方法训练得到。 - Evaluation: 通过
Evaluate
方法评估模型的性能。
3. 项目的配置文件介绍
项目的配置文件通常位于项目的根目录或 src
目录下,常见的配置文件包括 appsettings.json
和 dotnet-tools.json
。
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"Data": {
"DefaultConnection": "Server=localhost;Database=MyDatabase;User Id=myUsername;Password=myPassword;"
}
}
dotnet-tools.json
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "5.0.0