训练模型

上一篇文章中,我们已经通过LearningPipeline训练好了一个“鸢尾花瓣预测”模型,

var model = pipeline.Train<IrisData, IrisPrediction>();

现在就可以让模型对一条没有人工标注结果的数据进行分析,返回一个预测结果。

var prediction = model.Predict(new IrisData()
            {
                SepalLength = 3.3f,
                SepalWidth = 1.6f,
                PetalLength = 0.2f,
                PetalWidth = 5.1f,
            });

Console.WriteLine($"Predicted flower type is: {prediction.PredictedLabels}");

或者一次预测一批数据

var inputs = new[]{
                new IrisData()
                {
                    SepalLength = 3.3f,
                    SepalWidth = 1.6f,
                    PetalLength = 0.2f,
                    PetalWidth = 5.1f,
                }
                ,new IrisData()
                {
                    SepalLength = 5.2f,
                    SepalWidth = 3.5f,
                    PetalLength = 1.5f,
                    PetalWidth = 0.2f,
                }
            };

var predictions = model.Predict(inputs);

保存模型

但是大多数时候,已经训练好的模型以后还需要继续可以使用,因此需要把它持久化,写入到zip文件中。

await model.WriteAsync("IrisPredictionModel.zip");

使用模型

一旦建立了机器学习模型,就可以部署它,利用它进行预测。我们可以通过REST API,接受来自客户端的数据输入,并返回预测结果。

  • 创建API项目

dotnet new webapi -o myApi
  • 安装依赖项

cd myApi
dotnet add package Microsoft.ML
dotnet restore
  • 引用模型

要在API中引用我们前面保存的模型,只需将IrisPredictionModel.zip复制到API项目目录中即可。

  • 创建数据结构

我们的模型使用数据结构IrisData和IrisPrediction来定义特征和预测属性。因此,当使用我们的模型通过API进行预测时,它也需要引用这些数据结构。因此,我们需要在API项目中定义IrisData和IrisPrediction。类的内容与上一篇文章中创建模型项目中的内容相同。

using Microsoft.ML.Runtime.Api;
namespace myApi
{
    public class IrisData
    {
        [Column(")]
        public float SepalLength;

        [Column(")]
        public float SepalWidth;

        [Column(")]
        public float PetalLength;

        [Column(")]
        public float PetalWidth;

        [Column(")]
        [ColumnName("Label")]
        public string Label;
    }
}
using Microsoft.ML.Runtime.Api;
namespace myApi
{
    public class IrisPrediction
    {
        [ColumnName("PredictedLabel")]
        public string PredictedLabels;
    }
}
  • 创建Controller

现在,在API项目的Controllers目录中,创建PredictController类,用于处理来自客户端的预测请求,它包含一个POST方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.ML;

namespace myApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class PredictController : ControllerBase
    {
        // POST api/predict
        [HttpPost]
        public async Task<string> Post([FromBody] IrisData value)
        {
            var model = await PredictionModel.ReadAsync<IrisData,IrisPrediction>("IrisPredictionModel.zip");
            var prediction = model.Predict(value);
            return prediction.PredictedLabels;
        }
    }
}
  • 测试API

使用如下命令行运行程序:

dotnet run

然后,使用POSTMAN或其他工具向http://localhost:5000/api/predict发送POST请求,请求数据类似:

{
    "SepalLength": 3.3,
    "SepalWidth": 1.6,
    "PetalLength": 0.2,
    "PetalWidth": 5.1,
}

如果成功,将会返回"Iris-virginica"。

学习ML.NET(2): 使用模型进行预测的更多相关文章

  1. 迁移学习——使用Tensorflow和VGG16预训模型进行预测

    使用Tensorflow和VGG16预训模型进行预测 from:https://zhuanlan.zhihu.com/p/28997549   fast.ai的入门教程中使用了kaggle: dogs ...

  2. ANN:ML方法与概率图模型

    一.ML方法分类:          产生式模型和判别式模型 假定输入x,类别标签y         -  产生式模型(生成模型)估计联合概率P(x,y),因可以根据联合概率来生成样本:HMMs   ...

  3. keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...

  4. R语言利用ROCR评测模型的预测能力

    R语言利用ROCR评测模型的预测能力 说明 受试者工作特征曲线(ROC),这是一种常用的二元分类系统性能展示图形,在曲线上分别标注了不同切点的真正率与假正率.我们通常会基于ROC曲线计算处于曲线下方的 ...

  5. 吴裕雄 python 机器学习——集成学习随机森林RandomForestRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  6. 吴裕雄 python 机器学习——集成学习随机森林RandomForestClassifier分类模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  7. 深度学习|基于LSTM网络的黄金期货价格预测--转载

    深度学习|基于LSTM网络的黄金期货价格预测 前些天看到一位大佬的深度学习的推文,内容很适用于实战,争得原作者转载同意后,转发给大家.之后会介绍LSTM的理论知识. 我把code先放在我github上 ...

  8. 深度学习原理与框架-递归神经网络-时间序列预测(代码) 1.csv.reader(进行csv文件的读取) 2.X.tolist(将数据转换为列表类型)

    1. csv.reader(csvfile) # 进行csv文件的读取操作 参数说明:csvfile表示已经有with oepn 打开的文件 2. X.tolist() 将数据转换为列表类型 参数说明 ...

  9. ArcGIS案例学习笔记-批量裁剪地理模型

    ArcGIS案例学习笔记-批量裁剪地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:空间数据的批量裁剪 优点:1.批量裁剪:任意多个目标数据,去裁剪任意 ...

随机推荐

  1. JMeter 脚本开发(五)

    一.JMeter 元件运行顺序 执行顺序逻辑如下: 1.配置元件(如果存在) 2.前置处理器(如果存在) 3.定时器(如果存在) 4.取样器(如果存在) 5.后置处理器(如果存在且取样器的结果不为空) ...

  2. SQL Server 2000详细安装过程及配置

    说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,虽然现如今SQL Server 2000软件早已经过时了,但仍然有一部分人在使用它,尤 ...

  3. [Winform-WebBrowser]-在html页面中js调用winForm类方法

    在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部: 1.在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的 ...

  4. nginx配置基于域名、端口、IP的虚拟主机

    1.基于域名的虚拟主机: 绝大多数企业对外提供服务的网站使用的都是基于域名的主机,通过不同的域名区分不同的虚拟主机. 首先我们进入安装nginxd的目录下:/application/nginx-1.6 ...

  5. VsCode 的使用

    一.简介 VsCode(Visual Studio Code),官网地址:https://code.visualstudio.com/ Visual Studio Code is a lightwei ...

  6. U盘内容被病毒隐藏的解决办法(亲测可用)

    前几天用U盘的时候不小心感染上了病毒,用自己的电脑打开后里面只剩下一个U盘的快捷方式,选中显示隐藏文件之后依然没有任何显示,但是查看U盘的属性的时候可以看到,U盘已经使用了300多M,所以就上网查了一 ...

  7. [MapReduce_7] MapReduce 中的排序

    0. 说明 部分排序 && 全排序 && 采样 && 二次排序 1. 介绍 sort 是根据 Key 进行排序 [部分排序] 在每个分区中,分别进行排序 ...

  8. ES5数组的遍历方式

    /* 遍历数组 */ var arr=[1,2,3,43,55,66,77,99]; /* 遍历数组 function(item,index) */ arr.forEach(function(item ...

  9. Django admin 的模仿流程

  10. 【美妙的Python之三】Python 对象解析

    美妙的Python之Python对象         简而言之: Python 是能你无限惊喜的语言.与众不同.         Python对象概念的理解,是理解Python数据存储的前提.Pyth ...