0%

ML.NET 笔记(一)— Hello ML.NET

ML.NET 简介

ML.NET是微软开发的一款机器学习类库,基于C#编程语言和.NET框架实现。 目前,.NET 框架已经基于.NET Core实现了跨平台开发,使得 ML.NET 的实用性得到了大大的加强。 此外,由于 .NET 框架在开发桌面 GUI 软件时的便利性,ML.NET 在将机器学习封装至用户软件方面有很大的优势。

ML.NET 能够实现的功能包括:

  • 通过离线或在线训练的方式将机器学习集成至 .NET 应用中;
  • 提供多种机器学习模型,并提供 AutoML 自动机器学习算法,进行自动的模型筛选、训练、优化和部署;
  • 允许手动选择、创建机器学习模型,或导入已经训练完成的 TensorFlow、ONNX 模型。

ML.NET 当前可以实现的机器学习模型包括:

  • 分类模型
  • 回归模型
  • 异常检测模型
  • 推荐模型
  • 序列数据模型
  • 图像分类模型

其中图像分类模型的训练支持使用 GPU 加速。

Hello ML.NET World 代码示例

以下是官方文档中的ML.NET代码示例,该示例使用线性回归模型进行了简单的房价预测。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using Microsoft.ML;
using Microsoft.ML.Data;

class Program
{
public class HouseData
{
public float Size { get; set; }
public float Price { get; set; }
}

public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}

static void Main(string[] args)
{
MLContext mlContext = new MLContext();

// 1. Import or create training data
HouseData[] houseData = {
new HouseData() { Size = 1.1F, Price = 1.2F },
new HouseData() { Size = 1.9F, Price = 2.3F },
new HouseData() { Size = 2.8F, Price = 3.0F },
new HouseData() { Size = 3.4F, Price = 3.7F } };
IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);

// 2. Specify data preparation and model training pipeline
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));

// 3. Train model
var model = pipeline.Fit(trainingData);

// 4. Make a prediction
var size = new HouseData() { Size = 2.5F };
var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);

Console.WriteLine($"Predicted price for size: {size.Size*1000} sq ft= {price.Price*100:C}k");

// Predicted price for size: 2500 sq ft= $261.98k
}
}

ML.NET 模型的基本流程

从示例中可以看出,一个 ML.NET 机器学习代码主要包含以下几个步骤:

  1. 使用 IDataView 对象载入数据;
  2. 建立数据特征提取和机器学习算法的流程;
  3. 使用 Fit() 方法训练模型;
  4. 评估模型的性能并进行改进;
  5. 以二进制格式保存模型;
  6. 使用 ITransformer 对象读取模型;
  7. 调用 CreatePredictionEngine.Predict() 方法获取预测结果。
ML.NET 基本流程