训练模型

上一篇文章中,我们已经通过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. oracle存储函数实例

    CREATE OR REPLACE PROCEDURE "PROC_INS_DAY_DOCTOR_LL"(v_date in VARCHAR) is --PROC_INS_DAY_ ...

  2. [iOS] WSHorizontalPickerView 图片水平滚动封装

    之前这篇文章传送门本来是记录自己练手的demo的,后来很多人来问我要代码.今天就抽时间封装了一下,没有考虑太多情况,等我有空再去仔细考虑吧. 代码在:Github 用法很简单,创建对象,设置数据源,记 ...

  3. sklearn datasets模块学习

    sklearn.datasets模块主要提供了一些导入.在线下载及本地生成数据集的方法,可以通过dir或help命令查看,我们会发现主要有三种形式:load_<dataset_name>. ...

  4. git撤销本地提交但未push的记录

    ### git撤销本地提交但未push的记录 前言:有时候本地执行commit命令或者cherry-pick命令后发现提交了不需要提交的东西,就需要把已提交的commit记录撤销下来,简单做下记录 撤 ...

  5. HTTP协议响应码及get请求和post请求比较

    HTTP协议响应码 1XX:信息响应类,表示接收到请求并且继续处理 2XX:处理成功响应类,表示动作被成功接受.理解和接受 200 OK:表示从客户端发来的请求在服务器端被正常处理了 204 No C ...

  6. 百度-淘宝-360搜索引擎搜索API

    百度(baidu) Api地址:http://suggestion.baidu.com/su?wd=设计&p=3&cb=window.bdsug.sug window.bdsug.su ...

  7. Python基础知识:字符串

    1.Python中大写字母命名的变量,默认为常量,不可修改:列如:MYSQL_CONNECTION = '192.168.1.1' 2.字符串换行输入格式:换行用\隔开,两行分别用引号,制表符\t,换 ...

  8. Mysql基础之 binary关键字

    where子句的字符串比较是不区分大小写的,但是可以使用binary关键字设定where子句区分大小写

  9. JVM虚拟机查找类文件的顺序

    JVM查找类文件的顺序: 在doc下使用set classpath=xxx, 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件. 如果配置了classpath环境,JVM ...

  10. SAP S4/HANA BP屏幕增强添加自定义字段(BDT方式)

    喜欢博主的读者也许会意识到,这是本博客中第一篇有关屏幕增强的文章.之前没有总结过相关的东西,除了因为相关经验有限之外,我个人也是不喜欢所谓dynpro编程的,它有许多“潜规则”一样的东西要记住,想要运 ...