主要内容

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 =元素个数(actid);rng (1)%的再现性idx = randsample (n, n);X =壮举(idx:);Y = actid (idx);

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

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

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

  • 用一个新模型覆盖先前的增量模型,以适应传入的观察结果。

  • 在第一类中存储第一个预测器的条件均值 μ 11 、累积度量和窗口度量,以查看它们在增量学习中如何发展。

%预先配置numObsPerChunk = 50;nchunk =地板(n / numObsPerChunk);(nchunk mc = array2table (0, 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情节(mu11) ylabel (“\ mu_{11}”) xlim([0 nchunk]) nexttile h = plot(mc.Variables);xlim ([0 nchunk]) ylabel (“最小成本”)参照线(Mdl。指标WarmupPeriod/numObsPerChunk,r -。传奇(h, mc.Properties.VariableNames)包含(t)“迭代”

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

这幅图表明updateMetricsAndFit执行以下操作:

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

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

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

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

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

加载和预处理数据

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

负载humanactivityrng (1)%的再现性n =元素个数(actid);idx = randsample (n, n);X =壮举(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模型对象代表传统训练的朴素贝叶斯分类模型。

转换训练模型

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

IncrementalMdl = incrementalLearner (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 =总和(idxil);numObsPerChunk = 50;nchunk =地板(nil / numObsPerChunk);(nchunk mc = array2table (0, 2),“VariableNames”,[“累积”“窗口”]);自= X (idxil:);Yil = Y (idxil);会= W (idxil);%增量式拟合j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1);iend = min (nil, numObsPerChunk * j);idx = ibegin: iend;IncrementalMdl = updateMetricsAndFit (IncrementalMdl自(idx:), Yil (idx),...“重量”会(idx));mc {j:} = IncrementalMdl。指标{“ClassificationError”,:};结束

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

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

h =情节(mc.Variables);xlim ([0 nchunk]) ylabel (分类错误的传奇(h, mc.Properties.VariableNames)包含(“迭代”

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

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

输入参数

全部折叠

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

如果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南;1 0南;1 1 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模型.软件存储该token的概率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

全部展开