近期团队在研究机器学习, 希望通过机器学习实现补丁发布评估, 系统异常检测. 业务场景归纳一下:
收集整理数据(发布相关的异常日志, 告警数据), 标识出补丁发布情况(成功, 失败)
选择一个机器学习的 Model 进行 Train 训练
基于训练出的模型 (准确度要高) 进行最新补丁发布情况预测
典型的机器学习 - 监督学习的场景. 作为. Net 的忠实用户, 最近火热的 ML.NET 务必要尝试, 应用一把. 今天这篇文章作为一个入门, 分享给大家.
先拉个提纲吧:
1. ML.NET Model Builder 介绍及安装部署
2. 典型场景示例
一, ML.NET Model Builder 介绍及安装部署
首先, ML.NET Model Builder 是什么? 它有什么作用?
Model Builder 是一个简单的 UI 工具, 供开发人员在其应用程序中构建, 培训和发布自定义机器学习模型.
没有 ML 专业知识的开发人员可以使用这个简单的可视化界面连接到存储在文件或 SQL Server 中的数据, 训练模型并生成用于模型培训和消费的代码.
一句话总结一下: 机器学习建模工具, 通过一个 VS Designer 可视化构建一个机器学习模型. 同时生成一个示例和向导代码, 可重复使用.
1. 安装部署
官方的推荐是: Visual Studio 2017 15.9.12 or later
我本机安装了 VS2019 和 VS2017 Enterprise 版, 直接通过 下线了 VS 扩展插件 MLNET_Model_Builder.vsix. 双击安装:
VSIXInstaller.NoApplicableSKUsException: This extension is not installable on any currently installed products.
当前安装的 VS 无法安装这个扩展, 一顿 google, 依旧解决不了. 重新安装了 VS2017 和 VS2019 然并卵.
最后, 找到官方的推荐的 VS:Visual Studio 2017 15.9.12 or later 安装了 VS2017 的 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 文件即可.
选择输入结构化的样本数据后, 要指定一个机器学习要预测的列.
5. Train 训练, 评估
指定输入的数据和要预测的列, 进行训练. 训练的过程会评估 AutoML 中提供的各种算法的准确度.
Train 训练的时间, 随数据量的不同而不同
训练完成后, 会输出一个最佳准确度的算法, 同时生产一个模型文件, MLModel.zip, 供后续预测使用.
6. 生成可重复执行的代码
即将 ML.NET Model Builder 设计器向导的配置, 生成可重复执行的代码: 两个 C# Project, 一个 Model 的 Project, 一个 Console 的 Project.
二, 典型场景示例
第一大章节, 我们将整个 ML.NET 的建模过程做了梳理, 现在我们以微软的示例代码, 做一个实践应用.
这次我们选择用户反馈情感分析这个场景, 这几天我想了一下, 这个场景的实际价值是: 线上爬取指定产品的用户评论和反馈, 通过机器学习预测出产品的热度, 问题, 后续进行产品完善和市场活动.
话不多说, 开始吧.
1. 准备 TSV 数据
这个非常简单:, 这个文本拷贝到 Sublime Text 中, 另存为 data.tsv 文件
2. 新建. Net Core Console 应用, 右键添加 Machine Learning 项目
在选择场景步骤中, 我们选择第一个,"情感分析"
2. 选择样本数据, 进行训练, 预测
选择第一步我们准备好的 data.tsv 文件, 指定一个要预测的列 Sentiment
3. 开始样本数据的训练
训练的时间和数据量有关系, 一般的:
这里我们尝试了 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 实现更多的业务场景, 逐步分享给大家.
来源: http://www.bubuko.com/infodetail-3101089.html