机器学习,深度学习,ML.NET介绍使用

近期团队在研究机器学习,希望通过机器学习实现补丁发布评估,系统异常检测。业务场景归纳一下:

  1. 收集整理数据(发布相关的异常日志、告警数据),标识出补丁发布情况(成功、失败)
  2. 选择一个机器学习的Model进行Train训练
  3. 基于训练出的模型(准确度要高)进行最新补丁发布情况预测

典型的机器学习-监督学习的场景。作为.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标识和标注。

   总结概况一下:

  1.    样本数据必须是结构化的数据,确定的列和值
  2.    样本数据由各个维度列和一个预测维度列组成
  3.    样本数据中预测维度列的值需要手工标注,以便进行机器学习训练

   从上面的总结可以看出,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函数的代码:

  

复制代码

 1  //Machine Learning model to load and use for predictions
 2         private const string MODEL_FILEPATH = @"MLModel.zip";
 3 
 4         //Dataset to use for predictions 
 5         private const string DATA_FILEPATH = @"C:\Users\zhougq\Desktop\Data.tsv";
 6 
 7         static void Main(string[] args)
 8         {
 9             MLContext mlContext = new MLContext();
10 
11             // Training code used by ML.NET CLI and AutoML to generate the model
12             //ModelBuilder.CreateModel();
13 
14             ITransformer mlModel = mlContext.Model.Load(GetAbsolutePath(MODEL_FILEPATH), out DataViewSchema inputSchema);
15             var predEngine = mlContext.Model.CreatePredictionEngine(mlModel);
16 
17             // Create sample data to do a single prediction with it 
18             ModelInput sampleData = CreateSingleDataSample(mlContext, DATA_FILEPATH);
19 
20             // Try a single prediction
21             ModelOutput predictionResult = predEngine.Predict(sampleData);
22 
23             Console.WriteLine($"Single Prediction --> Actual value: {sampleData.Sentiment} | Predicted value: {predictionResult.Prediction}");
24 
25             Console.WriteLine("=============== End of process, hit any key to finish ===============");
26             Console.ReadKey();
27         }

复制代码

   上面的代码解读一下:

  •     构建一个MLContext
  •     MLContext上加载训练好的模型(MLModel.zip)
  •     输入要预测的数据
  •     预测,输出结果(ModelOutput)

  上面的代码是一个点睛之笔,我们可以想象一下:

  1. 每天正常的机器学习、训练,优化模型

  2. 线上数据,通过Kafka、文本等数据源,实时接入数据,进行预测

  3. 对预测的结果进行评估、对样本数据再纠正和标注,直至模型的准确率更高

  4. 作用与线上业务决策

  5. Loop

  是不是很赞,很简单,很容易理解,简化了我们对机器学习的建模、算法选择和评估。生产力工具,技术普惠。

  给ML.NET 点赞。

  后续我们将基于ML.NET实现更多的业务场景,逐步分享给大家。

周国庆

2019/6/23

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ML.NET是一种跨平台的机器学习框架,它提供了一种简单而有效的方式来训练、部署和使用机器学习模型。其中一个强大的功能是对象检测,它可以识别和定位图像中的特定对象。 对象检测是计算机视觉领域的一个重要任务,它广泛应用于物体识别、目标跟踪、自动驾驶等领域。通过使用ML.NET的对象检测功能,我们可以根据已有的标记数据来训练一个模型,然后使用该模型来检测图像中的特定对象。 ML.NET的对象检测功能基于深度学习技术,它采用了一种称为卷积神经网络(Convolutional Neural Network,CNN)的模型来实现。CNN是一种特别适用于图像处理任务的神经网络模型,它可以有效地捕捉图像中的细节和特征。 使用ML.NET进行对象检测的过程主要分为以下几步:准备标记数据、训练模型、评估模型和使用模型进行对象检测。首先,我们需要准备一组包含已标记对象的图像数据,标记数据可以通过手动标记或使用专门的工具进行标记。然后,我们使用这些标记数据来训练一个对象检测模型,ML.NET提供了一些预定义的模型架构,也可以根据需求自定义网络架构。训练模型的过程通常需要一定的时间和计算资源。完成训练后,我们可以使用评估数据对模型进行评估,以检查其性能和准确性。最后,我们可以使用训练好的模型对新的图像进行对象检测,并输出对象的位置和类别。 通过使用ML.NET的对象检测功能,我们可以在各种领域中实现一些有趣和有用的应用,比如自动驾驶中的物体识别和障碍物检测、工业自动化中的零部件检测和质量控制等。ML.NET的对象检测功能使得开发者能够更加轻松地构建和部署自己的对象检测模型,为图像处理任务提供了一种简单而强大的解决方案。 ### 回答2: ML.NET 是一个基于 .NET 平台的开源机器学习框架,可以用于构建各种机器学习模型。其中的对象检测功能可以用于识别图像中的不同对象,并将其框定出来。 在 ML.NET使用对象检测有以下几个步骤: 1. 数据准备:首先需要准备训练数据,即一组包含图像和对应边界框的标注数据。这些标注数据可以通过人工标注或者使用已有的标注工具生成。此外,还需要将数据转化为 ML.NET 可以处理的格式。 2. 模型训练:接下来,使用准备好的数据来训练对象检测模型。在 ML.NET 中,可以选择使用预训练的模型进行迁移学习,也可以从头开始训练一个新的模型。训练过程可以通过调整超参数、增加正则化等手段来提高模型的性能。 3. 模型评估:完成模型训练后,需要进行评估以检查其性能。可以使用一组独立的测试数据进行评估,计算出模型的准确率、召回率、F1 值等指标。 4. 预测:一旦模型训练和评估完成,就可以使用该模型对未知图像进行对象检测。通过将图像输入到模型中,模型会返回一个或多个边界框,表示检测到的对象及其位置。可以根据需要进行后续处理,比如筛选检测置信度高的边界框、连接相邻的边界框等。 总体来说,ML.NET 的对象检测功能提供了一种便捷的方式来识别图像中的不同对象,并可以通过模型训练和评估来提高检测性能。无论是在计算机视觉、自动驾驶、安防监控等领域,对象检测都具有重要的应用价值。 ### 回答3: ML.NET 是一个开源的机器学习框架,可以用于训练和部署自定义的机器学习模型。ML.NET 对象检测是指使用 ML.NET 框架对图像或视频中的对象进行识别和定位。 为了进行对象检测,首先需要通过对训练数据进行标注,以提供模型所需的正确答案。一般来说,训练数据包括图像或视频以及对象的边界框。然后,可以使用 ML.NET 中的一些预训练模型作为基础,也可以自定义模型来训练对象检测模型。 训练完成后,我们可以使用训练好的模型来进行对象检测。对于图像对象检测,只需将图像输入到模型中,它将输出对象的类别和位置信息。对于视频对象检测,可以逐帧地对每一帧进行识别。 ML.NET 提供了一些用于对象检测的预训练模型,如 YOLOv2 和 TinyYOLOv2。这些模型具备较高的准确性和效率,适用于各种对象检测任务。此外,ML.NET 还支持使用 TensorFlow 模型进行对象检测,可以通过将 TensorFlow 模型转换为 ONNX 格式来实现。 ML.NET 对象检测在实际应用中有着广泛的应用,例如车辆识别、人脸识别、物体追踪等。使用 ML.NET 对象检测,我们可以根据具体需求开发出各种应用,帮助我们识别和定位图像或视频中的对象,提升工作效率和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值