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简介

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/):

netcore3-1024x983-1

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个步骤的具体实践。

posted @ 2019-04-06 20:51  dax.net  阅读(375)  评论(0编辑  收藏  举报