ML.NET技术研究系列1-入门篇
近期团队在研究机器学习,希望通过机器学习实现补丁发布评估,系统异常检测。业务场景归纳一下:
- 收集整理数据(发布相关的异常日志、告警数据),标识出补丁发布情况(成功、失败)
- 选择一个机器学习的Model进行Train训练
- 基于训练出的模型(准确度要高)进行最新补丁发布情况预测
典型的机器学习-监督学习的场景。作为.Net的忠实用户,最近火热的ML.NET务必要尝试、应用一把。今天这篇文章作为一个入门,分享给大家。
先拉个提纲吧:
1. ML.Net Model Builder 介绍及安装部署
2. 典型场景示例
一、ML.Net Model Builder介绍及安装部署
首先,ML.Net Model Builder是什么?它有什么作用?
https://marketplace.visualstudio.com/items?itemName=MLNET.07
Model Builder是一个简单的UI工具,供开发人员在其应用程序中构建,培训和发布自定义机器学习模型。
没有ML专业知识的开发人员可以使用这个简单的可视化界面连接到存储在文件或SQL Server中的数据,训练模型并生成用于模型培训和消费的代码。
一句话总结一下:机器学习建模工具,通过一个VS Designer 可视化构建一个机器学习模型。同时生成一个示例和向导代码,可重复使用。
1. 安装部署
官方的推荐是:Visual Studio 2017 15.9.12 or later
我本机安装了VS2019和VS2017 Enterprise版,直接通过https://marketplace.visualstudio.com/items?itemName=MLNET.07 下线了VS扩展插件MLNET_Model_Builder.vsix。双击安装:
VSIXInstaller.NoApplicableSKUsException: This extension is not installable on any currently installed products.
当前安装的VS无法安装这个扩展,一顿google,https://github.com/dotnet/machinelearning-samples/issues/451 依旧解决不了。重新安装了VS2017和VS2019 然并卵。
最后,找到官方的推荐的VS:Visual Studio 2017 15.9.12 or later 安装了社区版的VS2019的 vs_community__425161747.1541050689


终于安装成功。
2. 新建一个 .Net Core控制台Project,添加Machine Learning项目

弹出 ML.Net Model Builder设计器,说明可以开始机器学习建模了。
3. 开始机器学习建模
微软将机器学习建模的典型场景进行了抽象和分类,主要有以下三种:
regression:回归类机器学习模型:典型场景有:价格预测、销售额预测等等
binary classification:二元分类机器学习模型,典型场景有:用户评论情感分析(消极 or 积极)、交易风险预测(是 or 否)
multi-classification:多维分类机器学习模型。典型场景有:用户画像、数据分类
另外,ML.Net 还支持自定义建模。

4. 准备Train 机器学习训练需要的样本数据
通过微软提供的示例样本数据和场景下,目前机器学习训练的样本数据都是结构化的数据,确定的维度、值。同时,需要对要预测的维度数据进行Label标识和标注。
总结概况一下:
- 样本数据必须是结构化的数据,确定的列和值
- 样本数据由各个维度列和一个预测维度列组成
- 样本数据中预测维度列的值需要手工标注,以便进行机器学习训练
从上面的总结可以看出,ML.NET 属于监督学习这一类。
样本数据的格式:支持CSV(逗号间隔)、TSV(Tab间隔)和SQL Server。
至于怎么另存为TSV文件,其实很简单,Copy示例数据到文本编辑器,另存为**.tsv文件即可。https://raw.githubusercontent.com/dotnet/machinelearning/master/test/data/wikipedia-detox-250-line-data.tsv
选择输入结构化的样本数据后,要指定一个机器学习要预测的列。
5. Train训练、评估
指定输入的数据和要预测的列,进行训练。训练的过程会评估AutoML中提供的各种算法的准确度。
Train训练的时间,随数据量的不同而不同
训练完成后,会输出一个最佳准确度的算法,同时生产一个模型文件,MLModel.zip, 供后续预测使用。
6. 生成可重复执行的代码
即将ML.NET Model Builder 设计器向导的配置,生成可重复执行的代码:两个C# Project,一个Model的Project,一个Console的Project。
二、典型场景示例
第一大章节,我们将整个ML.NET的建模过程做了梳理,现在我们以微软的示例代码,做一个实践应用。
这次我们选择用户反馈情感分析这个场景,这几天我想了一下,这个场景的实际价值是:线上爬取指定产品的用户评论和反馈,通过机器学习预测出产品的热度、问题,后续进行产品完善和市场活动。
话不多说,开始吧。
1. 准备TSV数据
这个非常简单:https://raw.githubusercontent.com/dotnet/machinelearning/master/test/data/wikipedia-detox-250-line-data.tsv,这个文本拷贝到Sublime Text中,另存为data.tsv文件
2. 新建.Net Core Console 应用,右键添加 Machine Learning项目
在选择场景步骤中,我们选择第一个,“情感分析”

3. 选择样本数据,进行训练,预测
选择第一步我们准备好的data.tsv文件,指定一个要预测的列Sentiment

4. 开始样本数据的训练
训练的时间和数据量有关系,一般的:



这里我们尝试了10s和30s,推荐的算法和准确度没有变化,只是尝试机器学习训练的算法要多:

5. 生成可重复执行的代码工程

生成代码后,会在当前解决方案中多了两个Project,一个是Model的Project,一个Console的Project,我们深入看一下

其中Model Project中主要包含:
模型的输入类和输出类,其中:
- 输入类ModelInput是对我们输入数据的结构化描述
- 输出类ModelOutput是包含预测列和评估准确度
还有一个机器学习样本数据训练完成后的MLModel.zip文件,供后续数据预测用。
Console Project中,主要形成了一个可重复执行的代码:重点看Main函数的代码:
//Machine Learning model to load and use for predictions
private const string MODEL_FILEPATH = @"MLModel.zip"; //Dataset to use for predictions
private const string DATA_FILEPATH = @"C:\Users\zhougq\Desktop\Data.tsv"; static void Main(string[] args)
{
MLContext mlContext = new MLContext(); // Training code used by ML.NET CLI and AutoML to generate the model
//ModelBuilder.CreateModel(); ITransformer mlModel = mlContext.Model.Load(GetAbsolutePath(MODEL_FILEPATH), out DataViewSchema inputSchema);
var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel); // Create sample data to do a single prediction with it
ModelInput sampleData = CreateSingleDataSample(mlContext, DATA_FILEPATH); // Try a single prediction
ModelOutput predictionResult = predEngine.Predict(sampleData); Console.WriteLine($"Single Prediction --> Actual value: {sampleData.Sentiment} | Predicted value: {predictionResult.Prediction}"); Console.WriteLine("=============== End of process, hit any key to finish ===============");
Console.ReadKey();
}
上面的代码解读一下:
- 构建一个MLContext
- MLContext上加载训练好的模型(MLModel.zip)
- 输入要预测的数据
- 预测,输出结果(ModelOutput)
上面的代码是一个点睛之笔,我们可以想象一下:
1. 每天正常的机器学习、训练,优化模型
2. 线上数据,通过Kafka、文本等数据源,实时接入数据,进行预测
3. 对预测的结果进行评估、对样本数据再纠正和标注,直至模型的准确率更高
4. 作用与线上业务决策
5. Loop
是不是很赞,很简单,很容易理解,简化了我们对机器学习的建模、算法选择和评估。生产力工具,技术普惠。
给ML.NET 点赞。
后续我们将基于ML.NET实现更多的业务场景,逐步分享给大家。
周国庆
2019/6/23
ML.NET技术研究系列1-入门篇的更多相关文章
- ML.NET技术研究系列-2聚类算法KMeans
上一篇博文我们介绍了ML.NET 的入门: ML.NET技术研究系列1-入门篇 本文我们继续,研究分享一下聚类算法k-means. 一.k-means算法简介 k-means算法是一种聚类算法,所谓聚 ...
- Azure IoT 技术研究系列1-入门篇
物联网技术已经火了很多年了,业界各大厂商都有各自成熟的解决方案.我们公司主要搞新能源汽车充电,充电桩就是我们物联网技术的最大应用,车联网.物联网. 互联网三网合一.作为Azure重要的Partner和 ...
- Azure IoT 技术研究系列2-起步示例之设备注册到Azure IoT Hub
上篇博文中,我们主要介绍了Azure IoT Hub的基本概念.架构.特性: Azure IoT 技术研究系列1-入门篇 本文中,我们继续深入研究,做一个起步示例程序:模拟设备注册到Azure IoT ...
- Azure IoT 技术研究系列2-设备注册到Azure IoT Hub
上篇博文中,我们主要介绍了Azure IoT Hub的基本概念.架构.特性: Azure IoT 技术研究系列1-入门篇 本文中,我们继续深入研究,做一个起步示例程序:模拟设备注册到Azure IoT ...
- Azure IoT 技术研究系列2
上篇博文中,我们主要介绍了Azure IoT Hub的基本概念.架构.特性: Azure IoT 技术研究系列1-入门篇 本文中,我们继续深入研究,做一个起步示例程序:模拟设备注册到Azure IoT ...
- Azure Event Hub 技术研究系列2-发送事件到Event Hub
上篇博文中,我们介绍了Azure Event Hub的一些基本概念和架构: Azure Event Hub 技术研究系列1-Event Hub入门篇 本篇文章中,我们继续深入研究,了解Azure Ev ...
- Azure IoT 技术研究系列3-设备到云、云到设备通信
上篇博文中我们将模拟设备注册到Azure IoT Hub中:我们得到了设备的唯一标识. Azure IoT 技术研究系列2-设备注册到Azure IoT Hub 本文中我们继续深入研究,设备到云.云到 ...
- Azure IoT 技术研究系列4-Azure IoT Hub的配额及缩放级别
上两篇博文中,我们介绍了将设备注册到Azure IoT Hub,设备到云.云到设备之间的通信: Azure IoT 技术研究系列2-设备注册到Azure IoT Hub Azure IoT 技术研究系 ...
- Azure Event Hub 技术研究系列3-Event Hub接收事件
上篇博文中,我们通过编程的方式介绍了如何将事件消息发送到Azure Event Hub: Azure Event Hub 技术研究系列2-发送事件到Event Hub 本篇文章中,我们继续:从Even ...
随机推荐
- JSON 的使用方法
JSON--JavaScript Object Notation,是一种轻量级的数据交互格式,本质是特定格式的字符串,相比xml更简洁,现在是客户端与服务器端交互的最常用选择,已经很少用xml了 JS ...
- Linux之数据库
crm 1.一定得会用linux发行版 centos 熟悉各种linux命令 2.你的确保linux服务器可以上网 , 一定得有ip地址,且确保dns解析正常 /etc/resolv.conf 3.上 ...
- Asp.net Core 创建控制器时出错问题记录(运行所选代码生成器时出错)
问题描述:在创建一个MVC控制器(带读写,使用EF) 解决方法:添加nuget包
- Luogu P3223 [HNOI2012]排队 组合
本来做了一道 P4901 排队 后来发现自己做错题了...到也都是数学qwq 这题最恶心的就是两只(雾)老师. 那我们分类讨论: 1.两个老师之间是男生: $ A(n,n)*A(n+1,2)*A(n ...
- Chapter11
package scala import scala.collection.mutable /** * Created by EX-CHENZECHAO001 on 2018-04-03. */cla ...
- Microsoft JDBC Driver 使用 getParameterMetaData 会报错?
不知道为何使用 Microsoft JDBC Driver for SQL Server 驱动时,sql语句不带参数没有问题,但是如果带参数且使用 getParameterMetaData 就会提示某 ...
- mysql主从复制之同步部分库表
这里以mariadb为例,和mysql一样的配置 系统:centos7 主服务器:192.168.0.1:3305(两台服务器都做过时间同步) 从服务器:192.168.0.2:3306(两台服务器都 ...
- (转)Linux: dirname、basename命令详解
Linux: dirname.basename命令详解 原文:http://blog.sina.com.cn/s/blog_3f63916f010143vo.html 一.dirname指令 1.功能 ...
- RabbitMQ使用教程(四)如何通过持久化保证消息99.99%不丢失?
1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 RabbitMQ使用 ...
- Spring Cloud微服务初探
学习初衷 因为加了不少优秀的知识星球,结交了更多的小伙伴,加了更多的群,每每在自我介绍的时候,都说自己是Android & Java攻城狮. 然鹅,有的小伙伴就来问了,你是搞Java的,那对S ...