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,一经查实,立即删除!

相关文章

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,这篇文章就是为你写的,看完这篇文章,你…

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

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

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 >元素&#…

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

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

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

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

.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;并为其指定一个回调方法&…

ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core 进程外(out-of-process)托管ASP.NET Core launchsettings.json文件在本视频中&#xff0c;我们将讨论在ASP.NET Core项目中launchsettings.json文件的重要性。launchsettings.json文件您将在项目根文件…

[CQOI2017] 老C的方块(网络流染色建图)

problem luogu-P3756 solution 据说要做网络流 24\text{24}24 题中的《方格取数问题》和《骑士共存问题》。 &#xff1f;&#xff1f;&#xff1f;那个不是直接最小割吗&#xff1f;哦原来是从黑白染色来理解的。我还是太水了。 这种题之所以能用网络流做&#xff0c;是因…

江湖召集:.NET开发者们看过来,这场长沙的开发者技术大会正是为你精心准备的大餐...

看过去&#xff0c;历史的尘埃与沧海桑田古语有云“近代中国&#xff0c;湖南独撑半边天”&#xff0c;湖南长沙&#xff0c;作为湖南省的省会&#xff0c;自古以来便是各界风云人士兴起之地。随着互联网时代的到来&#xff0c;长沙&#xff0c;这座历史悠久的文化名城&#xf…

C#并行编程(3):并行循环

初识并行循环并行循环主要用来处理数据并行的&#xff0c;如&#xff0c;同时对数组或列表中的多个数据执行相同的操作。在C#编程中&#xff0c;我们使用并行类System.Threading.Tasks.Parallel提供的静态方法Parallel.For和Parallel.ForEach来实现并行循环。从方法名可以看出&…

Acwing 252. 树

Acwing 252. 树 题意&#xff1a; 给定一个有 N 个点&#xff08;编号 0,1,…,N−1&#xff09;的树&#xff0c;每条边都有一个权值&#xff08;不超过 1000&#xff09;。 树上两个节点 x 与 y 之间的路径长度就是路径上各条边的权值之和。 求长度不超过 K 的路径有多少条…

.net 4.5部署到docker容器

.NET FX 应用程序也是可以容器化的&#xff0c;容器化的选项有两个&#xff1a;部署到windows容器部署到linux容器部署到windows容器由于.net本身就是运行在windows平台的&#xff0c;所以它与windows容器也是更加适合&#xff0c;你可以以iis镜像为基础&#xff0c;去编写你的…

将传统 WPF 程序迁移到 DotNetCore 3.0

介绍由于历史原因&#xff0c;基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序&#xff0c;如果将这些程序全部基于 DotNetCore 3.0 重写一遍显然是不现实的&#xff0c;但是 DotNetCore 是未来发展的趋势。所以本文通过以 WPF 为例&#xff…

.NET Core 时代已经到了,你准备好了吗

今天很多人都收到了阿里云函数计算支持.NET Core的短信了。通过访问 https://help.aliyun.com/document_detail/112379.html 你可以看到最新的说明。现在和过去的两年不同&#xff0c;因为最恶劣的时期已经过去&#xff0c;经历过了最黑暗的时刻&#xff0c;我们正在走向光明的…

ASP.NET Core appsettings.json文件(9)《从零开始学ASP.NET CORE MVC》:

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core launchsettings.json文件ASP.NET Core appsettings.json文件在本视频中&#xff0c;我们将讨论ASP.NET Core 项目中appsettings.json文件的重要性。在以前的ASP.NET版本中&#xff0c;我们将应用程序配…