主要内容

updateMetrics

更新线性模型中的性能指标,以提供新的数据进行增量学习

描述

给定流数据,updateMetrics衡量线性回归的配置增量学习模型的性能(incrementalRegressionLinear对象)或线性二元分类(incrementalClassificationLinear对象)。updateMetrics将性能指标存储在输出模型中。

updateMetrics允许灵活的增量学习。在调用函数来更新传入数据块上的模型性能度量之后,您可以在将模型训练为数据之前执行其他操作。例如,您可以根据模型在数据块上的性能来决定是否需要训练模型。或者,您可以在一次调用中更新模型性能度量,并在数据到达时对模型进行训练updateMetricsAndFit函数。

要在指定的数据批处理上度量模型性能,调用损失代替。

例子

Mdl= updateMetrics (MdlXY返回一个增量学习模型Mdl,即输入增量学习模型Mdl修改为包含传入预测器和响应数据的模型性能指标,X而且Y分别。

当输入模型为温暖的Mdl。IsWarm真正的),updateMetrics对象中存储的先前计算的度量值指标属性,使用新值。否则,updateMetrics商店指标代替。

输入和输出模型具有相同的数据类型。

例子

Mdl= updateMetrics (MdlXY名称,值使用由一个或多个名称-值对参数指定的其他选项。例如,您可以指定预测器数据矩阵的列对应于观测值,并设置观测值的权重。

例子

全部折叠

训练二元分类的线性模型fitclinear,将其转换为增量学习器,然后跟踪其性能到流数据。

加载和预处理数据

加载人类活动数据集。随机打乱数据。

负载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))
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'属性,方法
IncrementalMdl。IsWarm
ans =逻辑1

增量模式是温暖的。因此,updateMetrics可以跟踪给定数据的模型性能指标。

跟踪绩效指标

方法跟踪其余数据上的模型性能updateMetrics函数。通过一次处理50个观察数据来模拟数据流。在每次迭代中:

  1. 调用updateMetrics更新模型的累积分类误差和窗口分类误差。覆盖前面的增量模型以更新中的损失指标财产。注意,该函数并没有使模型适合数据块—数据块是模型的“新”数据。

  2. 存储分类误差和第一系数 β 1

%预先配置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;IncrementalMdl = updateMetrics(IncrementalMdl,Xil(idx,:),Yil(idx));ce{j,:} = IncrementalMdl。指标{“ClassificationError”,:};beta1(j + 1) = IncrementalMdl.Beta(1);结束

IncrementalMdl是一个incrementalClassificationLinear跟踪模型性能到数据流中的观察结果的模型对象。

绘制性能指标和估计系数的轨迹图 β 1

图;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]);包含(“迭代”

图中包含两个轴。坐标轴1包含2个line类型的对象。这些对象表示累积、窗口。坐标轴2包含一个line类型的对象。

累积损耗是稳定的,而窗口损耗是跳变的。

β 1 不会改变是因为updateMetrics不能将模型与数据相匹配。

为二元分类建立增量线性支持向量机模型。指定5000个观测值的估计周期和SGD求解器。

Mdl = incrementalClassificationLinear“EstimationPeriod”, 5000,“规划求解”“sgd”
Mdl = incrementalClassificationLinear IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' Beta: [0x1 double] Bias: 0 Learner: 'svm'属性,方法

Mdl是一个incrementalClassificationLinear模型。它的所有属性都是只读的。

通过查询模型属性,确定模型是否温暖,以及度量预热周期的大小。

isWarm = Mdl。IsWarm
isWarm =逻辑0
mwp = Mdl。指标WarmupPeriod
MWP = 1000

Mdl。IsWarm0;因此,Mdl不是温暖。

确定观测量的增量拟合函数,如适合,必须在测量模型的性能之前处理。

numObsBeforeMetrics = Mdl。MetricsWarmupPeriod + Mdl。EstimationPeriod
numObsBeforeMetrics = 6000

加载人类活动数据集。随机打乱数据。

负载humanactivityN = numel(actid);rng (1)%用于重现性Idx = randsample(n,n);X = feat(idx,:);Y = actid(idx);

有关数据集的详细信息,请输入描述在命令行。

反应可以是五种类型中的一种:坐、站、走、跑或跳舞。通过判断被试者是否在移动(actid> 2)。

Y = Y > 2;

进行增量学习。在每次迭代中,执行以下操作:

  • 通过处理50个观察数据块来模拟数据流。

  • 在传入的块上度量模型性能度量updateMetrics.覆盖输入模型。

  • 使模型适合传入的块。覆盖输入模型。

  • 商店 β 1 以及错误分类错误率来观察它们在增量学习中是如何进化的。

%预先配置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 = updateMetrics(Mdl,X(idx,:),Y(idx));ce{j,:} = Mdl。指标{“ClassificationError”,:};Mdl = fit(Mdl,X(idx,:),Y(idx));beta1(j) = Mdl.Beta(1);结束

IncrementalMdl是一个incrementalClassificationLinear对流中的所有数据进行训练的模型对象。

要了解在增量学习过程中参数是如何演变的,可以将它们绘制在单独的子图上。

图;Subplot (2,1,1) plot(beta1) ylabel(“\ beta_1”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);包含(“迭代”)轴次要情节(2,1,2)情节(ce.Variables);ylabel (“ClassificationError”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);参照线(numObsBeforeMetrics / numObsPerChunk,“g -”。);包含(“迭代”) xlim([0 nchunk]);传奇(ce.Properties.VariableNames)

图中包含两个轴。坐标轴1包含两个类型为line、constantline的对象。坐标轴2包含4个类型为line、constantline的对象。这些对象表示累积、窗口。

mdlIsWarm = numObsBeforeMetrics/numObsPerChunk
mdlIsWarm = 120

情节表明适合在估计期之后才将模型与数据拟合或更新参数。同时,updateMetrics直到估计和度量预热期(120块)之后才跟踪分类错误。

只有当线性回归模型的性能下降时才递增地训练它。

加载和洗牌2015年纽约市住房数据集。有关数据的更多详细信息,请参见纽约开放数据

负载NYCHousing2015rng (1)%用于重现性n = size(NYCHousing2015,1);shuffle = randsample(n,n);NYCHousing2015 = NYCHousing2015(shuffidx,:);

提取响应变量SALEPRICE从桌子上。为了数值的稳定性,刻度SALEPRICE通过1 e6

Y = nychousing2015 . sales /1e6;NYCHousing2015。销售价= [];

从分类预测器创建虚拟变量矩阵。

Catvars = [“区”“BUILDINGCLASSCATEGORY”“社区”];dumvarstbl = varfun(@(x)dummyvar(category (x)),NYCHousing2015,...“数据源”, catvars);Dumvarmat = table2array(dumvarstbl);NYCHousing2015(:,catvars) = [];

将表中所有其他数值变量视为销售价格的线性预测因子。将虚拟变量矩阵连接到其余的预测数据,并对数据进行转置,以加快计算速度。

idxnum = varfun(@isnumeric,NYCHousing2015,“OutputFormat”“统一”);X = [dumvarmat NYCHousing2015{:,idxnum}]';

为增量学习配置一个线性回归模型,这样它就没有估计或度量的预热期。指定度量窗口大小为1000个观察值。将配置的模型与前100个观测值相匹配,并指定观测值沿数据列方向排列。

Mdl = incrementalRegressionLinear(“EstimationPeriod”0,“MetricsWarmupPeriod”0,...“MetricsWindowSize”, 1000);numObsPerChunk = 100;Mdl = fit(Mdl,X(:,1:numObsPerChunk),Y(1:numObsPerChunk),“ObservationsIn”“列”);

Mdl是一个incrementalRegressionLinear模型对象。

执行增量学习,使用条件拟合,对每次迭代执行以下步骤:

  • 通过处理100个观察数据块来模拟数据流。

  • 在200观察窗口内,通过计算epsilon不敏感损失来更新模型性能。指定观察值沿数据列方向排列。

  • 只有当损失是所经历的最小损失的两倍以上时,才对数据块进行模型拟合。指定观察值沿数据列方向排列。

  • 在跟踪性能和拟合时,覆盖以前的增量模型。

  • 存储不敏感损耗和 β 313 观察损耗和系数在训练过程中的变化。

  • 跟踪时适合训练模型。

%预先配置n = numel(Y) - numObsPerChunk;nchunk = floor(n/numObsPerChunk);Beta313 = 0 (nchunk,1);Ei = array2table(nan(nchunk,2),“VariableNames”,[“累积”“窗口”]);训练有素= false(nchunk,1);%增量拟合j = 2:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min(n,numObsPerChunk*j);Idx = ibegin:iend;Mdl = updateMetrics(Mdl,X(:,idx),Y(idx),“ObservationsIn”“列”);ei{j,:} = Mdl。指标{“EpsilonInsensitiveLoss”,:};Minei = min(ei{:,2});Pdiffloss = (ei{j,2} - minei)/minei*100;如果pdiffloss > 100 Mdl = fit(Mdl,X(:,idx),Y(idx),“ObservationsIn”“列”);受训(j) = true;结束beta313(j) = Mdl.Beta(end);结束

Mdl是一个incrementalRegressionLinear对流中的所有数据进行训练的模型对象。

看看模型的性能和 β 313 在训练中进化出来的,把它们画在单独的副图上。

Subplot (2,1,1) plot(beta313) hold住情节(找到(训练),beta313(训练),“r”。) ylabel (“\ beta_”{313})参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);传奇(“\ beta_”{313}培训发生的“位置”“东南”)举行subplot(2,1,2)“爱扑塞隆不敏感损失”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);包含(“迭代”传奇(ei.Properties.VariableNames)

图中包含两个轴。坐标轴1包含3个类型为line、constantline的对象。这些对象表示\beta_{313},训练发生。坐标轴2包含3个类型为line、constantline的对象。这些对象表示累积、窗口。

的迹图 β 313 显示恒定值的周期,在此期间损失没有从最小经验翻倍。

输入参数

全部折叠

增量学习模型的性能被测量,指定为incrementalClassificationLinearincrementalRegressionLinear模型对象。你可以创建Mdl直接或通过转换一个受支持的,传统训练的机器学习模型使用万博1manbetxincrementalLearner函数。有关更多详细信息,请参见相应的参考页面。

如果Mdl。IsWarmupdateMetrics不跟踪模型的性能。你必须合身MdlMdl。EstimationPeriod + Mdl。MetricsWarmupPeriod通过观察Mdl数据是适合之前updateMetrics可以跟踪性能指标。有关更多细节,请参见算法

用于度量模型性能的预测数据块,指定为的浮点矩阵n观察和Mdl。NumPredictors预测变量。的值“ObservationsIn”名值对参数决定变量和观察值的方向。

观察标签的长度Y观察到的数量X必须是平等的;Y (j是观察的标签吗j(行或列)在X

请注意

  • 如果Mdl。NumPredictors= 0,updateMetrics推断预测器的数量X,设置输出模型的同余属性。否则,如果流数据中的预测器变量的数量从Mdl。NumPredictorsupdateMetrics发出错误。

  • updateMetrics万博1manbetx仅支持浮点输入预测器数据。如果输入模型Mdl表示一个经过转换的、传统训练的适合分类数据的模型dummyvar将每个类别变量转换为虚拟变量的数值矩阵,并将所有虚拟变量矩阵与任何其他数值预测器连接起来。有关更多细节,请参见虚拟变量

数据类型:|

用于度量模型性能的标签块,指定为类别、字符或字符串数组、逻辑或浮点向量,或用于分类问题的字符向量单元格数组;或者用浮点向量来解决回归问题。

观察标签的长度Y观察到的数量X必须是平等的;Y (j是观察的标签吗j(行或列)在X

对于分类问题:

  • updateMetrics万博1manbetx只支持二进制分类。

  • 一会属性Mdl非空,则适用以下条件:

    • 如果Y的成员之外的标签Mdl。一会updateMetrics发出错误。

    • 的数据类型Y而且Mdl。一会一定是一样的。

数据类型:字符|字符串|细胞|分类|逻辑||

请注意

如果观察(预测器或标签)或权重重量包含至少一个缺失的()的值,updateMetrics忽略观察结果。因此,updateMetrics使用少于n计算模型性能的观察结果。

名称-值对实参

指定逗号分隔的可选对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“ObservationsIn”、“列”、“重量”,W指定预测器矩阵的列对应于观察值和向量W包含在增量学习过程中应用的观察权重。

预测器数据观测维数,指定为逗号分隔的对,由“ObservationsIn”而且“列”“行”

数据类型:字符|字符串

观察权重块,指定为逗号分隔的对,由“重量”和一个正的浮点向量。updateMetrics权衡观察结果X对应的值权重.的大小权重必须等于n的观测次数X

默认情况下,权重(n, 1)

有关更多细节,包括规范化方案,请参见观察权重

数据类型:|

输出参数

全部折叠

更新的增量学习模型,作为与输入模型具有相同数据类型的增量学习模型对象返回Mdl,要么incrementalClassificationLinearincrementalRegressionLinear

如果模型不是热的,updateMetrics不计算性能指标。结果,指标的属性Mdl仍然完全由值。如果模型是温的,updateMetrics计算新数据上的累积和窗口性能指标X而且Y的对应元素Mdl。指标.输入模型的所有其他属性Mdl转到输出模型Mdl.有关更多细节,请参见算法

提示

  • 与传统训练不同,增量学习可能没有单独的测试集。因此,要将每个传入的数据块视为一个测试集,将增量模型和每个传入的数据块传递给updateMetrics在训练模型之前使用相同的数据适合

算法

全部折叠

性能指标

  • updateMetrics中表的行标签指定的仅跟踪模型性能指标Mdl。指标,从新数据时的增量模型温暖的IsWarm属性是真正的).增量模型是暖后的适合函数适合增量模型Mdl。MetricsWarmupPeriod观察,也就是指标预热期

    如果Mdl。EstimationPeriod> 0,函数在模型拟合数据之前估计超参数。因此,函数必须处理附加的EstimationPeriod模型开始度量预热期之前的观察。

  • 指标属性将每个性能指标的两种形式存储为表的变量(列),累积而且窗口,将单个指标按行排列。当增量模型是温暖的,updateMetrics以以下频率更新指标:

    • 累积-该函数计算自模型性能跟踪开始以来的累积度量。每次调用该函数时,该函数都会更新度量,并基于整个提供的数据集进行计算。

    • 窗口函数根据窗口内的所有观察结果计算指标Mdl。MetricsWindowSize财产。Mdl。MetricsWindowSize还决定软件更新的频率窗口指标。例如,如果Mdl。MetricsWindowSize为20,该函数根据所提供数据中的最近20个观察结果计算指标(X((end - 20 + 1):end,:)而且Y((end - 20 + 1):end)).

      跟踪窗口内性能指标的增量函数使用以下过程:

      1. 对于每个指定的度量,存储一个长度的缓冲区Mdl。MetricsWindowSize和一个观察权重的缓冲。

      2. 根据批量传入的观察数据,用模型性能填充度量缓冲区的元素,并在权重缓冲区中存储相应的观察权重。

      3. 当缓冲区被填满时,重写Mdl.Metrics.Window使用指标窗口中的加权平均性能。如果在函数处理一批观察时缓冲区被填满,则最新传入的Mdl。MetricsWindowSize观测数据进入缓冲区,最早的观测数据从缓冲区中删除。例如,假设Mdl。MetricsWindowSize为20时,指标缓冲区有10个值来自先前处理的批处理,15个值是传入的。为了组成长度为20的窗口,该函数使用来自15个传入观察的测量值和来自前一批的最新5个测量值。

观察权重

对于分类问题,如果先验类概率分布已知(换句话说,先验分布不是经验的),updateMetrics将观察权重归一化,使之与各自类中的先验类概率相加。这个动作意味着,默认情况下,观察权重是各自的先验类概率。

对于回归问题,或者如果先验类概率分布是经验的,软件将指定的观察权重归一化,每次调用时总和为1updateMetrics

扩展功能

在R2020b中引入