使用简洁的工作流程实现分类的增量学习
这个例子展示了如何使用简洁的工作流程来实现带有前置评估的二元分类增量学习。具体来说,这个例子执行了以下操作:
为二进制分类创建一个默认的增量学习模型。
使用for循环模拟数据流,该循环将小块观测数据提供给增量学习算法。
对于每个块,使用
updateMetricsAndFit
测量给定传入数据的模型性能,然后将模型与该数据拟合。
尽管本例将应用程序视为二进制分类问题,但您可以通过遵循相同的工作流,使用对象为多类问题实现多类增量学习。
创建默认模型对象
为二进制分类创建一个默认的增量学习模型。
Mdl =增量分类线性()
Mdl = incrementalClassificationLinear IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' Beta: [0x1 double]偏差:0学习者:'svm'属性,方法
Mdl
是一个incrementalClassificationLinear
模型对象。它的所有属性都是只读的。
Mdl
在使用它执行任何其他操作之前,必须适合于数据。
加载和预处理数据
加载人类活动数据集。随机打乱数据。
负载humanactivityN = numel(actid);rng (1)%用于再现性Idx = randsample(n,n);X = feat(idx,:);Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
回答可以分为五类:坐着、站着、走着、跑着或跳舞。通过识别被测者是否在移动(actid
> 2)。
Y = Y > 2;
实施增量学习
方法来更新模型性能指标,并使增量模型适合训练数据updateMetricsAndFit
函数。在每次迭代中:
处理50个观测数据来模拟一个数据流。
将先前的增量模型覆盖为一个适合于新观测值的新模型。
存储累积指标、窗口指标和第一个系数 看看它们是如何在增量学习中进化的。
%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);Ce = array2table(0 (nchunk,2),“VariableNames”, (“累积”“窗口”]);Beta1 = 0 (nchunk,1);%增量拟合为j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min(n,numObsPerChunk*j);Idx = ibegin:iend;Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx));ce{j,:} = Mdl。指标{“ClassificationError”,:};beta1(j + 1) = Mdl.Beta(1);结束
Mdl
是一个incrementalClassificationLinear
在流中的所有数据上训练的模型对象。在增量学习期间和模型预热后,updateMetricsAndFit
检查模型在传入观测数据上的性能,然后将模型与这些观测数据拟合。
检查模型演化
看看性能指标和 在训练过程中进化,将它们绘制在单独的瓷砖上。
T = tiledlayout(2,1);Nexttile plot(beta1) ylabel(“\ beta_1”) xlim([0 nchunk]) nexttile h = plot(ce.Variables);Xlim ([0 nchunk]) ylabel(分类错误的)参照线(Mdl。MetricsWarmupPeriod / numObsPerChunk,“g -”。xlabel(t, ce.Properties.VariableNames)“迭代”)
情节表明updateMetricsAndFit
做以下事情:
适合 在所有增量学习迭代过程中。
仅在指标预热期之后计算性能指标。
在每次迭代期间计算累计度量。
在处理200个观测结果(4次迭代)后计算窗口度量。