罗兰关于MATLAB的艺术

将想法转化为matlab

使用Automl的几步构建优化的型号

或者:没有专业知识的优化机器学习

今天,我想介绍伯恩哈德苏姆,担任MathWorks的机器产品经理。在加入Mathworks Bernhard LED分析师团队之前,并开发了应用分析的方法,以优化呼叫中心的客户服务。在今天的帖子中,Bernhard讨论了获得优化机器学习模型如何通过应用Automl更轻松,更快更快。而不是需要大量的机器学习专业知识和延续漫长的迭代优化过程,Automl以几步提供良好的模型。

软件要求:执行此脚本需要MATLAB版本R2020a。

内容

什么是AutoML?

建立良好的机器学习模型是一个迭代的过程(如下图所示)。实现良好的性能需要大量的努力:选择一个模型(然后选择一个不同的模型),识别和提取特征,甚至添加更多或更好的训练数据。

即使是经验丰富的机器学习专家也知道,要最终得到一个性能良好的机器学习模型,需要大量的试验和错误。

今天,我将向您展示如何使用AutoML自动化以下一个(或全部)阶段。

  1. 识别具有预测能力但不是冗余的特征
  2. 减少特性集以避免过拟合,并且(如果您的应用程序需要)适合在功率和内存有限的硬件上运行模型
  3. 选择最佳模型并调整其超参数

上面的图1显示了一个典型的机器学习工作流。橙色框表示我们将使用AutoML自动执行的步骤,下面的示例将介绍自动执行特征提取、模型选择、超参数调整和特征选择步骤的过程。

示例应用程序:人类活动分类器

我们将使用区分您在移动设备中的加速度计获得的数据进行区分的任务来展示Automl。对于这个例子,我们正在努力区分五项活动:站立,坐着,沿楼沿楼往下vs。下面的图2显示了分类器是128个样本的处理缓冲器,代表2.56秒的活动,窗口与信号重叠一半。我们将使用包含25个受试者和6873个观察的培训集,以及包含5个受试者和约600个观察的测试组。

让我们首先准备我们的研讨会并加载示例数据。

警告离开;RNG('默认');

负载加速度计数据分为训练集和测试集

负载datahumanactivity.mat.

掌握样本数量

UnbuffeedCounts = GroupCounts(不禁止的棘爪,{“主题”'活动'});

现在我们准备讨论将AutoML应用于信号和图像数据的三个主要步骤,并将它们应用于我们的人类活动分类问题:

  1. 利用小波散射提取初始特征
  2. 自动选择要素的一小部分
  3. 模型选择与优化

第一步:应用小波散射自动提取初始特征

机器学习从业者知道获得良好的功能可能需要花费大量时间,并且对于没有必要的域知识的人来说是直接令人生畏的,就像用信号处理一样。Automl提供功能生成方法,可从传感器和图像数据中自动提取高执行功能。一种这样的方法是小波散射,其衍生,具有最小的配置,来自信号(和图像)数据的低方差特征,用于用于机器学习和深度学习应用。

你不需要理解小波散射来成功地应用它,但简单地说,小波通过分离不同尺度的变化来变换信号中的小变形。对于许多自然信号,小波变换也提供了稀疏表示。事实证明,经过充分训练的深层网络的初始层中的滤波器类似于小波滤波器。小波散射网络代表这样一组预先定义的滤波器。

要应用小波散射,您只需要采样频率,数据集中缓冲区中的最小样本数,以及使用内置功能应用小波变换的函数featureMatrix在一组信号数据中。我们在附录中包括了一种方法;或者作为一种替代方法,您可以申请featureMatrix横跨A.数据存储

N = min (unbufferedCounts.GroupCount);科幻小说= waveletScattering ('signallength'N“采样频率”, 50);trainWavFeatures = extractFeatures (unbufferedTrain,科幻,N);testWavFeatures = extractFeatures (unbufferedTest,科幻,N);

在这个人类活动数据上,我们获得了468个小波功能 - 相当多 - 但自动化的功能选择将有助于我们削减它们。

步骤2:自动特征选择

特征选择通常用于以下两个主要原因:

  • 减小大型模型的尺寸,使其适合内存(和电源)受限的嵌入式设备
  • 防止过度拟合

由于小波散射通常从信号或图像中提取数百个特征,因此与几十个手动设计的特征相比,需要将它们减少到更小的数量。

有许多方法可用于自动选择要素。在这里是一个全面的概述什么是在MATLAB中可用的。根据经验,邻域成分分析(fscnca)最大相关性和最小冗余(FSCMRMR.)在有限的运行时间内提供良好的结果。让我们将MRMR应用于我们的人类活动数据,并绘制前50个排名特征:

[mrmrFeatures,scores]=fscmrmr(特征,'活动');茎(分数(mrmrFeatures (1:50)),'博');

一旦我们对所有特性进行了排名,我们就需要决定使用多少个预测因子。事实证明,相当少的小波特征提供了良好的性能。对于本例,为了能够将使用AutoML获得的模型的性能与人类活动分类器的早期版本进行比较,我们从>60个手动设计的特征中选择了与我们选择的相同的数量,而忽略了低方差特征。交叉验证的优化精度表明16到28之间的特征数量略高,这取决于您应用的特征选择方法。

topFeaturesMRMR=mrmrFeatures(1:14);

步骤3:一步获得优化模型

机器学习中没有单尺寸适合 - 您需要尝试多种模型来查找表演者。此外,最佳性能需要仔细调整控制算法的行为的超参数。手动超级参数调整需要专家体验,拇指规则,或众多参数组合的Brute-Force搜索。自动化的HyperParameter调整使得可以轻松找到最佳设置,并且通过应用贝叶斯优化可以最大限度地减少计算负担。贝叶斯优化内部维护了一个目标函数的代理模型,并且在每次迭代中确定最有前途的下一个参数组合,平衡朝向可能是尚未评估的区域的最佳选择。

贝叶斯优化也可以应用于识别模型的类型。我们新的菲特考托使用R2020A释放的功能使用元学习模型来缩小所考虑的一组模型。鉴于特征的各种特征,META学习模型识别非常适合于机器学习问题的候选模型的小子集。元学习启发式派生从公开的数据集得出,可以计算预先确定的特征,并与各种模型相关联,以及它们的性能。

菲特考托,识别模型和优化的超参数的最佳组合基本上成为一个衬里,除了定义控制执行的一些基本参数,如将迭代的数量限制为50(将运行时间保持为几分钟)。

opts = struct(“MaxObjectiveEvaluations”, 50岁,“ShowPlots”,真正的);modelAuto = fitcauto (trainWavFeatures (:, topFeaturesMRMR),...trainWavFeatures.activity,“学习者”“所有”...“HyperparameterOptimizationOptions”,选择);
| ==================================================================================================================== ||磨练|eval |目标|目标|Bestsofar |Bestsofar |学习者|HyperParameter:价值| | | result | | runtime | (observed) | (estim.) | | | |====================================================================================================================| | 1 | Best | 0.10489 | 5.4013 | 0.10489 | 0.10489 | ensemble | Method: RUSBoost | | | | | | | | | NumLearningCycles: 87 | | | | | | | | | LearnRate: 0.88361 | | | | | | | | | MinLeafSize: 14 | | 2 | Accept | 0.15733 | 0.064101 | 0.10489 | 0.10489 | tree | MinLeafSize: 147 | | 3 | Accept | 0.16178 | 0.071101 | 0.10489 | 0.10489 | knn | NumNeighbors: 8 | | | | | | | | | Distance: correlation | | 4 | Best | 0.056 | 0.077703 | 0.056 | 0.10489 | nb | DistributionNames: normal | | | | | | | | | Width: NaN | | 5 | Accept | 0.31822 | 178.04 | 0.056 | 0.10489 | svm | Coding: onevsall | | | | | | | | | BoxConstraint: 881.45 | | | | | | | | | KernelScale: 0.052695 | | 6 | Accept | 0.072 | 1.3751 | 0.056 | 0.0648 | nb | DistributionNames: kernel | | | | | | | | | Width: 0.013961 | | 7 | Accept | 0.10667 | 0.073527 | 0.056 | 0.0648 | discr | Delta: 1.0971 | | | | | | | | | Gamma: 0.26706 | | 8 | Accept | 0.6 | 0.062479 | 0.056 | 0.0648 | discr | Delta: 8.1232 | | | | | | | | | Gamma: 0.69599 | | 9 | Accept | 0.096 | 16.472 | 0.056 | 0.0648 | ensemble | Method: RUSBoost | | | | | | | | | NumLearningCycles: 290 | | | | | | | | | LearnRate: 0.0054186 | | | | | | | | | MinLeafSize: 9 | | 10 | Accept | 0.058667 | 0.062727 | 0.056 | 0.0648 | discr | Delta: 0.0010027 | | | | | | | | | Gamma: 0.91826 | | 11 | Accept | 0.067556 | 0.080417 | 0.056 | 0.0648 | tree | MinLeafSize: 3 | | 12 | Accept | 0.8 | 0.061978 | 0.056 | 0.0648 | discr | Delta: 316.68 | | | | | | | | | Gamma: 0.97966 | | 13 | Accept | 0.46844 | 0.35913 | 0.056 | 0.0648 | svm | Coding: onevsall | | | | | | | | | BoxConstraint: 0.001978 | | | | | | | | | KernelScale: 3.4614 | | 14 | Accept | 0.10844 | 0.072236 | 0.056 | 0.0648 | tree | MinLeafSize: 17 | | 15 | Accept | 0.056 | 0.074398 | 0.056 | 0.060053 | nb | DistributionNames: normal | | | | | | | | | Width: NaN | | 16 | Accept | 0.056889 | 0.06201 | 0.056 | 0.060053 | discr | Delta: 0.00061575 | | | | | | | | | Gamma: 0.81629 | | 17 | Accept | 0.8 | 0.06456 | 0.056 | 0.060053 | knn | NumNeighbors: 2 | | | | | | | | | Distance: jaccard | | 18 | Accept | 0.11111 | 0.070893 | 0.056 | 0.060053 | tree | MinLeafSize: 19 | | 19 | Accept | 0.49511 | 0.098951 | 0.056 | 0.060053 | knn | NumNeighbors: 544 | | | | | | | | | Distance: minkowski | | 20 | Accept | 0.094222 | 0.066813 | 0.056 | 0.060053 | knn | NumNeighbors: 10 | | | | | | | | | Distance: cosine | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Learner | Hyperparameter: Value | | | result | | runtime | (observed) | (estim.) | | | |====================================================================================================================| | 21 | Accept | 0.061333 | 10.548 | 0.056 | 0.060053 | svm | Coding: onevsall | | | | | | | | | BoxConstraint: 298.57 | | | | | | | | | KernelScale: 1.4571 | | 22 | Accept | 0.8 | 0.074188 | 0.056 | 0.060053 | discr | Delta: 92.633 | | | | | | | | | Gamma: 0.48063 | | 23 | Accept | 0.090667 | 0.92212 | 0.056 | 0.060053 | ensemble | Method: AdaBoostM2 | | | | | | | | | NumLearningCycles: 17 | | | | | | | | | LearnRate: 0.0013648 | | | | | | | | | MinLeafSize: 5 | | 24 | Accept | 0.11111 | 0.098575 | 0.056 | 0.060053 | tree | MinLeafSize: 57 | | 25 | Accept | 0.056 | 0.080269 | 0.056 | 0.0604 | nb | DistributionNames: normal | | | | | | | | | Width: NaN | | 26 | Accept | 0.14222 | 0.54873 | 0.056 | 0.0604 | svm | Coding: onevsone | | | | | | | | | BoxConstraint: 148.79 | | | | | | | | | KernelScale: 27.357 | | 27 | Accept | 0.10222 | 1.0631 | 0.056 | 0.0604 | ensemble | Method: AdaBoostM2 | | | | | | | | | NumLearningCycles: 20 | | | | | | | | | LearnRate: 0.02154 | | | | | | | | | MinLeafSize: 109 | | 28 | Accept | 0.6 | 3.1074 | 0.056 | 0.0604 | ensemble | Method: AdaBoostM2 | | | | | | | | | NumLearningCycles: 83 | | | | | | | | | LearnRate: 0.0038432 | | | | | | | | | MinLeafSize: 412 | | 29 | Accept | 0.11022 | 0.41982 | 0.056 | 0.0604 | svm | Coding: onevsone | | | | | | | | | BoxConstraint: 0.8938 | | | | | | | | | KernelScale: 1.2517 | | 30 | Accept | 0.056889 | 0.064237 | 0.056 | 0.0604 | discr | Delta: 4.0389e-06 | | | | | | | | | Gamma: 0.7838 | | 31 | Accept | 0.6 | 0.97945 | 0.056 | 0.0604 | ensemble | Method: AdaBoostM2 | | | | | | | | | NumLearningCycles: 25 | | | | | | | | | LearnRate: 0.005856 | | | | | | | | | MinLeafSize: 391 | | 32 | Best | 0.027556 | 1.4236 | 0.027556 | 0.0604 | svm | Coding: onevsone | | | | | | | | | BoxConstraint: 568.53 | | | | | | | | | KernelScale: 2.5259 | | 33 | Accept | 0.10222 | 0.071448 | 0.027556 | 0.0604 | tree | MinLeafSize: 16 | | 34 | Accept | 0.058667 | 0.06672 | 0.027556 | 0.0604 | discr | Delta: 5.6703e-06 | | | | | | | | | Gamma: 0.0022725 | | 35 | Accept | 0.072889 | 1.2183 | 0.027556 | 0.0604 | ensemble | Method: AdaBoostM2 | | | | | | | | | NumLearningCycles: 24 | | | | | | | | | LearnRate: 0.026186 | | | | | | | | | MinLeafSize: 36 | | 36 | Accept | 0.078222 | 0.075859 | 0.027556 | 0.0604 | tree | MinLeafSize: 7 | | 37 | Accept | 0.056889 | 0.063344 | 0.027556 | 0.0604 | discr | Delta: 0.00043899 | | | | | | | | | Gamma: 0.72219 | | 38 | Accept | 0.23644 | 0.92978 | 0.027556 | 0.10559 | nb | DistributionNames: kernel | | | | | | | | | Width: 0.0018864 | | 39 | Accept | 0.45867 | 180.44 | 0.027556 | 0.10559 | svm | Coding: onevsall | | | | | | | | | BoxConstraint: 122.06 | | | | | | | | | KernelScale: 0.013471 | | 40 | Accept | 0.072 | 0.063096 | 0.027556 | 0.10559 | knn | NumNeighbors: 4 | | | | | | | | | Distance: cosine | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Learner | Hyperparameter: Value | | | result | | runtime | (observed) | (estim.) | | | |====================================================================================================================| | 41 | Accept | 0.10756 | 0.073934 | 0.027556 | 0.10611 | tree | MinLeafSize: 41 | | 42 | Accept | 0.35111 | 1.242 | 0.027556 | 0.10611 | nb | DistributionNames: kernel | | | | | | | | | Width: 10.9 | | 43 | Accept | 0.058667 | 0.064954 | 0.027556 | 0.10611 | discr | Delta: 0.011214 | | | | | | | | | Gamma: 0.626 | | 44 | Accept | 0.056 | 0.075895 | 0.027556 | 0.10611 | nb | DistributionNames: normal | | | | | | | | | Width: NaN | | 45 | Accept | 0.68444 | 0.86246 | 0.027556 | 0.10611 | nb | DistributionNames: kernel | | | | | | | | | Width: 0.00020857 | | 46 | Accept | 0.8 | 0.085589 | 0.027556 | 0.10611 | knn | NumNeighbors: 543 | | | | | | | | | Distance: jaccard | | 47 | Accept | 0.056889 | 0.063729 | 0.027556 | 0.10611 | discr | Delta: 2.2103e-05 | | | | | | | | | Gamma: 0.73064 | | 48 | Accept | 0.099556 | 0.073035 | 0.027556 | 0.10611 | knn | NumNeighbors: 11 | | | | | | | | | Distance: euclidean | | 49 | Accept | 0.21156 | 0.12333 | 0.027556 | 0.10611 | knn | NumNeighbors: 74 | | | | | | | | | Distance: mahalanobis | | 50 | Accept | 0.056 | 0.076537 | 0.027556 | 0.10611 | nb | DistributionNames: normal | | | | | | | | | Width: NaN | __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 50 reached. Total function evaluations: 50 Total elapsed time: 554.4276 seconds. Total objective function evaluation time: 407.7031 Best observed feasible point is a multiclass svm model with: Coding (ECOC): onevsone BoxConstraint: 568.53 KernelScale: 2.5259 Observed objective function value = 0.027556 Estimated objective function value = 0.21986 Function evaluation time = 1.4236 Best estimated feasible point (according to models) is a tree model with: MinLeafSize: 147 Estimated objective function value = 0.10611 Estimated function evaluation time = 0.075541

在50次迭代之后,该数据集上的最佳执行模型是一个ADA升级的决策树,其达到了14个功能,在保持测试数据上有99%的精度。这与您可以使用手动设计功能和模型调整可以获得的最佳模型相比比较!

predicationauto =预测(Modelauto,testwavfeatures);精度= 100 *和(testwavfeatures.activity == predictionauto)/尺寸(testwavfeatures,1);圆形(准确性)
ans=88

概括

总之,我们描述了一种方法,该方法将为信号和图像分类任务建立有效的机器学习模型简化为三个简单步骤:应用小波散射技术自动提取特征;第二,自动特征选择,识别一小部分特征,精度损失很小;第三,自动选择和优化一个性能接近由熟练数据科学家手动优化的模型的模型。AutoML使在机器学习方面几乎没有专业知识的从业者能够获得接近最佳性能的模型。

本文仅提供了今天Matlab在Matlab中提供的自动机构的高级概述。作为统计和机器学习工具箱的产品管理器。我总是很想听到你对自动机的用例和期望。以下是您探索的一些资源。

  • 了解更多关于AutoML的信息这里
  • 通过扩展我们的心音分类器演示使用菲特考托找到一个好的模型

这里留言分享你的想法。

附录:小波散射函数

这是一个将小波散射应用于信号数据缓冲区的函数。

功能Featuret =提取物(Rawdata,staptfcct,n)% EXTRACTFEATURES。M -应用小波散射对原始数据(三维%信号加上“活动”标签),在长度为N的信号上使用散射FCT%从原始数据(第2-4列)中提取X、Y、Z,并按主题排序signalData = table2array (rawData (: 2:4));[gTrain, ~,activityTrain] = findgroups(rawData. txt);主题,rawData.activity);对每个主题的所有行应用小波散射特征矩阵。%我们得到三维矩阵(#特征,#时间间隔,3个信号)小波矩阵=splitapply(@(x){特征矩阵(scatterFct,(x(1:N,:)))},信号数据,gTrain);featureT=表格;%我们将建立的功能表在上面创建的每个小波矩阵上的%循环i = 1:大小(waveletmatrix,1)Oneo = WaveletMatrix {i};%过程这个观察这个观察=[oneO(:,:,1);oneO(:,:,2);oneO(:,:,3)];thisObservation=array2table(thisObservation');%不要忘记将要素从行转换为列featuret = [fexuret;thepobservation];结束%通过为主题X活动获得的每行“小波”功能重复标签来获得标签FeatureT.Activity = Repelem(活动截头,大小(WaveletMatrix {1},2));结束




发布MATLAB®R2020A

|

注释

如需留言,请点击这里登录到您的MathWorks帐户或创建新帐户。