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

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

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

在本教程中,你将了解:

  • 准备和了解数据
  • 创建 Model Builder 配置文件
  • 选择方案
  • 加载数据
  • 定型模型
  • 评估模型
  • 使用预测模型

先决条件

请访问模型生成器安装指南,查看先决条件和安装说明的列表。

创建控制台应用程序

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

准备和了解数据

  1. 在项目中创建一个名为“数据”的目录来保存数据集文件

  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 除外)都用作特征或输入来预测车费金额。

创建 Model Builder 配置文件

首次将 Model Builder 添加到解决方案时,它会提示你创建一个 mbconfig 文件。 该 mbconfig 文件跟踪你在 Model Builder 中所执行的所有操作,以允许你重新打开会话。

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

选择方案

模型生成器方案界面

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

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

选择环境

Model Builder 可以根据选择的方案在不同的环境中运行训练。

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

加载数据

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

  1. 在 Model Builder 工具的数据步骤中,选择数据源类型选择中的“文件”。
  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 用于构建最佳模型(包括它使用的任何超参数)的训练管道。

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

评估模型

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

此外,在 Visual Studio 的“输出”窗口中,会有一个包含顶级模型及其指标的汇总表。

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

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

(可选)使用模型

此步骤将包含可用于使用模型的项目模板。 这是一个可选步骤,你可以选择最适合你对如何处理模型的需求的方法。

  • 控制台应用
  • Web API

控制台应用

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

  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
    

后续步骤

在本教程中,你了解了如何执行以下操作:

  • 准备和了解数据
  • 选择方案
  • 加载数据
  • 定型模型
  • 评估模型
  • 使用预测模型

其他资源

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