线性回归模型,使用房屋大小和价格数据预测房屋价格。
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 值是标签。