这个例子展示了如何使用灵活的工作流来实现带有前置求值的二元分类的增量学习。传统训练的模型初始化增量模型。具体来说,这个示例执行以下操作:
训练一个线性模型,在数据的子集上进行二元分类。
将传统训练的模型转换为用于二元分类的增量学习模型。
使用for循环模拟一个数据流,它向增量学习算法提供小块的观察结果。
对于每个块,使用updateMetrics
测量给定传入数据的模型性能,然后使用适合
让模型与数据相匹配。
尽管这个示例将应用程序视为一个二进制分类问题,但是您可以使用朴素贝叶斯算法来实现多类增量学习,而不是遵循相同的工作流程。看到incrementalClassificationNaiveBayes
对象。
加载人类活动数据集。随机打乱数据。在列中定位预测数据的观察结果。
负载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.3965 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.3965学习者:'svm'属性,方法
使用灵活的工作流来更新模型性能度量,并将增量模型与训练数据相匹配updateMetrics
而且适合
单独的功能。通过一次处理50个观察数据来模拟数据流。在每次迭代中:
调用updateMetrics
更新模型的累积分类误差和窗口分类误差。覆盖前面的增量模型以更新中的损失指标
财产。注意,该函数并没有使模型适合数据块—数据块是模型的“新”数据。指定观察以列为方向。
调用适合
使模型与传入的观察数据块相匹配。覆盖前面的增量模型以更新模型参数。指定观察以列为方向。
存储分类误差和第一次估计系数 .
%预先配置Idxil = ~idxtt;Nil = sum(idxil);numObsPerChunk = 50;nchunk =地板(nil/numObsPerChunk);Ce = array2table(0 (nchunk,2),“VariableNames”, (“累积”“窗口”]);beta1 = [IncrementalMdl.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
更新给定新数据块的模型的性能度量,然后使模型与数据相匹配。
绘制性能指标和估计系数的轨迹图 .
图;subplot(2,1,1) h = plot(ce.Variables);xlim ([0 nchunk]);ylabel (分类错误的(h,ce.Properties.VariableNames) subplot(2,1,2) plot(beta1) ylabel(“\ beta_1”) xlim([0 nchunk]);包含(“迭代”)
累积损耗是稳定的,并逐渐减小,而窗口损耗是跳变的。
起初变化突然,然后逐渐稳定下来适合
处理更多的观察块。