主要内容

updateMetricsAndFit

在给定新的数据和训练模型的情况下,更新朴素贝叶斯增量学习分类模型的性能指标

描述

给定流数据,updateMetricsAndFit首先评估用于增量学习的配置朴素贝叶斯分类模型的性能(incrementalClassificationNaiveBayes对象)通过调用updateMetrics输入数据。然后updateMetricsAndFit通过调用使模型与该数据匹配适合.换句话说,updateMetricsAndFit执行prequential评价因为它将每个传入的数据块视为一个测试集,并跟踪累积测量的性能指标,并超过指定的窗口[1]

updateMetricsAndFit提供一种简单的方法来更新模型性能指标,并在每个数据块上训练模型。或者,您也可以通过调用分别执行这些操作updateMetrics然后适合,这允许更大的灵活性(例如,您可以根据模型在数据块上的性能来决定是否需要训练模型)。

例子

Mdl= updateMetricsAndFit (MdlXY返回用于增量学习的朴素贝叶斯分类模型Mdl,为增量学习的输入朴素贝叶斯分类模型Mdl修改如下:

  1. updateMetricsAndFit测量模型在传入预测器和响应数据上的性能,X而且Y分别。当输入模型为时温暖的Mdl。我年代Warm真正的),updateMetricsAndFit对象中存储的计算指标指标属性中的新值。否则,updateMetricsAndFit商店指标代替。

  2. updateMetricsAndFit通过更新给定类别的每个预测变量的条件后验均值和标准差,将修改后的模型拟合到传入数据,并在输出模型中存储新的估计值和其他配置Mdl

例子

Mdl= updateMetricsAndFit (MdlXY“重量”,权重还设置了观察权重权重

例子

全部折叠

通过调用创建一个用于增量学习的朴素贝叶斯分类模型incrementalClassificationNaiveBayes并在数据中指定最多5个期望的类。

Mdl = incrementalClassificationNaiveBayes(“MaxNumClasses”5)
Mdl = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters:{}属性,方法

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

Mdl在使用它执行任何其他操作之前,必须适合于数据。

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

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

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

通过在每次迭代中执行以下操作来实现增量学习:

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

  • 将先前的增量模型覆盖为一个适合于新观测值的新模型。

  • 将第一个预测器的条件均值存储在第一个类中 μ 11 ,累积指标,以及窗口指标,以查看它们在增量学习期间是如何发展的。

%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);MC = 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 = updateMetricsAndFit(Mdl,X(idx,:),Y(idx));mc{j,:} = Mdl。指标{“MinimalCost”,:};mu11(j + 1) = mld . distributionparameters {1,1}(1);结束

现在,Mdl是一个incrementalClassificationNaiveBayes在流中的所有数据上训练的模型对象。在增量学习期间和模型预热后,updateMetricsAndFit检查模型在传入观测数据上的性能,然后将模型与这些观测数据拟合。

看看性能指标和 μ 11 在训练过程中进化,将它们绘制在单独的瓷砖上。

T = tiledlayout(2,1);Nexttile plot(mu11)“\ mu_{11}”) xlim([0 nchunk]) nexttile h = plot(mc.Variables);Xlim ([0 nchunk]) ylabel(“最小成本”)参照线(Mdl。指标WarmupPeriod/numObsPerChunk,r -。xlabel(t, mc.Properties.VariableNames)“迭代”

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

图表显示updateMetricsAndFit执行以下操作:

  • 适合 μ 11 在所有增量学习迭代过程中。

  • 仅在指标预热期之后计算性能指标。

  • 在每次迭代期间计算累计度量。

  • 在处理200个观测结果(4次迭代)后计算窗口度量。

训练朴素贝叶斯分类模型fitcnb,将其转换为增量学习器,跟踪其在流数据上的表现,并在一次调用中使其适应数据。指定观察权重。

加载和预处理数据

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

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

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

假设来自静止对象的数据(Y<= 2)的数据质量是移动对象的两倍。创建一个权重变量,将来自静止主体的观测值赋值为2,将1赋值给移动主体。

W = ones(n,1) + (Y <= 2);

训练朴素贝叶斯分类模型

将朴素贝叶斯分类模型拟合到一半数据的随机样本中。

Idxtt = randsample([true false],n,true);TTMdl = fitcnb(X(idxtt,:)),Y(idxtt),“重量”W (idxtt))
TTMdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 12053 DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell}属性,方法

TTMdl是一个ClassificationNaiveBayes模型对象表示传统训练朴素贝叶斯分类模型。

转换训练模型

将传统训练模型转换为朴素贝叶斯分类模型进行增量学习。指定在增量学习过程中跟踪错分类错误率。

增量mdl =增量学习者(TTMdl,“指标”“classiferror”
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [2x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell}属性,方法

IncrementalMdl是一个incrementalClassificationNaiveBayes模型。因为类名是在IncrementalMdl。一会,在增量学习过程中遇到的标签必须在IncrementalMdl。一会

跟踪绩效指标和适合模型

方法对其余数据执行增量学习updateMetricsAndFit函数。在每次迭代中:

  1. 通过一次处理50个观测数据来模拟数据流。

  2. 调用updateMetricsAndFit在给定传入的观察数据块的情况下,更新模型的累积和窗口性能指标,然后将模型与数据拟合。用一个新的增量模型覆盖以前的增量模型。指定观察权重。

  3. 存储误分类错误率。

%预先配置Idxil = ~idxtt;Nil = sum(idxil);numObsPerChunk = 50;nchunk = floor(nil/numObsPerChunk);MC = array2table(0 (nchunk,2),“VariableNames”,[“累积”“窗口”]);Xil = X(idxil,:);Yil = Y(idxil);Wil = W(idxil);%增量拟合j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1);iend = min(nil,numObsPerChunk*j);Idx = ibegin:iend;增量mdl = updateMetricsAndFit(增量mdl,Xil(idx,:),Yil(idx),...“重量”会(idx));mc{j,:} = IncrementalMdl。指标{“ClassificationError”,:};结束

现在,IncrementalMdl是一个incrementalClassificationNaiveBayes在流中的所有数据上训练的模型对象。

创建一个错误分类错误率的轨迹图。

h = plot(mc.Variables);Xlim ([0 nchunk]) ylabel(分类错误的xlabel(h,mc.Properties.VariableNames)“迭代”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表累积、窗口。

累积损失最初会跳跃,但稳定在0.05左右,而窗口损失在整个训练过程中都会跳跃。

输入参数

全部折叠

朴素贝叶斯分类模型用于度量增量学习的性能,然后对数据进行拟合,指定为incrementalClassificationNaiveBayes模型对象。你可以创建Mdl直接或通过转换支持的,传统训练的机器学习模型使用万博1manbetxincrementalLearner函数。更多详细信息,请参见相应的参考页面。

如果Mdl。我年代WarmupdateMetricsAndFit不跟踪模型的性能。详情请参见性能指标

用于测量模型性能的预测器数据块,然后对模型进行拟合,指定为n——- - - - - -Mdl。NumPredictors浮点矩阵。

观察标签的长度Y观察的次数X必须平等;Y (j是观察的标签吗j(行)X

请注意

如果Mdl。NumPredictors= 0,updateMetricsAndFit从中推断预测器的数量X,并设置输出模型的相应属性。否则,如果流数据中的预测变量数量从Mdl。NumPredictorsupdateMetricsAndFit产生一个错误。

数据类型:|

标签块,用于测量模型性能,然后将模型拟合到,指定为类别、字符或字符串数组;逻辑或浮点向量;或者是字符向量的单元格数组。

观察标签的长度Y观察的次数X必须平等;Y (j是观察的标签吗j(行)X

updateMetricsAndFit当满足以下一个或两个条件时发出错误:

  • Y包含一个新标签,并且已经达到最大类数(请参阅MaxNumClasses而且一会参数的incrementalClassificationNaiveBayes).

  • 一会属性的输入模型Mdl是否为非空,数据类型为Y而且Mdl。一会是不同的。

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

观察权重块,指定为正数值的浮点向量。updateMetricsAndFit对观察结果进行权衡X中对应的值权重.的大小权重必须等于n的观测数X

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

有关更多详细信息,包括标准化方案,请参见观察权重

数据类型:|

请注意

如果一个观察值(预测值或标签)或权重包含至少一个缺失()的值,updateMetricsAndFit忽略观察结果。因此,updateMetricsAndFit使用少于n计算模型性能并创建一个更新的模型,其中n观察的数量在吗X

输出参数

全部折叠

用于增量学习的更新朴素贝叶斯分类模型,作为与输入模型具有相同数据类型的增量学习模型对象返回MdlincrementalClassificationNaiveBayes

如果模型温度不高,updateMetricsAndFit不计算性能指标。结果,指标的属性Mdl完全由值。如果模型是温暖的,updateMetricsAndFit计算新数据上的累积和窗口性能指标X而且Y的对应元素Mdl。指标.详情请参见性能指标

除了更新分布模型参数外,updateMetricsAndFit时执行以下操作Y包含预期的但未处理的类:

  • 类未指定所有预期类一会创建输入模型时的名称-值参数Mdl使用incrementalClassificationNaiveBayesupdateMetricsAndFit

    1. 添加任何新标签Y在…的尾部Mdl。一会

    2. 扩展Mdl。成本到一个c——- - - - - -c矩阵,c上课的数量是多少Mdl。一会.由此产生的错误分类成本矩阵是平衡的。

    3. 扩展Mdl。Prior到一定程度c更新的经验类分布的向量。

  • 如果您在创建输入模型时指定了所有期望的类Mdl或转换传统训练的朴素贝叶斯模型使用incrementalLearner,但你没有指定错误分类代价矩阵(Mdl。成本),updateMetricsAndFit将已处理类的错误分类代价设置为1和未处理的类.例如,如果updateMetricsAndFit处理可能的三个类中的前两个类,Mdl。成本[0 1 NaN;10个NaN;11 10 0]

更多关于

全部折叠

Bag-of-Tokens模型

在代币袋模型中,预测器的值j令牌出现的非负数吗j在观察中。多项模型中类别(箱子)的数量是不同标记的数量(预测器的数量)。

算法

全部折叠

正态分布估计

如果预测变量j有一个条件正态分布(见DistributionNames属性),软件通过计算特定类别的加权平均值和加权标准差的偏倚(最大似然)估计来拟合数据的分布。每门课k

  • 预测器的加权平均值j

    x ¯ j | k y k w x j y k w

    在哪里w重量是用来观察的吗.该软件将一个类中的权重规范化,使它们之和为该类的先验概率。

  • 预测器加权标准差的无偏估计量j

    年代 j | k y k w x j x ¯ j | k 2 y k w 1 / 2

多项式分布的估计概率

如果所有预测变量组成条件多项分布(参见DistributionNames属性),该软件适合使用Bag-of-Tokens模型.软件存储该令牌的概率j出现在课堂上k在财产中DistributionParameters {kj.添加平滑[2],则估计概率为

P 令牌 j | k 1 + c j | k P + c k

地点:

  • c j | k n k y k x j w y k w 哪个是令牌出现的加权次数j在课堂上k

  • nk课堂上的观察次数是多少k

  • w 重量是用来观察的吗.该软件将一个类中的权重规范化,使它们之和为该类的先验概率。

  • c k j 1 P c j | k 类中所有令牌出现的加权总数是多少k

多元多项分布的估计概率

如果预测变量j具有条件多元多项分布(参见DistributionNames属性),软件遵循以下过程:

  1. 该软件收集的唯一级别的列表,存储排序的列表CategoricalLevels,并将每一层视为一个箱子。预测器和类的每个组合都是一个独立的多项式随机变量。

  2. 每门课k,该软件使用存储在CategoricalLevels {j

  3. 该软件存储概率预测器j在课堂上k有水平l在财产中DistributionParameters {kj,适用于各级CategoricalLevels {j.添加平滑[2],则估计概率为

    P 预测 j l | k 1 + j | k l j + k

    地点:

    • j | k l n k y k x j l w y k w 哪个是哪个预测器的加权观测数j=l在课堂上k

    • nk课堂上的观察次数是多少k

    • x j l 1 如果xijl,否则为0。

    • w 重量是用来观察的吗.该软件将一个类中的权重规范化,使它们之和为该类的先验概率。

    • j不同水平的数量是预测因素吗j

    • k在课堂上观察的加权数是多少k

性能指标

  • updateMetricsAndFit中表的行标签指定的模型性能指标Mdl。指标,只有当增量模型为时,才能从新数据中获得温暖的IsWarm属性是真正的).

    • 如果您通过使用incrementalLearner而且MetricsWarmupPeriod为0(默认为incrementalLearner),模型在创作时是温暖的。

    • 否则,增量模型在增量拟合函数后变暖,例如updateMetricsAndFit,执行这两个操作:

      • 拟合增量模型Mdl。MetricsWarmupPeriod观察,也就是指标预热期

      • 使增量模型适合所有预期的类(请参阅MaxNumClasses而且一会参数的incrementalClassificationNaiveBayes).

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

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

    • 窗口函数根据窗口内的所有观察结果计算指标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个测量值。

观察权重

对于每个条件预测器分布,updateMetricsAndFit计算加权平均值和标准差。

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

如果先验类概率分布是经验的,软件将指定的观察权重归一化,每次调用时求和为1updateMetricsAndFit

参考文献

[1]比菲特,阿尔伯特,里卡尔Gavaldá,杰弗里·霍姆斯和伯恩哈德·法林格。数据流的机器学习及其在MOA中的应用.马萨诸塞州剑桥:麻省理工学院出版社,2007年。

[2]曼宁,克里斯托弗·D,普拉巴卡尔·拉格哈万,辛里奇Schütze。信息检索概论纽约:剑桥大学出版社,2008年。

版本历史

R2021a中引入

全部展开

R2021b的行为发生了变化