65.9K
CodeProject 正在变化。 阅读更多。
Home

ML.NET Model Builder for ASP.NET Core 入门

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2020年3月9日

CPOL

9分钟阅读

viewsIcon

19144

downloadIcon

328

如何使用 ML.NET Model Builder 创建 ML.NET 应用程序,并在 ASP.NET Core 中使用训练好的模型进行预测。

引言

在本文中,我们将详细介绍如何使用 ML.NET Model Builder 创建 ML.NET 应用程序,并在 ASP.NET Core 中使用训练好的模型进行预测。

ML.NET Model Builder 使我们能够更轻松地开发 ML.NET 应用程序,以便更轻松地为所有支持 ML.NET 的模型以及自定义模型的开发构建、训练和部署模型。如果您是 ML.NET 新手,请阅读我之前关于 ML.NET 的文章。最新版本的 ML.NET 还支持使用 AutoML 和 ML.NET Model Builder 轻松开发自定义 ML。

在开始使用 ML.NET 之前,让我们先了解一下开发机器学习应用程序所需的基本 ML.NET 概念。

加载数据:为了准确预测结果,我们需要提供大量数据来训练模型。在 ML.Net 中,我们可以通过文本(CSV/TSV、关系数据库)提供用于训练和测试的数据。

训练:我们需要选择正确的算法来训练模型。根据我们的需求,我们必须选择正确的算法来训练和预测结果。

评估:为我们的模型训练和预测选择机器学习类型。如果您需要处理分段,则可以选择聚类模型。如果您需要预测股票价格,可以选择回归模型;如果您需要进行情感分析,则可以选择分类模型。

预测结果:基于训练和测试数据以及训练好的模型,最终的预测将通过 ML.NET 应用程序显示。训练好的模型将保存为二进制格式,也可以集成到我们其他的 .NET 应用程序中。

现在,使用 ML.NET Model Builder,可以轻松地从 CSV、Excel 或数据库加载数据,选择并训练我们首选的可用 ML.NET 模型,或者选择自定义模型训练。评估模型,最后预测并向我们的任何 .NET 应用程序显示训练好的模型结果。现在,在本文中,我们将看看将在 ASP.NET Core 应用程序中显示的处理过的预测结果。

在 ML.NET Model Builder 中,我们可以看到以下场景(注意:Microsoft 可能会根据版本不同而添加更多场景。)

在此示例程序中,我们将使用 ML.NET Model Builder 通过自定义场景预测商品库存。

在我 2018 年 4 月撰写的上一篇文章中,我解释了如何使用控制台应用程序进行相同的商品库存预测,我使用了相同的商品库存数据作为 CSV 文件,并使用数据来训练模型并预测结果,最后将结果绑定到 ASP.NET Core 应用程序。

商品库存数据看起来像这样,这里我们有列:商品代码、位置代码、仓库入库数量、仓库出库数量、商品类型以及每个位置上每种商品的剩余商品总库存数量。我们将使用以下数据集通过 ML.NET Model Builder 进行训练、评估和预测。

背景

必备组件

Using the Code

步骤 1 - 创建 ASP.NET Core 应用程序

注意:我使用了 Visual Studio 2019。)

安装完先决条件后,在桌面上单击开始>>程序>>Visual Studio 2019>>Visual Studio 2019>>单击创建项目。单击继续

选择ASP.NET Core Web 应用程序并单击下一步

选择项目文件夹,勾选“在同一目录中放置解决方案”,然后单击创建按钮。

现在选择 Web 应用程序(模型-视图-控制器),然后单击创建按钮。

我们可以看到已创建了带有 Controllers/Models 和 Views 的 ASP.NET 项目。

步骤 2:使用 ML.NET Model Builder

右键单击项目,选择添加,然后单击机器学习

我们可以看到 ML.NET Model Builder。

在 ML.NET Model Builder 的左侧,我们可以看到菜单,如场景、数据、训练、评估和代码。

场景:在场景中,您可以找到可用于开发示例的 ML.NET 模型,如二元分类、图像分类等。您还可以看到自定义场景以构建我们自己的自定义模型。在我们的演示中,我们将使用自定义模型。

数据:您可以从文件或数据库加载用于训练的数据。

训练:选择要训练的模型

评估:模型训练完成后将进行评估。在评估中,将训练好的模型与测试数据进行比较,以比较并预测将生成的最终结果。

代码:最后,将使用代码来创建训练好的模型,并在我们任何一个应用程序中使用它。我们将使用最终训练好的模型代码来训练和评估我们的 ASP.NET Core 应用程序,以预测并显示每个位置的总库存数量。

自定义场景:在此,我们为演示应用程序选择了自定义场景,以预测库存数量。

Data

选择场景后,我们可以看到下一个菜单将显示,如下所示。我们选择了自定义场景,接下来显示了数据菜单,在这里我们可以选择从文件或数据库加载要训练的数据。在这里,我们将使用文件加载数据。

单击选择文件并加载文件。我们可以在这里看到已加载要训练的文件。

接下来,我们需要选择要预测的列(在机器学习中,预测列称为标签)。在我们的演示中,我们将预测TotalStockQty。此外,我们还需要选择我们用于预测结果的输入列。在这里,对于我们的演示,我们需要根据ItemLocation来预测库存数量。因此,在这里我们选择了输入列(特征)列为ItemIDLoccode

Train (训练)

之后,单击训练按钮以使用加载的数据训练模型。
在训练屏幕中,我们可以看到要为训练模型选择的机器学习任务,还可以看到训练模型的秒数。

机器学习任务:对于自定义场景,ML.NET 的可用任务是多类分类、二元分类和回归。在这里,对于我们的演示,我们选择了多类分类。

这里,我们的文件大小很小,最多 10MB 的数据大小,我们可以选择大约 10 秒来训练模型。

选择机器学习任务和训练时间后,单击开始训练按钮,然后等待几秒钟完成训练。

现在我们可以看到训练已完成,以及使用的最佳算法,接下来,我们需要单击评估按钮来评估我们的训练模型。

评估

在评估屏幕中,我们可以评估训练好的模型,最后单击代码按钮以获取代码。

代码

我们可以看到 ML.NET 模型、训练和测试项目已添加到我们的解决方案中。我们将此模型添加到我们的 ASP.NET Code 项目解决方案中。为此,我们需要单击添加到项目按钮。

我们可以看到模型和控制台项目都已添加到我们的 ASP.NET Core 解决方案中。现在让我们看看如何将模型导入到我们的 ASP.NET Core 并向用户显示预测结果。

步骤 3:将 ML.NET 添加到 ASP.NET Core 项目以进行预测

从菜单中选择工具,选择NuGet 包管理器,然后单击管理解决方案的 NuGet 程序包

选择浏览,在搜索框中输入 ML.NET,然后选择 Microsoft.ML。在右侧,我们还可以看到我们的 ML.NET 模型项目将显示出来,选择项目,然后单击安装

步骤 4:创建新的 ASP.NET Core 控制器

右键单击Controller类,选择新建空白控制器,并将控制器名称命名为StockPrediction,然后将控制器添加到控制器文件夹。

步骤 5:创建新的 ASP.NET Core 视图

接下来,在 View 文件夹中创建一个名为StockPrediction的新文件夹,并添加一个名为StockPrediction.cshtml的视图。

Controller 代码

StockPredictionController控制器中,添加以下代码

using ShanuASPMLNETML.Model;

导入后,添加以下代码。在这里,我们更改了默认视图为我们的新视图名称,我们还创建了一个额外的 post Action result,并将预测结果返回到视图以绑定结果。

public class StockPredictionController : Controller
    {
        [HttpGet]
        public IActionResult StockPrediction()
        {
            return View();
        }

        [HttpPost]
        public ActionResult StockPrediction(ModelInput input)
        {
            ViewBag.Result = "";
            var stockPredictions = ConsumeModel.Predict(input);
            ViewBag.Result = stockPredictions;

            ViewData["ItemID"] = input.ItemID;
            ViewData["Loccode"] = input.Loccode;
            return View();
        }
    }

视图代码

在 StockPrediction 视图中,添加以下代码。在这里,我们添加了 2 个textbox,一个用于商品代码输入,一个用于位置代码输入,我们将它们命名为与我们的模型名称相同,以便数据能够传递到我们训练好的模型并返回预测结果,最后我们将预测结果绑定给用户。

 @model ShanuASPMLNETML.Model.ModelInput
@{
    ViewData["Title"] = "item Stock Predicti0n";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Welcome to Shanu Stock Prediction for the Item by Warehouse Location</h2>
<h3>using ML.NET in ASP.NET Core</h3>
<hr />

<div class="row">
    <div class="col-md-12">
        <form asp-action="StockPrediction">
            <div class="row">
                <div class="form-group col-md-4">
                    <label asp-for="ItemID" class="control-label">Item ID</label>
                    <input asp-for="ItemID" class="form-control" />
                </div>
                <div class="form-group col-md-4">
                    <label asp-for="Loccode" class="control-label">
                         Warehouse Location Code:</label>
                    <input asp-for="Loccode" class="form-control" />
                </div>

            </div>
            <div class="form-group col-md-4 text-left">
                <label class="control-label"></label>
                <input type="submit" value="Stock Prediction" class="btn btn-primary" />
            </div>
        </form>
        <hr />
    </div>

</div>

@if (ViewBag.Result != null)
{
    <div class="row">
        <div class="col-md-12">
            <h2 style="color:#103f62">Here is the Test result for Item : 
            <span style="color:#a50f0f"> @ViewData["ItemID"]  </span> 
            for the Warehouse location <span style="color:#a50f0f">@ViewData["Loccode"] 
            </span>  </h2>
            <h1 style="color:#a50f0f">Final Predicted Stock Quantity is 
            :@ViewBag.Result.Prediction  </h1>
        </div>
    </div>
    <hr />
}

构建并运行项目

我们可以输入要预测的商品代码和位置代码,并显示库存数量

这里,我们输入的商品代码是Item001,位置代码是1

我们可以看到预测结果是:90

我们也可以在 Excel 文件中核对结果或原始数据。

与上面相同,我们测试了另一个数据进行预测,您可以看到结果。

这里,我们输入的商品代码是Item003,位置代码是2

文件中Item003的 Excel 数据如下

从这两个结果来看,我们可以发现预测准确率为 100%,结果符合预期。

关注点

ML.NET (Machine Learning DotNet) 是一个很棒的框架,适合所有希望从事机器学习的 .NET 开发人员。目前 ML.NET 只有预览版本可用,我迫不及待地等待公共版本的发布。如果您是 .NET 开发人员,不了解机器学习,并希望从事机器学习,那么 ML.Net 非常适合您,它是开始使用 ML.NET 的绝佳框架。希望大家喜欢这篇文章,期待下次的分享。

历史

  • 2020 年 3 月 9 日:初始版本
© . All rights reserved.