线性回归模型,使用房屋大小和价格数据预测房屋价格。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ML;
using Microsoft.ML.Data;
namespace MLApp
{
internal 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);
// $作用是将{}内容当做表达式。 C 货币。
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
// 等待用户按下任意键。避免窗口关闭。
Console.ReadKey();
}
}
}

代码工作流
以下关系图表示应用程序代码结构,以及模型开发的迭代过程:
-
- 将训练数据收集并加载到 IDataView 对象中。
- 指定操作的管道,以提取特征并应用机器学习算法。
- 通过在管道上调用 Fit() 来训练模型。
- 评估模型并通过迭代进行改进。
- 将模型保存为二进制格式,以便在应用程序中使用。
- 将模型加载回 ITransformer 对象。
- 通过调用 CreatePredictionEngine.Predict() 进行预测。

机器学习模型
ML.NET 模型是一个对象,它包含为了获得预测输出而要对输入数据执行的转换。
最基本的模型是二维线性回归,其中一个连续数量与另一个连续数量成比例关系,如上述房价示例所示。

模型很简单:Price=b+Size∗w。 参数 b 和 w 通过根据一组 (size, price) 对拟合一根直线来进行估算。 用于查找模型参数的数据称为训练数据。 机器学习模型的输入称为特征。 在此示例中,Size 是唯一的特征。 用于训练机器学习模型的真值称为标签。 此处训练数据集中的 Price 值是标签。