惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
AWS News Blog
AWS News Blog
Google DeepMind News
Google DeepMind News
U
Unit 42
博客园 - 叶小钗
博客园 - 聂微东
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
D
DataBreaches.Net
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
美团技术团队
The Cloudflare Blog
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
S
Schneier on Security
C
Check Point Blog
Project Zero
Project Zero
The Hacker News
The Hacker News
Scott Helme
Scott Helme
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cisco Talos Blog
Cisco Talos Blog
P
Privacy International News Feed
SecWiki News
SecWiki News
Latest news
Latest news
MongoDB | Blog
MongoDB | Blog
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
H
Help Net Security
TaoSecurity Blog
TaoSecurity Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Last Week in AI
Last Week in AI
P
Privacy & Cybersecurity Law Blog
Forbes - Security
Forbes - Security
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
PCI Perspectives
PCI Perspectives
大猫的无限游戏
大猫的无限游戏
T
Troy Hunt's Blog
H
Hacker News: Front Page
Vercel News
Vercel News

博客园 - Bean.Hsiang

ML.NET 和 Model Builder 2021年三月更新 ML.NET 推荐引擎中一类矩阵因子分解的缺陷 使用 ML.NET 实现峰值检测来排查异常 4倍速!ML.NET Model Builder GPU 与 CPU 对比测试 使用 ML.NET 识别乐高颜色块 ML.NET 十一月更新 借助AI激发组织创新活力 Virtual ML.NET Hackathon 2020 来啦 ML.NET 九月更新 ML.NET API 和工具八月更新 通过 ML.NET 使用预训练残差网络 ResNet 模型实现手势识别 通过 Continual Learning 提高 ML.NET 模型准确性并增强性能 在WSL2启用cuda进行深度学习尝鲜 基于 ONNX 在 ML.NET 中使用 Pytorch 训练的垃圾分类模型 在 Blazor WebAssembly 静态网站中部署ML.NET机器学习模型 使用 Scikit-learn 和 ML.NET 实现朴素贝叶斯(Naive Bayes)分类器 恢复已取消ML.NET训练中的模型 说说 ML.NET and AutoML 使用ML.NET进行自定义机器学习
评估和改进 ML.NET 分类器
Bean.Hsiang · 2021-05-23 · via 博客园 - Bean.Hsiang

在上一篇文章《使用 ML.NET 识别乐高颜色块》,我们使用C#和 ML.NET 写了一个程序来训练ML模型,以识别乐高色块。在这篇文章中,我们将看看如何评估分类器的准确性,并修改分类器的可用参数,看看如何改进它。

机器学习有意思的地方在于使计算机可以学习做一些颇具想像力的事情,同时它有一个问题——我们不知道算法是如何工作的,最重要的是它何时能工作。正因如此,创建ML模型时我们需要对结果进行评测,并且只有在我们认为它足够好(这完全取决于应用程序)时才正式使用它。以下是一些用于评估ML模型的指标的基本内容:

Accuracy:测量分类器做出正确预测的比率。在多分类问题中,它被称为 micro-accuracy,并计算所有类的正样本预测。

Per-Class Accuracy:在多分类场景中,每个类的精度可能不同,因此我们可以计算每个类的准确性。计算Accuracy相同,但使用单个类实例。它也被称为 macro-Accuracy

Log-Loss:使用复杂的信息理论方程来测量分类器的置信度,我不会在这里写这个方程。。重要的是要知道 og-loss 越低越好,最低值为0,以获得完美的准确度

Log-Loss Reduction:一种可以解释为分类器比随机预测更好的测量值。它的范围从负无穷大到 1, 其中 1 是完美的预测, 0 是平均预测。我不知道负值(或平均预测)是什么意思,但总的来说更接近正数的那一个越好。

那么,我们实际上是如何做到这一点的呢? 当然是使用内置的函数在交叉验证时进行模型评估。在交叉验证中,输入的训练集被分为多个子集,然后神经网络将接受示例的训练,并与那些数据集一起进行评估。这样做是因为我们评估的不是一个特定的模型,而是神经网络的架构和用于创建模型的超参。什么是超参?超参是控制神经网络学习过程的参数。超参的一个例子是为训练模型而完成的迭代数。每个机器学习算法/框架都有不同的超参。

让我们来看看在示例中是什么样子:

static void Evaluate(MLContext mlContext, IDataView trainingDataView, IEstimator<ITransformer> trainingPipeline)
{
    Console.WriteLine("=============== Cross-validating to get model's accuracy metrics ===============");
    var crossValidationResults = mlContext.MulticlassClassification.CrossValidate(trainingDataView, trainingPipeline, numberOfFolds: 5, labelColumnName: "Label");
    PrintMulticlassClassificationFoldsAverageMetrics(crossValidationResults);
}

此交叉验证的结果是交叉验证结果列表,其中每个结果包含该数据集评估的指标。通过平均所有数据集上的指标,我们可以很好地了解我们的ML训练器和模型将如何进行的。

现在,我们可以测试对超参的修改,看看我们是否可以得到一个模型,可以正确识别我们的乐高样品。这是示范传递给ML训练器的参数而编写的实例。为了保持简单,我们将只修改其中两个:架构和迭代数。架构超参值定义了训练器使用哪个基础神经网络架构。做图像分类是一个很难解决的问题,需要很多时间,并且已经有非常复杂的神经网络模型,可以识别形状,轮廓甚至猫等。ML.NET 所做的是将现有的模型之一作为我们神经网络的起点,并从那里用我们的例子来训练它。这称为转移学习。ML.NET 有4种不同的架构。更改非常简单:

ImageClassificationTrainer.Options

var trainer = mlContext.MulticlassClassification.Trainers.ImageClassification(
    new ImageClassificationTrainer.Options() 
        {
            Arch = architecture,
            Epoch = epoch,
            FeatureColumnName = "Features",
            LabelColumnName = "Label", 
        })
        .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel", "PredictedLabel"));

为了了解这些超参如何影响分类器,我们现在使用所有可用的架构运行评估,以及 50、100、200 和 400 的迭代值(默认值为 200)。结果如下表所示。

正如你所看到的,MobilenetV2胜过其他算法。更有趣的是,跑一些训练迭代,就产生了更好的分类器效果。这不是我所期望的,而且由于训练量相对较小,因此没有可以从中吸取的一般结论。

最后,在我们的测试集上使用 MobilnetV2 运行分类器为我们提供了正确的结果:

Testing with black piece. Prediction: Black.
Testing with blue piece. Prediction: Blue.
Testing with green piece. Prediction: Green.
Testing with yellow piece. Prediction: Yellow.

本示例文件的完整代码可以在 [https://github.com/BeanHsiang/Vainosamples/tree/master/CSharp/ML/LegoColorIdentifier2] 上找到。

引用:

  1. 使用指标评估您的 ML.NET 模型
  2. 评估机器学习模型 - 关键概念和陷阱的初学者指南