这个例子展示了如何使用灵活的工作流来实现具有前置评估的二进制分类增量学习。传统的训练模型初始化增量模型。具体来说,这个例子做了以下工作:
训练一个线性模型,对一个数据子集进行二进制分类。
将传统的训练模型转化为增量学习模型进行二元分类。
使用for循环模拟数据流,该循环向增量学习算法提供小块的观察数据。
对于每个块,使用updateMetrics
要测量给定传入数据的模型性能,然后使用适合
让模型符合数据
虽然本例将应用程序视为一个二进制分类问题,但您可以通过遵循相同的工作流,使用朴素贝叶斯算法实现多类增量学习。看到incrementalClassificationNaiveBayes
对象。
加载人工活动数据集。随机打乱数据。在列中调整预测数据的观察结果。
负载humanactivityrng (1);%的再现性n =元素个数(actid);idx = randsample (n, n);X =壮举(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] Bias: -0.3965 Lambda: 8.2967 -05 Learner: 'svm'属性,方法
TTMdl
是一个ClassificationLinear
模型对象表示用于二进制分类的传统训练的线性模型。
将传统的分类训练模型转化为二元分类线性模型进行增量学习。
IncrementalMdl = incrementalLearner (TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1x2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double] Bias: -0.3965 Learner: 'svm'属性,方法
使用灵活的工作流来更新模型性能指标,并通过调用updateMetrics
和适合
单独的功能。通过一次处理50个观测值来模拟一个数据流。在每一次迭代:
调用updateMetrics
更新模型的累积和窗口分类误差,给出观测数据块。覆盖之前的增量模型更新损失指标
财产。注意,函数并没有使模型适合数据块——数据块是模型的“新”数据。指定观察以列为方向。
调用适合
使模型适合观测数据块。覆盖之前的增量模型以更新模型参数。指定观察以列为方向。
存储分类误差和第一估计系数 .
%预先配置idxil = ~ idxtt;nil =总和(idxil);numObsPerChunk = 50;nchunk =地板(nil / numObsPerChunk);ce = array2table (0 (nchunk, 2),“VariableNames”,[“累积”“窗口”]);beta1 = [IncrementalMdl.Beta (1);0 (nchunk 1)];自= X (:, idxil);Yil = Y (idxil);%增量式拟合为j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1);iend = min (nil, numObsPerChunk * j);idx = ibegin: iend;IncrementalMdl = updateMetrics (IncrementalMdl自(:,idx) Yil (idx),...“ObservationsIn”,“列”);ce {j:} = IncrementalMdl。指标{“ClassificationError”,:};IncrementalMdl =适合(IncrementalMdl自(:,idx) Yil (idx),“ObservationsIn”,“列”);beta1(j + 1) = IncrementalMdl.Beta(end);结束
IncrementalMdl
是一个incrementalClassificationLinear
模型对象对流中的所有数据进行训练。
或者,您可以使用updateMetricsAndFit
在给定一个新的数据块的情况下,更新模型的性能指标,然后使模型适合于数据。
绘制性能指标和估计系数的跟踪图 .
图;subplot(2,1,1) h = plot(ce.Variables);xlim ([0 nchunk]);ylabel (分类错误的) legend(h,ce.Properties.VariableNames) subplot(2,1,2) plot(beta1) ylabel(“\ beta_1”) xlim ([0 nchunk]);包含(“迭代”)
累积损耗是稳定的,并逐渐减小,而窗口损耗是跳跃的。
一开始变化很突然,然后逐渐趋于稳定适合
处理更多的观测块。