ML.NET机器学习、API容器化与Azure DevOps实践(一):简介

打算使用几篇文章介绍一下.NET下的机器学习框架ML.NET的具体应用,包括一些常用的业务场景、算法的选择、模型的训练以及RESTful API的创建、机器学习服务容器化,以及基于Azure DevOps的容器化部署等等相关的内容。如果你从来没有玩过机器学习,也从来没有了解过ML.NET,那么,本文将会是一个很好的开始。

机器学习是一种对算法和统计数据模型进行科学学习的方式,通过使用这种方式,计算机系统能够有效地基于模式与推断,而非遵循特定的指令序列来完成一项特定的任务。机器学习是人工智能科学的一个分支,属于人工智能范畴。 (参考:https://en.wikipedia.org/wiki/Machine_learning)。

分类

机器学习可以分为如下几类:

  • 监督学习(Supervised Learning)

  • 无监督学习(Unsupervised Learning)

  • 半监督学习(Semi-supervised Learning)

  • 增强学习(Reinforcement Learning)

监督学习

从给定的训练数据集中学习出一种算法,当的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见算法分为:统计分类(Classification,根据训练模型,通过给定的特征属性,预测目标属性属于哪个分类)和回归分析(Regression,根据训练模型,通过给定的特征属性,预测目标属性的取值)。

无监督学习

与监督学习相比,训练集没有人为标注的结果(没有人会对训练数据集中的某个属性进行标注,标注其为哪个分类,或者取值是多少)。常见算法有聚类(Clustering)、无监督异常情况检测(Unsupervised Anomaly Detection)等。

半监督学习

介于监督学习与无监督学习之间,根据部分已被标记的数据来推断未标注数据的标注信息,并实现预测。

增强学习

机器为了达成目标,随着环境的变动,而逐步调整其行为,并评估每一个行动之后所到的回馈是正向的或负向的。常见的棋局预测就属于这一类。

机器学习算法评估标准

在选择了机器学习算法之后,就可以基于训练数据集,对机器学习模型进行训练,在训练结束后,可以通过一些衡量标准来寻求最优的机器学习算法。通常,我们会使用另一部分已知结果的数据作为测试样本数据集,基于已训练好的模型进行测试预测,然后比对真实值与预测值以对算法进行评估。机器学习算法的评估标准常见的有以下几种(参考:https://machinelearningmastery.com/metrics-evaluate-machine-learning-algorithms-python/):

统计分类(Classification)算法衡量标准

  • Classification Accuracy

  • Logarithmic Loss

  • Area Under ROC Curve

  • Confusion Matrix

  • Classification Report

回归分析(Regression)算法衡量标准

  • Mean Absolute Error

  • Mean Squared Error

  • R^2 (R-Squared)

ML.NET是微软推出的一款基于.NET/.NET Core的机器学习框架,通过使用ML.NET,开发者可以使用.NET相关语言和开发工具进行机器学习任务的开发、测试、部署和运行。例如,根据不同的问题场景,开发者可以使用ML.NET并选择相应的算法,基于已有的训练数据集,对机器学习模型进行训练,并将模型保存成文件或发布到云存储以备后需;也可以使用ML.NET读取已存储的训练模型,并基于给定的测试数据集进行预测,返回预测结果。ML.NET支持自定义的机器学习算法,还能整合当下流行的机器学习平台,比如Tensorflow,这使得.NET下机器学习的应用变得非常简单方便。

从.NET Core 3.0开始,ML.NET将在.NET Core框架下得到原生的支持(参考Scott Hunter的《What’s Coming in .NET Core 3.0》一文),微软官方的一些产品,例如Azure Machine Learning、Windows Defender以及PowerPoint的新功能:设计创意,都使用了ML.NET框架。有了ML.NET,可以在应用程序中快速、方便地整合一些机器学习的应用功能,比如:情感分析、猜你喜欢、数据预测、图片分类等等。下图展示了ML.NET与.NET Core 3.0之间的关系(图片来源:https://devblogs.microsoft.com/dotnet/net-core-3-and-support-for-windows-desktop-applications/):

640?wx_fmt=png

ML.NET支持的机器学习任务

目前,ML.NET支持以下几种常见的机器学习任务(参考:https://docs.microsoft.com/zh-cn/dotnet/machine-learning/resources/tasks):

  • 二元分类(Binary Classification):预测目标属性的取值是“真”或“假”(0或1,Yes或No)

  • 多类分类(Multiclassification):预测目标属性的取值属于哪一分类

  • 回归(Regression):预测目标属性的结果值(一般是得到一个浮点数)

  • 聚类分析(Clustering):根据数据集中数据的某种特性,将数据进行分组

  • 异常情况检测(Anomaly Detection):根据数据集的数据,识别出小部分的“特殊化”数据(异常数据)

  • 排名(Ranking):排名任务从一组标记的示例构建排名程序。 该示例集由实例组组成,这些实例组可以使用给定的标准进行评分。 每个实例的排名标签是 { 0, 1, 2, 3, 4 }。 排名程序定型为用每个实例的未知分数对新实例组进行排名

  • 建议(Recommendation):支持生成推荐产品或服务的列表,例如,你为用户提供历史电影评级数据,并希望向他们推荐接下来可能观看的其他电影

在使用ML.NET进行机器学习之前,需要首先确定自己的应用场景,然后根据应用场景选择合适的机器学习算法并定制训练管道(Training Pipeline)。比如:通过机器学习来判断某种化合物对于细胞的作用是阴性的还是阳性的,这属于二元分类的应用范畴;再比如,根据一批学生的个人情况以及他们的学习成绩,来预测另一部分学生的学习成绩,这属于回归任务的应用范畴。开发者需要根据应用场景来进行选择。

ML.NET机器学习实践步骤

通常情况下,使用ML.NET进行机器学习实践,有以下这些步骤:

  1. 数据预处理与规整化 :对训练数据集进行规整化处理,比如删除一些特殊数据或者抛弃一些空值

  2. 确定问题类型(是分类、回归还是聚合等) :确定我们需要拿着训练数据集干什么?是对其中某些特性进行分类,还是用来预测未知值?

  3. 确定特征属性与目标属性:通过使用Microsoft Power BI或者TIBCO Spotfire等分析工具,来确定哪些字段属于特性控制(Feature Control)字段,哪些字段属于目标字段

  4. 使用相应分类下的不同算法,基于训练数据集进行模型训练

  5. 根据算法衡量标准对模型进行评估,选择合适算法:使用测试样本数据集,对算法所产生的模型进行预测,然后比较预测结果与实际结果,从而达到评估算法的目的

  6. 基于最优算法生成并发布模型:将模型发布成文件,保存以备后用

  7. 构建API:基于发布的模型构建RESTful API,便于应用程序集成

  8. 部署API:将RESTful API部署到云端,便于应用程序调用

本文简要介绍了机器学习的基本知识,并对ML.NET机器学习框架进行了简要介绍。文章最后描述了使用ML.NET进行机器学习的实践步骤。后续文章会以一到两个案例为基础,详细介绍这8个步骤的具体实践。

原文地址: http://sunnycoding.cn/2019/04/06/mlnet-containerize-and-azure-devops-practices-part1/

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[TJOI2011] 书架(线段数优化dp + 单调栈)

problem luogu-P1295 首先可以列出一个暴力 dpdpdp 转移。 设 f(i):f(i):f(i): 到 iii 为止划分若干组,每组最大值的和 的最小值。 然后枚举最后一组,即 iii 所在组的开头 jjj,则 f(i)min⁡{f(j−1)max⁡j≤k≤i{ak}}f(i)\min\Big\{f(j-1…

Picture POJ - 1177(矩形周长并))

Picture POJ - 1177 题目: 多个矩阵相交在一起,问新图形的周长是多少 题解: 参考题解 周长分为两部分:横线和竖线 横线计算方法:现在总区间被覆盖的长度和上一次总区间被覆盖的长度之差的绝对值 那么我们只需要从…

聊一聊C# 8.0中的await foreach

很开心今天能与大家一起聊聊C# 8.0中的新特性-Async Streams,一般人通常看到这个词表情是这样.简单说,其实就是C# 8.0中支持await foreach.或者说,C# 8.0中支持异步返回枚举类型async Task<IEnumerable<T>>.好吧,还不懂?Good,这篇文章就是为你写的,看完这篇文章,你…

【学习笔记】同余最短路

同余最短路是用来解决一类 ∑i1naixi∈[L,R]\sum_{i1}^n a_ix_i\in[L,R]∑i1n​ai​xi​∈[L,R] 问题的方法。 其中 L,RL,RL,R 值非常大&#xff0c;而 nnn 不是很大&#xff0c;大概是接受 O(n2)O(n^2)O(n2) 的范围&#xff0c;xix_ixi​ 是自定义的系数。 先差分一下&#…

Codeforces Round #738 (Div. 2)

Codeforces Round #738 (Div. 2) 文章目录A题解&#xff1a;代码&#xff1a;B题意&#xff1a;题解&#xff1a;代码&#xff1a;C题意&#xff1a;题解&#xff1a;代码&#xff1a;D1题意&#xff1a;题解&#xff1a;代码:题号题目知识点AMocha and MathBMocha and Red and…

ASP.NET Core 实现带认证功能的Web代理服务器

引言最近在公司开发了一个项目&#xff0c;项目部署架构图如下&#xff1a;思路如图中文本所述&#xff0c;公司大数据集群不允许直接访问外网&#xff0c;需要一个网关服务器代理请求&#xff0c;本处服务器A就是边缘代理服务器的作用。通常技术人员最快捷的思路是在服务器A上…

[ZJOI2010] 排列计数(dp + 组合数)

problem luogu-P2606 solution 我们对 i−⌊i2⌋i-\lfloor\frac i2\rfloori−⌊2i​⌋ 远没有 i−2∗i,2∗i1i-2*i,2*i1i−2∗i,2∗i1 敏感&#xff0c;这其实就是个二叉树&#xff0c;而且是个小根堆。 每个点的值都小于左右儿子的值&#xff08;如果有左右儿子&#xff0…

Unfair contest(个人做法)

Unfair contest 题意&#xff1a; 两个人参赛&#xff0c;n个评委打分&#xff0c;去掉s个最高分&#xff0c;去掉t个最低分&#xff0c;剩下分求平均分&#xff0c;平均分大的获胜。你是第n个评委&#xff0c;此时已知前n-1个评委所打分数&#xff0c;现在轮到你打分&#x…

ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core 进程内(InProcess)托管ASP.NET Core 进程内(InProcess)托管我们先简单回顾下 ASP.NET Core 中,要配置InProcess的服务器&#xff0c;需要在项目文件中添加< AspNetCoreHostingModel >元素&#…

[CQOI2017] 老C的键盘(树形dp + 组合数)

problem luogu-P3757 solution observation:\text{observation}:observation: hi/2−hih_{i/2}-h_ihi/2​−hi​ 的大小关系&#xff0c;其实就是个二叉树的大小关系。 这很类似之前的排列 dpdpdp &#xff0c;迁移过来&#xff0c;我们尝试 f(i,j):if(i,j):if(i,j):i 在子树…

Educational Codeforces Round 112 (Rated for Div. 2)

Educational Codeforces Round 112 (Rated for Div. 2) 题号题目知识点APizzaForcesBTwo TablesCCoin RowsDSay No to PalindromesEBoring Segments尺取线段树FGood GraphLCT(未补)

eShopOnContainers 知多少[10]:部署到 K8S | AKS

1. 引言断断续续&#xff0c;感觉这个系列又要半途而废了。趁着假期&#xff0c;赶紧再更一篇&#xff0c;介绍下如何将eShopOnContainers部署到K8S上&#xff0c;进而实现大家常说的微服务上云。2. 先了解下 Helm读过我上篇文章ASP.NET Core 借助 K8S 玩转容器编排的同学&…

[HEOI2013] SAO(dp + 组合数 + 前缀和)

problem luogu-P4099 solution 两篇前提题解&#xff1a;排列计数&#xff0c;老C的键盘 想必已经看了 CQOI2017 老C的键盘 一题题解了。 这里直接考虑优化状态转移方程。 我们发现 f(u,i),f(v,j)f(u,i),f(v,j)f(u,i),f(v,j)&#xff0c;当枚举 jjj 后&#xff0c;对应的…

cf1555A. PizzaForces

cf1555A. PizzaForces A. PizzaForces 题意&#xff1a; 有三种披萨&#xff0c;第一种有六块&#xff0c;需要花费15分钟&#xff0c;第二种有8块&#xff0c;需要花费20分钟&#xff0c;第三问有10块&#xff0c;需要花费25分钟。 现在要吃x块披萨&#xff0c;问最少时间花…

DI是实现面向切面和面向抽象的前提

DI越来越重要DI就是依赖注入&#xff0c;现在来说&#xff0c;大部分框架都是以DI为基础组件的&#xff0c;每一个框架都有自己的DI组件&#xff0c;像dotnet core&#xff0c;java spring等&#xff0c;也都为自己的框架量身打造了DI工具。面向对象的几个原则依赖倒置原则&…

[CQOI2017] 老C的任务(差分 + 树状数组 / K-D tree)

problem luogu-P3755 solution 这题第一眼矩阵内的点权值和&#xff0c;马上就是 K-D tree\text{K-D tree}K-D tree 不过脑子的敲。 这其实就是个二维数点问题&#xff0c;完全可以树状数组。 将矩阵差分成四个以原点为左下角的矩阵。 然后将基站按 xxx 轴排序&#xff0…

.net core 并发下的线程安全问题

抱歉&#xff0c;其实内容并不如题&#xff01;&#xff01;&#xff01;背景&#xff08;写测试demo所出现的异常&#xff0c;供大家学习与拍砖&#xff09;&#xff1a;.net core webapi项目&#xff0c;做了一个授权的filter&#xff08;真正的生产项目的话&#xff0c;JWT很…

cf1555B. Two Tables

cf1555B. Two Tables 题意&#xff1a; 一个大矩阵空间内放置一个矩阵a&#xff0c;现在要再往这个空间内放一个矩阵b&#xff0c;a移动距离len才能放下b&#xff0c;问len最小是多少 题解&#xff1a; 不难发现左右或上下移动是最佳的&#xff0c;斜着移动是最不好的。此时…

cf1555C Coin Rows

cf1555C Coin Rows 题意&#xff1a; 有一个两行m列的地图&#xff0c;每个格子都有对应的价值&#xff0c;有a&#xff0c;b两个人&#xff0c;都从左上角到右下角&#xff0c;且都只能向右向下走&#xff0c;a先出发&#xff0c;a每到一个格子&#xff0c;就会获得这个地方…

C#并行编程(2):.NET线程池

线程 Thread在总结线程池之前&#xff0c;先来看一下.NET线程。.NET线程与操作系统(Windows)线程有什么区别&#xff1f;.NET利用Windows的线程处理功能。在C#程序编写中&#xff0c;我们首先会新建一个线程对象System.Threading.Thread&#xff0c;并为其指定一个回调方法&…