updateMetrics
在新数据下更新朴素贝叶斯增量学习分类模型的性能指标
描述
给定流数据,updateMetrics
测量用于增量学习的配置朴素贝叶斯分类模型的性能(incrementalClassificationNaiveBayes
对象)。updateMetrics
将性能指标存储在输出模型中。
updateMetrics
允许灵活的增量学习。在您调用函数来更新传入数据块上的模型性能指标之后,您可以在将模型训练为数据之前执行其他操作。例如,您可以根据模型在数据块上的表现来决定是否需要训练模型。方法,可以在一次调用中更新模型性能指标,并在数据到达时对模型进行训练updateMetricsAndFit
函数。
要度量模型在指定批数据上的性能,请调用损失
代替。
例子
增量模型的跟踪性能
训练朴素贝叶斯分类模型fitcnb
,将其转换为增量学习器,然后跟踪其表现为流数据。
加载和预处理数据
加载人类活动数据集。随机打乱数据。
负载humanactivityrng (1)%用于再现性N = numel(actid);Idx = randsample(n,n);X = feat(idx,:);Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
训练朴素贝叶斯分类模型
将朴素贝叶斯分类模型拟合到一半数据的随机样本中。
Idxtt = randsample([true false],n,true);TTMdl = fitcnb(X(idxtt,:),Y(idxtt))
TTMdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 12053 DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell}属性,方法
TTMdl
是一个ClassificationNaiveBayes
表示传统训练模型的模型对象。
转换训练模型
将传统训练的分类模型转换为朴素贝叶斯分类模型进行增量学习。
IncrementalMdl =增量学习者(TTMdl)
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell}属性,方法
增量模式是温暖的。因此,updateMetrics
可以跟踪给定数据的模型性能指标。
跟踪绩效指标
方法跟踪模型在其余数据上的性能updateMetrics
函数。通过一次处理50个观测数据来模拟数据流。在每次迭代中:
调用
updateMetrics
在给定传入观测数据块的情况下,更新模型的累积和窗口最小代价。的增量模型中更新损失指标
财产。注意,函数并没有将模型与数据块相匹配——数据块是模型的“新”数据。将第一个预测器的最小代价和平均值存储在第一个类中 .
%预先配置Idxil = ~idxtt;Nil = sum(idxil);numObsPerChunk = 50;nchunk = floor(nil/numObsPerChunk);MC = array2table(0 (nchunk,2),“VariableNames”, (“累积”“窗口”]);mu11 = [incrementalmld . distributionparameters {1,1}(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(增量mdl,Xil(idx,:),Yil(idx));mc{j,:} = IncrementalMdl。指标{“MinimalCost”,:};mu11(j + 1) = incrementalmld . distributionparameters {1,1}(1);结束
IncrementalMdl
是一个incrementalClassificationNaiveBayes
模型对象,该对象跟踪了数据流中观察到的模型性能。
绘制性能指标和的跟踪图 .
T = tiledlayout(2,1);nexttile h = plot(mc.Variables);Xlim ([0 nchunk]) ylabel(“最小成本”(h,mc.Properties.VariableNames) nexttile plot(mu11) ylabel(“\ mu_{11}”xlim([0 nchunk]) xlabel(t,“迭代”)
累积损失是稳定的,而窗口损失在整个训练过程中不断跳跃。
不会改变是因为updateMetrics
不能将模型与数据拟合。
配置增量模型来跟踪性能指标并指定权重
通过调用创建一个用于增量学习的朴素贝叶斯分类模型incrementalClassificationNaiveBayes
并在数据中指定最多5个期望的类。除了最小成本外,还要指定跟踪错误分类错误率。
Mdl = incrementalClassificationNaiveBayes(“MaxNumClasses”5,“指标”,“classiferror”);
Mdl
是一个incrementalClassificationNaiveBayes
模型。它的所有属性都是只读的。
通过查询model属性确定模型是否为warm。
isWarm = Mdl。IsWarm
isWarm =逻辑0
Mdl。IsWarm
是0
;因此,Mdl
就是不温暖。
确定观察数的增量拟合函数,如适合
,必须在通过显示指标预热期的大小来测量模型的性能之前进行处理。
numObsBeforeMetrics = Mdl。MetricsWarmupPeriod
numObsBeforeMetrics = 1000
加载人类活动数据集。随机打乱数据。
负载humanactivityN = numel(actid);rng (1)%用于再现性Idx = randsample(n,n);X = feat(idx,:);Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
假设来自静止对象的数据(Y
<= 2)的数据质量是移动对象的两倍。创建一个权重变量,将来自静止主体的观测值赋值为2,将1赋值给移动主体。
W = ones(n,1) + (Y <= 2);
通过在每次迭代中执行以下操作来实现增量学习:
通过处理50个观测数据块来模拟数据流。
使用传入块度量模型性能指标
updateMetrics
.指定相应的观测权重并覆盖输入模型。将模型与传入的数据块相匹配。指定相应的观测权重并覆盖输入模型。
商店 以及错误分类错误率来观察它们在增量学习中是如何进化的。
%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);Ce = array2table(0 (nchunk,2),“VariableNames”, (“累积”“窗口”]);Mu11 = 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),“重量”W (idx));ce{j,:} = Mdl。指标{“ClassificationError”,:};Mdl = fit(Mdl,X(idx,:),Y(idx),“重量”W (idx));mu11(j) = mld . distributionparameters {1,1}(1);结束
现在,Mdl
是一个incrementalClassificationNaiveBayes
在流中的所有数据上训练的模型对象。
要了解参数在增量学习过程中是如何演变的,请将它们绘制在单独的块上。
T = tiledlayout(2,1);Nexttile plot(mu11)“\ mu_{11}”)包含(“迭代”)轴紧nexttile plot(ce.Variables)“ClassificationError”)参照线(numObsBeforeMetrics / numObsPerChunk,r -。xlim([0 nchunk]) legend(ce.Properties.VariableNames)“迭代”)
mdlIsWarm = numObsBeforeMetrics/numObsPerChunk
mdlIsWarm = 20
情节表明适合
总是让模型符合数据,而且updateMetrics
直到指标预热期(20块)之后才跟踪分类错误。
进行条件训练
只有当朴素贝叶斯分类模型的性能下降时,才对其进行增量训练。
加载人类活动数据集。随机打乱数据。
负载humanactivityN = numel(actid);rng (1)%用于再现性Idx = randsample(n,n);X = feat(idx,:);Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
配置一个用于增量学习的朴素贝叶斯分类模型,使期望的最大类数为5,跟踪的性能指标包括误分类错误率,指标窗口大小为1000。将配置的模型拟合到前1000个观察值。
Mdl = incrementalClassificationNaiveBayes(“MaxNumClasses”5,“MetricsWindowSize”, 1000,...“指标”,“classiferror”);Initobs = 1000;Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl
是一个incrementalClassificationNaiveBayes
模型对象。
使用条件拟合执行增量学习,每次迭代都遵循以下步骤:
通过一次处理100个观测数据块来模拟数据流。
更新传入数据块上的模型性能。
只有当错分类错误率大于0.05时,模型才能拟合数据块。
在跟踪性能和拟合时,覆盖之前的增量模型。
将第一个预测器的误分类错误率和平均值存储在第二类中 看看他们在训练中是如何进化的。
跟踪时
适合
训练模型。
%预先配置numObsPerChunk = 100;nchunk = floor((n - initobs)/numObsPerChunk);Mu21 = 0 (nchunk,1);Ce = array2table(nan(nchunk,2),“VariableNames”, (“累积”“窗口”]);训练= false(nchunk,1);%增量拟合为j = 1: ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs);iend = min(n,numObsPerChunk*j + initobs);Idx = ibegin:iend;Mdl = updateMetrics(Mdl,X(idx,:),Y(idx));ce{j,:} = Mdl。指标{“ClassificationError”,:};如果ce{j,2} > 0.05 Mdl = fit(Mdl,X(idx,:),Y(idx));训练(j) = true;结束mu21(j) = mld . distributionparameters {2,1}(1);结束
Mdl
是一个incrementalClassificationNaiveBayes
在流中的所有数据上训练的模型对象。
看看模型的性能如何 在训练过程中进化,将它们绘制在单独的瓷砖上。
T = tiledlayout(2,1);Nexttile地块(mu21)持有在情节(找到(训练),mu21(训练),“r”。xlim([0 nchunk]) ylabel(“\ mu_{21}”)传说(“\ mu_{21}”,培训发生的,“位置”,“最佳”)举行从nexttile plot(ce.Variables) xlim([0 nchunk])“错误分类错误率”)传说(ce.Properties.VariableNames“位置”,“最佳”)包含(t)“迭代”)
的轨迹图 显示常值周期,在此期间,前一个观测窗口内的损失最大为0.05。
输入参数
Mdl
- - - - - -增量学习的朴素贝叶斯分类模型
incrementalClassificationNaiveBayes
模型对象
朴素贝叶斯分类模型用于度量增量学习的性能,指定为incrementalClassificationNaiveBayes
模型对象。你可以创建Mdl
直接或通过转换支持的,传统训练的机器学习模型使用金宝appincrementalLearner
函数。更多详细信息,请参见相应的参考页面。
如果Mdl。IsWarm
是假
,updateMetrics
不跟踪模型的性能。之前updateMetrics
可以跟踪性能指标,您必须执行以下所有操作:
拟合输入模型
Mdl
到所有期望的类(请参阅MaxNumClasses
而且一会
参数的incrementalClassificationNaiveBayes
).
X
- - - - - -预测数据块
浮点矩阵
用于度量模型性能的预测数据块,指定为n——- - - - - -Mdl。NumPredictors
浮点矩阵。
观察标签的长度Y
观察的次数X
必须平等;Y (
是观察的标签吗j(行)j
)X
.
请注意
如果Mdl。NumPredictors
= 0,updateMetrics
从中推断预测器的数量X
,并设置输出模型的相应属性。否则,如果流数据中的预测变量数量从Mdl。NumPredictors
,updateMetrics
产生一个错误。
数据类型:单
|双
Y
- - - - - -标签块
分类数组|字符数组|字符串数组|逻辑向量|浮点矢量|字符向量的单元格数组
用于测量模型性能的标签块,指定为类别、字符或字符串数组;逻辑或浮点向量;或者是字符向量的单元格数组。
观察标签的长度Y
观察的次数X
必须平等;Y (
是观察的标签吗j(行)j
)X
.
updateMetrics
当满足以下一个或两个条件时发出错误:
Y
包含一个新标签,并且已经达到最大类数(请参阅MaxNumClasses
而且一会
参数的incrementalClassificationNaiveBayes
).的
一会
属性的输入模型Mdl
是否为非空,数据类型为Y
而且Mdl。一会
是不同的。
数据类型:字符
|字符串
|细胞
|分类
|逻辑
|单
|双
请注意
如果一个观察值(预测值或标签)或权重包含至少一个缺失(南
)的值,updateMetrics
忽略观察结果。因此,updateMetrics
使用少于n计算模型性能的观测值,其中n观察的数量在吗X
.
输出参数
提示
与传统的训练不同,增量学习可能没有单独的测试(坚持)集。因此,要将每个传入的数据块视为一个测试集,将增量模型和每个传入的数据块传递给
updateMetrics
在训练模型之前使用相同的数据适合
.
算法
性能指标
updateMetrics
中表的行标签指定的仅跟踪模型性能指标Mdl。指标
,只有当增量模型为时,才能从新数据中获得温暖的(IsWarm
属性是真正的
).如果您通过使用
incrementalLearner
而且MetricsWarmupPeriod
为0(默认为incrementalLearner
),模型在创作时是温暖的。否则,增量模型在
适合
函数执行以下两种操作:拟合增量模型
Mdl。MetricsWarmupPeriod
观察,也就是指标预热期.使增量模型适合所有预期的类(请参阅
MaxNumClasses
而且一会
参数的incrementalClassificationNaiveBayes
).
Mdl。指标
将每个性能指标的两种形式存储为表的变量(列),累积
而且窗口
,将单个指标列成行。当增量模型为温模型时,updateMetrics
以以下频率更新指标:累积
-该函数计算自模型性能跟踪开始以来的累计指标。每次调用该函数时,该函数都会更新度量标准,并基于整个提供的数据集进行计算。窗口
函数根据窗口内的所有观察结果计算指标Mdl。MetricsWindowSize
财产。Mdl。MetricsWindowSize
还决定软件更新的频率窗口
指标。例如,如果Mdl。MetricsWindowSize
为20时,该函数根据所提供数据中的最后20个观察结果计算度量(X((end - 20 + 1):end,:)
而且Y((end - 20 + 1):end)
).跟踪窗口内性能指标的增量函数使用以下过程:
存储一个长度的缓冲区
Mdl。MetricsWindowSize
对于每个指定的度量,并存储一个观察权重的缓冲区。用基于批量传入观察的模型性能填充度量缓冲区的元素,并在权重缓冲区中存储相应的观察权重。
当缓冲区已满时,覆盖
Mdl.Metrics.Window
在指标窗口中使用加权平均性能。如果函数处理一批观测值时缓冲区溢出,则最新的传入Mdl。MetricsWindowSize
观测值进入缓冲区,最早的观测值从缓冲区中删除。例如,假设Mdl。MetricsWindowSize
为20时,度量缓冲区中有10个来自先前处理的批处理的值,15个值是传入的。为了组成长度为20的窗口,该函数使用来自15个传入观测值的测量值和来自前一批的最新5个测量值。
该软件省略了一个观察
南
计算累积
而且窗口
性能度量值。
观察权重
对于每个条件预测器分布,updateMetrics
计算加权平均值和标准差。
如果先验类概率分布是已知的(换句话说,先验分布不是经验的),updateMetrics
将观察权重归一化,使其与各自类中的先验类概率相加。这个动作意味着默认的观察权重是各自的先验类概率。
如果先验类概率分布是经验的,软件将指定的观察权重归一化,每次调用时求和为1updateMetrics
.
版本历史
R2021a中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。