使用灵活的工作流实现分类的增量学习
该示例展示了如何使用灵活的工作流实现带有前置评估的二元分类增量学习。传统训练的模型初始化增量模型。具体来说,这个例子执行了以下操作:
在数据子集上训练一个用于二元分类的线性模型。
将传统训练模型转换为增量学习模型进行二进制分类。
使用for循环模拟数据流,该循环将小块观测数据提供给增量学习算法。
对于每个块,使用
updateMetrics
来衡量模型的性能给定传入的数据,然后使用适合
让模型与数据相匹配。
尽管本例将应用程序视为二进制分类问题,但您可以通过遵循相同的工作流,使用对象为多类问题实现多类增量学习。
加载和预处理数据
加载人类活动数据集。随机打乱数据。在列中定位预测器数据的观测值。
负载humanactivityrng (1)%用于再现性N = numel(actid);Idx = randsample(n,n);X = feat(idx,:)';Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
回答可以分为五类:坐着、站着、走着、跑着或跳舞。通过识别被测者是否在移动(actid
> 2)。
Y = Y > 2;
二元分类训练线性模型
用二分之一的随机样本拟合二元分类的线性模型。指定观察值沿数据列方向排列。
Idxtt = randsample([true false],n,true);TTMdl = fitclinear(X(:,idxtt),Y(idxtt),“ObservationsIn”,“列”)
TTMdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double]偏差:-0.2999 Lambda: 8.2967e-05学习者:'svm'属性,方法
TTMdl
是一个ClassificationLinear
模型对象,表示用于二进制分类的传统训练线性模型。
转换训练模型
将传统训练的分类模型转换为增量学习的二元分类线性模型。
IncrementalMdl =增量学习者(TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1x2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double]偏差:-0.2999 Learner: 'svm'属性,方法
实施增量学习
方法来更新模型性能指标,并使增量模型适合训练数据updateMetrics
而且适合
单独的功能。通过一次处理50个观测数据来模拟数据流。在每次迭代中:
调用
updateMetrics
在给定传入观测数据块的情况下,更新模型的累积和窗口分类误差。的增量模型中更新损失指标
财产。注意,函数并没有将模型与数据块相匹配——数据块是模型的“新”数据。指定观察值以列为方向。调用
适合
使模型与观测数据相匹配。覆盖之前的增量模型以更新模型参数。指定观察值以列为方向。存储分类误差和第一次估计系数 .
%预先配置Idxil = ~idxtt;Nil = sum(idxil);numObsPerChunk = 50;nchunk = floor(nil/numObsPerChunk);Ce = array2table(0 (nchunk,2),“VariableNames”, (“累积”“窗口”]);beta1 = [incrementalmml . beta (1);0 (nchunk 1)];Xil = X(:,idxil);Yil = Y(idxil);%增量拟合为j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1);iend = min(nil,numObsPerChunk*j);Idx = ibegin:iend;增量mdl = updateMetrics(增量mdl,Xil(:,idx),Yil(idx),...“ObservationsIn”,“列”);ce{j,:} = IncrementalMdl。指标{“ClassificationError”,:};增量mdl = fit(增量mdl,Xil(:,idx),Yil(idx),“ObservationsIn”,“列”);beta1(j + 1) = incrementalmml . beta (end);结束
IncrementalMdl
是一个incrementalClassificationLinear
在流中的所有数据上训练的模型对象。
或者,您可以使用updateMetricsAndFit
更新给定数据块的模型的性能指标,然后将模型与数据进行拟合。
检查模型演化
绘制性能指标和估计系数的轨迹图 .
T = tiledlayout(2,1);nexttile h = plot(ce.Variables);Xlim ([0 nchunk]) ylabel(分类错误的nexttile plot(beta1) ylabel(“\ beta_1”xlim([0 nchunk]) xlabel(t,“迭代”)
累积损失是稳定的,并逐渐减小,而窗口损失跳跃。
起初变化突然,然后逐渐趋于平稳适合
处理更多的观察数据块。