教程:通过模型生成器使用回归预测价格

本教程介绍如何使用 ML.NET 模型生成器生成回归模型来预测价格。 本教程中开发的 .NET 控制台应用基于历史纽约出租车费用数据预测出租车费用。

  • 准备和了解数据
  • 创建模型生成器配置文件
  • 选择场景
  • 加载数据
  • 训练模型
  • 评估模型
  • 使用模型进行预测

模型生成器价格预测模板可用于任何需要数值预测值的场景。 示例方案包括:房价预测、需求预测和销售预测。

先决条件

有关先决条件和安装说明的列表,请访问 Model Builder 安装指南

创建控制台应用程序

创建名为“TaxiFarePrediction”的 C# 控制台应用程序。 请确保将解决方案和项目放在同一目录中未选中状态

准备和了解数据

  1. 在项目中创建名为 Data 的目录来存储数据集文件。

  2. 用于训练和评估机器学习模型的数据集最初来自 NYC TLC 出租车行程数据集。

    1. 若要下载数据集,请导航到 taxi-fare-train.csv 下载链接

    2. 加载页面时,右键单击页面上的任意位置并选择“另存为

    3. 使用“另存为”对话框 将文件保存在在上一步创建的 数据 文件夹中。

  3. 在解决方案资源管理器 中,右键单击 taxi-fare-train.csv 文件,然后选择 属性。 在“高级”下,将“复制到输出目录”的值更改为“如果较新则复制”

taxi-fare-train.csv 数据集中的每个行都包含出租车行程的详细信息。

  1. 打开 taxi-fare-train.csv 数据集

    提供的数据集包含以下字段:

    • vendor_id: 出租车供应商的 ID 是一项功能。
    • rate_code: 出租车行程的费率类型是一项特征。
    • passenger_count: 行程中的乘客数量是一项特征。
    • trip_time_in_secs: 这次行程所花的时间。 您希望在行程完成之前预测行程的票价。 那一刻,你不知道旅行需要多长时间。 因此,行程时间不是一项功能,你将从模型中排除此列。
    • trip_distance: 行程距离是一项功能。
    • payment_type: 付款方式(现金或信用卡)是一项功能。
    • fare_amount: 支付的总出租车费用是一个标签。

label 是要预测的列。 执行回归任务时,目标是预测数值。 在此价格预测方案中,将预测出租车乘车费用。 所以“fare_amount”是标签。 标识的 features 是为模型提供的用来预测 label 的输入。 在这种情况下,剩余的列(trip_time_in_secs 除外)都用作特征或输入来预测车费金额。

创建模型生成器配置文件

首次将模型生成器添加到解决方案时,系统会提示你创建 mbconfig 文件。 mbconfig 文件跟踪模型生成器中所做的一切,以便重新打开会话。

  1. 解决方案资源管理器中,右键单击 TaxiFarePrediction 项目,然后选择 添加>机器学习模型
  2. mbconfig 项目命名为 TaxiFarePrediction,然后单击“添加”按钮。

选择情景

模型生成器方案屏幕

若要训练模型,需要从模型生成器提供的可用机器学习方案列表中选择。 在本例中,选择的方案是 Value prediction

  1. 在 Model Builder 工具的方案步骤中,选择“值预测”方案

选择环境

模型生成器可以根据所选方案在不同的环境中运行训练。

  1. 确认选中 Local (CPU) 项,然后单击 下一步 按钮。

加载数据

模型生成器接受来自两个源的数据:SQL Server 数据库或 csv 或 tsv 格式的本地文件。

  1. 在模型生成器工具的数据步骤中,从数据源类型选择中选择 文件
  2. 选择文本框旁边的“浏览”按钮,并使用文件资源管理器浏览并选择 数据 目录中的 taxi-fare-test.csv
  3. 在“要预测的列(标签)”下拉列表中选择“fare_amount”
  4. 单击“高级数据选项”链接
  5. 在“列设置”选项卡中,为 trip_time_in_secs 列选择“目的”下拉列表,然后选择“忽略”以在训练时排除,不将其作为特征。 单击 “保存”按钮关闭对话框。
  6. 单击 “下一步”按钮

训练模型

本教程中用于训练价格预测模型的机器学习任务是回归。 在模型训练过程中,模型生成器使用不同的回归算法和设置训练单独的模型,以查找数据集的最佳性能模型。

模型训练所需的时间与数据量成比例。 模型生成器根据数据源的大小自动为 训练时间(秒) 选择默认值。

  1. 将默认值保留为 训练时间(秒),除非你希望训练更长的时间。
  2. 选择“开始训练”

在训练过程中,进度数据显示在训练步骤中的 Training results 部分。

  • 状态显示训练过程的完成状态。
  • “最高准确性”显示截至目前由模型生成器找到的性能最佳的模型的准确性。 更高的准确度意味着模型在测试数据上预测得更正确。
  • 最佳算法显示模型生成器迄今执行的最佳性能算法的名称。
  • 最后一个算法显示模型生成器最近用于训练模型的算法的名称。

训练完成后,mbconfig 文件将生成一个名为 TaxiFarePrediction.zip 的模型,并附带两个 C# 文件:

  • TaxiFare.consumption.cs:此文件具有一个公共方法,该方法将加载模型并创建一个预测引擎并返回预测。
  • TaxiFare.training.cs:此文件包含模型生成器想出用于生成最佳模型的训练管道,包括它使用的任何超参数。

单击 下一步 按钮导航到评估步骤。

评估模型

训练步骤的结果将是一个具有最佳性能的模型。 在 Model Builder 工具的评估步骤中,“最佳模型”部分将包含“模型”项中性能最佳的模型使用的算法,并包含“RSquared”中的指标

此外,在 Visual Studio 的 输出 窗口中,将显示一个包含最佳模型及其指标的汇总表。

本部分还将允许你通过执行单个预测来测试模型。 它将提供用于填充值的文本框,你可以单击“预测”按钮从最佳模型获取预测。 默认情况下,数据集中的随机行将填充此行。

如果对准确性指标不满意,尝试和改进模型准确性的一些简单方法是增加训练模型或使用更多数据的时间量。 否则,单击“下一步”导航至使用步骤

(可选)使用模型

此步骤将包含可用于使用模型的项目模板。 此步骤是可选的,可以选择最适合你如何为模型提供服务的方法。

  • 控制台应用
  • 网络应用编程接口

控制台应用

将控制台应用添加到解决方案时,系统会提示你为项目命名。

  1. 将控制台项目命名为 TaxiFare_Console

  2. 单击“添加到解决方案”以将项目添加到当前解决方案。

  3. 运行应用程序。

    程序生成的输出应类似于以下代码片段:

    Predicted Fare: 15.020833
    

Web API(网络应用程序接口)

将 Web API 添加到解决方案时,系统会提示你为项目命名。

  1. 将 Web API 项目命名为 TaxiFare_API

  2. 上单击“添加到解决方案*”以将项目添加到您的当前解决方案中。

  3. 运行应用程序。

  4. 打开 PowerShell 并输入以下代码,其中 PORT 是应用程序正在侦听的端口。

    $body = @{
        Vendor_id="CMT"
        Rate_code=1.0
        Passenger_count=1.0
        Trip_distance=3.8
        Payment_type="CRD"
    }
    
    Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. 如果成功,输出应类似于以下文本:

    score
    -----
    15.020833
    

若要详细了解本教程中提到的主题,请访问以下资源: