主要内容

incrementalClassificationNaiveBayes

增量学习的朴素贝叶斯分类模型

描述

incrementalClassificationNaiveBayes函数创建incrementalClassificationNaiveBayes模型对象,表示一种用于增量学习的朴素贝叶斯多类分类模型。

与其他统计和机器学习工具箱™模型对象不同,incrementalClassificationNaiveBayes可直接调用。此外,您还可以在将模型与数据拟合之前指定学习选项,例如性能指标配置和先验类概率。在创建一个incrementalClassificationNaiveBayes对象,则为其准备增量学习

incrementalClassificationNaiveBayes最适合增量学习。有关训练用于多类分类的朴素贝叶斯模型的传统方法(例如通过将模型拟合到数据、执行交叉验证、调优超参数等来创建模型),请参见fitcnb

创建

您可以创建incrementalClassificationNaiveBayes用以下几种方法对对象建模:

  • 直接调用函数—配置增量学习选项,或通过调用指定特定学习者的选项incrementalClassificationNaiveBayes直接。当你还没有数据或者你想立即开始增量学习时,这种方法是最好的。在增量学习期间,必须指定响应数据中期望的类的最大数量或所有类名。

  • 转换传统训练的模型-使用已训练模型对象的模型参数初始化朴素贝叶斯分类模型,用于增量学习(ClassificationNaiveBayes),您可以将传统训练的模型转换为incrementalClassificationNaiveBayes对象通过将其传递给incrementalLearner函数。

  • 调用增量学习函数- - - - - -适合updateMetrics,updateMetricsAndFit接受已配置的incrementalClassificationNaiveBayes将对象和数据建模为输入,并返回incrementalClassificationNaiveBayes使用从输入模型和数据中学习到的信息更新的模型对象。

描述

例子

Mdl= incrementalClassificationNaiveBayes(“MaxNumClasses”,MaxNumClasses返回用于朴素贝叶斯分类的默认增量学习模型对象,Mdl,在那里MaxNumClasses是增量学习期间响应数据中期望的最大类数。默认模型的属性包含未知模型参数的占位符。您必须训练一个默认模型,然后才能跟踪它的性能或从中生成预测。

例子

Mdl= incrementalClassificationNaiveBayes(“类名”,一会指定所有类名一会在增量学习期间的响应数据中,并设置一会财产。

例子

Mdl= incrementalClassificationNaiveBayes (___名称,值使用前面的语法之一来设置属性以及使用名称-值参数的附加选项。每个名字用引号括起来。例如,incrementalClassificationNaiveBayes(“DistributionNames”、“锰”、“MaxNumClasses”,5,MetricsWarmupPeriod, 100)指定预测器变量的联合条件分布为多项分布,将响应数据中期望的最大类数设置为5,并将参数预热周期设置为One hundred.

输入参数

全部展开

增量学习期间响应数据中期望的最大类数,指定为正整数。

MaxNumClasses类中的类名数目一会财产。

如果您没有指定MaxNumClasses时,必须指定一会论点。

例子:“MaxNumClasses”,5

数据类型:|

增量学习期间响应数据中期望的所有唯一类标签,指定为类别、字符或字符串数组;逻辑或数字向量;或者是字符向量的单元格数组。一会响应数据必须具有相同的数据类型。此参数设置一会财产。

一会指定与类顺序对应的任何输入或输出参数维度的顺序。例如,set“类名”指定…尺寸的顺序成本或返回的分类分数的列顺序预测

如果您没有指定一会时,必须指定MaxNumClasses论点。在这种情况下,软件推断一会属性。

例子:'ClassNames',["virginica" "setosa" "versicolor"]

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

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:'NumPredictors',4,'Prior',[0.3 0.3 0.4]指定4变量在预测器数据中的先验类概率分布[0.3 0.3 0.4]

错误分类观测值的代价,指定为本表中的值,其中c是多少类的一会属性:

价值 描述
c——- - - - - -c数字矩阵

成本(j将观测数据分类的成本是多少j当它真正的阶级是,用于上课类名(而且类名(j.换句话说,行对应于真实的类,列对应于预测的类。例如,成本= [0 2;10 0]对分类错误适用双倍罚款类名(1)而不是错误分类类名(2)

结构数组

有两个字段的结构数组:

  • 一会包含类名,值与一会

  • ClassificationCosts如前所述,包含成本矩阵。

如果你指定成本时,还必须指定一会论点。成本设置成本财产。

默认为以下选项之一:

  • 空数组[]当你指定MaxNumClasses

  • 一个c——- - - - - -c矩阵,当你指定一会,在那里成本(j) = 1对所有j,成本(j) = 0对所有j

例子:“成本”,结构(“类名”,{' b ', ' g '},“ClassificationCosts”,[0 2;1 0])

数据类型:||结构体

在增量学习期间跟踪的模型性能指标,除了最小的预期错误分类代价之外,还指定为内置损失函数名称、名称的字符串向量、函数句柄(例如,@metricName),函数句柄的结构数组,或名称、函数句柄或结构数组的单元格向量。

Mdl温暖的(见IsWarm),updateMetrics而且updateMetricsAndFit中跟踪性能指标指标的属性Mdl

下表列出了内置的损失函数名称。您可以使用字符串向量指定多个。

的名字 描述
“binodeviance” 二项异常
“classiferror” 误分类错误率
“指数” 指数
“枢纽” 铰链
“分对数” 物流
“mincost”

最小的预期错误分类成本(对于分类分数是后验概率)。incrementalClassificationNaiveBayes始终跟踪这个指标。

“二次” 二次

有关内置损失函数的详细信息,请参见损失

例子:“指标”,(“classiferror”“分对数”)

若要指定返回性能指标的自定义函数,请使用函数句柄表示法。函数必须是这种形式。

度量= customMetric(C,S,成本)

  • 输出参数度规是一个n-by-1数值向量,其中每个元素是增量学习函数在一个学习周期中处理的数据中相应观测值的损失。

  • 你指定函数名(这里,customMetric).

  • C是一个n——- - - - - -K逻辑矩阵,其中行表示对应观测值所属的类,其中K是类的数量。类中的类顺序对应于列顺序一会财产。创建C通过设置C (p1,如果观察p在课堂上,为指定数据中的每个观测值。在行中设置另一个元素p0

  • 年代是一个n——- - - - - -K预测分类分数的数值矩阵。年代类似于的输出预测,其中行对应于数据中的观察值,列顺序对应于类顺序一会财产。S (p是观察分级评分吗p按班级分类

  • 成本是一个K——- - - - - -K错误分类代价的数字矩阵。看到“成本”名称-值参数。

若要指定多个自定义指标并为每个指标分配自定义名称,请使用结构数组。要指定内置指标和自定义指标的组合,请使用单元格向量。

例子:“指标”,结构(‘Metric2’,‘Metric1’,@customMetric1 @customMetric2)

例子:'Metrics',{@customMetric1 @customMetric2 'logit' struct('Metric3',@customMetric3)}

updateMetrics而且updateMetricsAndFit类中的表中存储指定的度量指标财产。的数据类型指标确定表的行名。

“指标”数据类型 的描述指标属性行名称 例子
字符串或字符向量 对应的内置度量的名称 行名称“classiferror”“ClassificationError”
结构数组 字段名 行名称结构(Metric1, @customMetric1)“Metric1”
存储在程序文件中的函数的函数句柄 函数名称 行名称@customMetric“customMetric”
匿名函数 CustomMetric_j,在那里j是度量j指标 行名称@ (C、S、成本)customMetric (C、S、成本)…CustomMetric_1

有关性能度量选项的详细信息,请参见性能指标

数据类型:字符|字符串|结构体|细胞|function_handle

属性

全部展开

只能在调用时使用名-值对参数语法来设置大多数属性incrementalClassificationNaiveBayes直接。您可以在调用时设置一些属性incrementalLearner转换传统训练的模型。不能设置属性DistributionParametersIsWarm,NumTrainingObservations

分类模型参数

此属性是只读的。

类别预测符列表,指定为此表中的值之一。

价值 描述
正整数向量

向量中的每个条目都是一个索引值,对应于包含分类变量的预测器数据的列。索引值在1和之间NumPredictors

逻辑向量 一个真正的条目意味着预测器数据的对应列是分类变量。向量的长度是NumPredictors
“所有” 所有预测因素都是绝对的。

对于已识别的分类预测因子,incrementalClassificationNaiveBayes使用多元多项式分布。详情请参见DistributionNames

默认情况下,如果指定DistributionNames选项中,所有预测变量对应于“mvmn”是绝对的。否则,没有一个预测变量是分类的。

例子:“CategoricalPredictors”,[1 2 4]而且'CategoricalPredictors',[真真假真]指定四个预测变量中的第一个、第二个和第四个是分类变量。

数据类型:||逻辑

多变量多项预测变量的水平,指定为一个单元向量。的长度CategoricalLevels等于NumPredictors

增量拟合函数适合而且updateMetricsAndFit用学习到的每个类别预测变量的数字类别级别填充单元格,而与其他预测变量对应的单元格包含一个空数组[].具体来说,如果预测器j是多元多项式,CategoricalLevels {j是一个列表的所有不同的值预测j经历增量拟合。有关详细信息,请参见DistributionNames财产。

请注意

不像fitcnb,增量拟合函数对预测器的水平进行排序,因为函数在训练期间经历了它们。例如,假设predictorj具有多元多项分布的范畴性。层次的顺序CategoricalLevels {j}因此,每个单元格的水平概率的顺序DistributionParameters {: j}增量拟合函数返回的顺序可能与返回的顺序不同fitcnb对于相同的训练数据集。

此属性是只读的。

错误分类观测值的代价,指定为数组。

如果您指定“成本”名称-值参数,其值集成本.如果指定一个结构数组,成本是值ClassificationCosts字段。

如果你将一个传统的训练模型转换为创建Mdl成本成本传统训练模型的性质。

数据类型:|

此属性是只读的。

增量学习期间响应数据中期望的所有唯一类标签,指定为类别或字符数组、逻辑或数字向量或字符向量的单元格数组。

你可以设置一会以下三种方式之一:

  • 如果您指定MaxNumClasses参数,软件推断一会属性。

  • 如果您指定一会参数,incrementalClassificationNaiveBayes中存储您的规格一会财产。(该软件将字符串数组视为字符向量的单元格数组。)

  • 如果你将一个传统的训练模型转换为创建Mdl,一会属性由传统训练模型的相应属性指定。

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

此属性是只读的。

预测变量的数目,指定为非负数值标量。

默认的NumPredictors值取决于你如何创建模型:

  • 如果你将一个传统的训练模型转换为创建MdlNumPredictors由传统训练模型的相应属性指定。

  • 如果你创建Mdl通过调用incrementalClassificationNaiveBayes您可以直接指定NumPredictors通过使用名称-值参数语法。如果不指定该值,则默认值为0,增量拟合函数进行推断NumPredictors从训练期间的预测器数据。

数据类型:

此属性是只读的。

符合增量模型的观测数Mdl,指定为非负数字标量。NumTrainingObservations当你通过时增加Mdl训练数据适合updateMetricsAndFit

请注意

如果你将一个传统的训练模型转换为创建MdlincrementalClassificationNaiveBayes没有将符合传统训练模型的观察数添加到NumTrainingObservations

数据类型:

此属性是只读的。

先验类概率,指定为“经验”“统一”,或数值向量。incrementalClassificationNaiveBayes存储之前值作为数值向量。

价值 描述
“经验” 增量学习函数从增量训练期间响应数据中观察到的类相对频率推断先验类概率。
“统一” 对于每一类,先验概率为1/K,在那里K是类的数量。
数值向量 自定义,规范化先验概率。元素的顺序之前元素的元素一会财产。

默认的之前值取决于你如何创建模型:

  • 如果你将一个传统的训练模型转换为创建Mdl之前由传统训练模型的相应属性指定。

  • 否则,为默认值之前“经验”

数据类型:||字符|字符串

此属性是只读的。

分数转换函数,描述增量学习函数如何转换指定为字符向量、字符串标量或函数句柄的原始响应值。incrementalClassificationNaiveBayes将指定的值存储为字符向量或函数句柄。

该表描述了可用于分数转换的内置函数。

价值 描述
“doublelogit” 1 / (1 +e2x
“invlogit” 日志(x/ (1 -x))
“ismax” 将得分最大的类的得分设置为1,并将所有其他类的得分设置为0
“分对数” 1 / (1 +e- - - - - -x
“没有”“身份” x(转换)
“标志” 1x< 0
为0x= 0
1x> 0
“对称” 2x- 1
“symmetricismax” 将得分最大的类的得分设置为1,并将所有其他类的得分设置为-1
“symmetriclogit” 2 / (1 +e- - - - - -x) - 1

对于MATLAB®函数或你定义的函数,输入它的函数句柄;例如,@函数,地点:

  • 函数接受一个n——- - - - - -K矩阵(原始分数)并返回相同大小的矩阵(转换后的分数)。

  • n观察数和行数是多少j的矩阵中包含了班级成绩的观察j

  • K是类的数量,还是列k是类类名(k

默认的ScoreTransform值取决于你如何创建模型:

  • 如果你将一个传统的训练模型转换为创建MdlScoreTransform由传统训练模型的相应属性指定。

  • 默认的“没有”指定返回后验类概率。

数据类型:字符|function_handle|字符串

训练参数

预测分布P(x|ck),ck是类类名(k,指定为字符向量或字符串标量,或1 × -NumPredictors字符串向量或单元格向量的字符向量的值从表。

价值 描述
“锰” 多项分布。如果你指定“锰”,则所有特征都是多项分布(例如,abag-of-tokens模型)。因此,不能包含“锰”作为字符串数组或字符向量单元格数组的元素。详细信息请参见多项式分布的估计概率
“mvmn” 多元多项分布。详细信息请参见多元多项分布的估计概率
“正常” 正态分布。详细信息请参见正态分布估计

如果指定字符向量或字符串标量,则软件将使用该分布对所有特征建模。如果你指定一个1 ×NumPredictors字符串向量或单元格向量的字符向量,是软件建模的特点j使用元素中的分布j向量的。

默认情况下,软件将所有指定为类别预测器的预测器设置为类别预测器(请参阅CategoricalPredictors财产)“mvmn”.否则,默认分布为“正常”

incrementalClassificationNaiveBayes将值存储为字符向量或字符向量的单元格向量。

例子:“DistributionNames”、“锰”指定所有预测变量的联合条件分布是多项的。

例子:'DistributionNames',["normal" "mvmn" "normal"]指定第一个和第三个预测变量是正态分布,第二个变量是具有多元多项分布的分类变量。

数据类型:字符|字符串|细胞

此属性是只读的。

分布参数估计,指定为单元格数组。DistributionParameters是一个K——- - - - - -NumPredictors单元格数组,其中K是类和单元格(kj)包含预测器实例的分布参数估计值j在课堂上k.行顺序对应于属性中类的顺序一会,列的顺序对应于预测器数据中预测器的顺序。

如果类k没有观察到的预测j,然后DistributionParameters {kj为空([]).

的要素DistributionParameters依赖于预测器的分布。中的值DistributionParameters {kj

预测器分布j 预测器单元格阵列的值j和类k
“锰” 表示该标记的概率的标量j出现在课堂上k.详细信息请参见多项式分布的估计概率
“mvmn” 一个数字向量,包含每种可能级别预测器的概率j在课堂上k.该软件排序概率的所有唯一级别的预测器的顺序j(存储在属性中CategoricalLevels).详情请参见多元多项分布的估计概率
“正常” 一个2乘1的数字向量。第一个元素是加权样本均值,第二个元素是加权样本标准差。详情请参见正态分布估计

请注意

不像fitcnb,增量拟合函数对预测器的水平进行排序,因为函数在训练期间经历了它们。例如,假设predictorj具有多元多项分布的范畴性。层次的顺序CategoricalLevels {j}因此,每个单元格的水平概率的顺序DistributionParameters {: j}增量拟合函数返回的顺序可能与返回的顺序不同fitcnb对于相同的训练数据集。

数据类型:细胞

性能指标及参数

标志,指示增量模型是否跟踪作为逻辑指定的性能度量0)或1真正的).

增量模型Mdl温暖的IsWarm就变成了真正的)当增量拟合函数同时执行以下两个动作时:

  • 拟合增量模型MetricsWarmupPeriod观察。

  • 过程MaxNumClasses类指定的所有类名一会名称-值参数。

价值 描述
真正的1 增量模型Mdl是温暖的。因此,updateMetrics而且updateMetricsAndFit中跟踪性能指标指标的属性Mdl
0 updateMetrics而且updateMetricsAndFit不要跟踪性能指标。

数据类型:逻辑

此属性是只读的。

建模在增量学习期间更新的性能指标updateMetrics而且updateMetricsAndFit,指定为具有两列和的表行,指标的数量是否由指标名称-值参数。

的列指标标记累积而且窗口

  • 累积:元素j模型的性能是通过度量来衡量的吗j,从模型变暖开始(IsWarm1).

  • 窗口:元素j模型的性能是通过度量来衡量的吗j属性指定的窗口内的所有观测值MetricsWindowSize财产。软件更新窗口处理之后MetricsWindowSize观察。

行由指定的度量进行标记。详细信息请参见指标的名称-值参数incrementalLearnerincrementalClassificationNaiveBayes

数据类型:表格

此属性是只读的。

增量模型在跟踪其性能指标之前必须适合的观察数指标属性,指定为非负整数。

默认的MetricsWarmupPeriod值取决于你如何创建模型:

  • 如果你将一个传统的训练模型转换为创建Mdl,MetricsWarmupPeriod的名称-值参数incrementalLearner函数设置此属性。参数的默认值为0

  • 否则,默认值为1000

详情请参见性能指标

数据类型:|

此属性是只读的。

用于计算窗口性能指标的观察数,指定为正整数。

默认的MetricsWindowSize值取决于你如何创建模型:

  • 如果你将一个传统的训练模型转换为创建Mdl,MetricsWindowSize的名称-值参数incrementalLearner函数设置此属性。参数的默认值为200

  • 否则,默认值为200

有关性能度量选项的详细信息,请参见性能指标

数据类型:|

对象的功能

适合 训练用于增量学习的朴素贝叶斯分类模型
updateMetricsAndFit 在给定新的数据和训练模型的情况下,更新朴素贝叶斯增量学习分类模型的性能指标
updateMetrics 在新数据下更新朴素贝叶斯增量学习分类模型的性能指标
logp 增量学习朴素贝叶斯分类模型的对数无条件概率密度
损失 批数据上朴素贝叶斯增量学习分类模型的缺失
预测 预测朴素贝叶斯增量学习分类模型对新观测结果的响应
perObservationLoss 增量学习模型的观测分类误差
重置 重置增量分类模型

例子

全部折叠

要创建用于增量学习的朴素贝叶斯分类模型,必须指定期望模型处理的最大类数(“MaxNumClasses”名称-值参数)。当您使用增量拟合函数将模型拟合到传入的数据批次时,模型将在其中收集新类一会财产。如果指定的最大类数不准确,则会发生以下情况之一:

  • 在增量拟合函数处理期望的最大类数之前,模型是冷的。因此,updateMetrics而且updateMetricsAndFit函数不度量性能指标。

  • 如果类的数量超过预期的最大数量,增量拟合函数将发出一个错误。

这个示例展示了当您指定的唯一信息是数据中期望的最大类数时,如何创建用于增量学习的朴素贝叶斯分类模型。此外,该示例还说明了当增量拟合函数在示例的早期和晚期处理所有预期类时的后果。

对于这个例子,考虑训练一个设备来预测一个对象是坐着、站着、走着、跑着还是跳舞,这是基于对该对象测量的生物特征数据。因此,设备最多有5个类可供选择。

处理样本早期的期望最大类数

创建一个用于多类学习的增量朴素贝叶斯模型。在数据中指定最多5个类。

MdlEarly =增量分类朴素贝叶斯(“MaxNumClasses”5)
MdlEarly = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters:{}属性,方法

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

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

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

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

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

将增量模型拟合到训练数据中updateMetricsAndFit函数。通过一次处理50个观测数据块来模拟数据流。在每次迭代中:

  • 处理50个观察结果。

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

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

%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);MC = array2table(0 (nchunk,2),“VariableNames”,[“累积”“窗口”]);Mu1 = 0 (nchunk,1);%增量学习j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min(n,numObsPerChunk*j);Idx = ibegin:iend;MdlEarly = updateMetricsAndFit(MdlEarly,X(idx,:),Y(idx));mc{j,:} = MdlEarly。指标{“MinimalCost”,:};mu1(j + 1) = MdlEarly.DistributionParameters{1,1}(1);结束

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

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

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

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

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

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

  • 仅在指标预热期(红色垂直线)之后计算性能指标。

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

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

处理样本中后期的期望最大类数

为目标的增量学习创建一个不同的朴素贝叶斯模型。

MdlLate =增量分类朴素贝叶斯(“MaxNumClasses”5)
MdlLate = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters:{}属性,方法

将所有标记为类别5的观察结果移动到样本的末尾。

idx5 = Y == 5;Xnew = [X(~idx5,:);X (idx5:)];Ynew = [Y(~idx5);Y(idx5)];

拟合增量模型并绘制结果。

McNew = array2table(0 (nchunk,2),“VariableNames”,[“累积”“窗口”]);Mu1new = 0 (nchunk,1);j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min(n,numObsPerChunk*j);Idx = ibegin:iend;MdlLate = updateMetricsAndFit(MdlLate,Xnew(idx,:),Ynew(idx));mcnew{j,:} = MdlLate。指标{“MinimalCost”,:};mu1new(j + 1) = MdlLate.DistributionParameters{1,1}(1);结束T = tiledlayout(2,1);Nexttile plot(mu1new) ylabel(“\ mu_{11}”) xlim([0 nchunk]) nexttile h = plot(mcnew.Variables);xlim ([0 nchunk]);ylabel (“最小成本”)参照线(MdlLate。指标WarmupPeriod/numObsPerChunk,r -。)参照线(和(~ idx5) / numObsPerChunk,“g -”。)传说(h, mcnew.Properties.VariableNames“位置”“最佳”)包含(t)“迭代”

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

updateMetricsAndFit函数在整个增量学习过程中训练模型,但只有在模型适合所有预期的类数量之后(底部瓷砖中的绿色垂直线),函数才开始跟踪性能指标。

当您知道数据中的所有类名时,创建一个增量朴素贝叶斯模型。

考虑训练一个设备,根据测量对象的生物特征数据来预测对象是坐着、站着、走着、跑着还是跳舞。类名从1到5映射到一个活动。

创建一个用于多类学习的增量朴素贝叶斯模型。指定类名。

Classnames = 1:5;Mdl = incrementalClassificationNaiveBayes(“类名”类名)
Mdl = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {5x0 cell}属性,方法

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

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

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

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

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

将增量模型拟合到训练数据中updateMetricsAndFit函数。通过一次处理50个观测数据块来模拟数据流。在每次迭代中:

  • 处理50个观察结果。

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

%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);%增量学习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));结束

除了指定类名的最大数量之外,还通过指定指标预热期来准备一个增量朴素贝叶斯学习器,在此期间updateMetricsAndFit函数只适合模型。指定500个观测值的度量窗口大小。

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

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

课程名称从1到5分别对应一种活动——坐、站、走、跑或跳舞,这些都是基于对该主题测量的生物特征数据。关于数据集的详细信息,请输入描述在命令行。

创建一个用于多类学习的增量朴素贝叶斯模型。模型配置如下:

  • 指定度量预热期为5000个观测值。

  • 指定500个观测值的度量窗口大小。

  • 当分类器错误地分类类别2时,对分类器的惩罚加倍。

  • 跟踪分类错误和最小成本,以衡量模型的性能。你不需要指定“mincost”指标因为incrementalClassificationNaiveBayes始终跟踪这个指标。

C = ones(5) - eye(5);C(2,[1 3 4 5]) = 2;Mdl = incrementalClassificationNaiveBayes(“类名”1:5,...“MetricsWarmupPeriod”, 5000,“MetricsWindowSize”, 500,...“成本”C“指标”“classiferror”
Mdl = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [2x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {5x0 cell}属性,方法

Mdl是一个incrementalClassificationNaiveBayes为增量学习配置的模型对象。

方法将增量模型拟合到其余数据updateMetricsAndFit函数。在每次迭代中:

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

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

  • 在第一类中存储第一个预测变量的标准差 σ 11 ,累积指标,以及窗口指标,以查看它们在增量学习期间是如何发展的。

%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);Ce = array2table(0 (nchunk,2),“VariableNames”,[“累积”“窗口”]);MC = array2table(0 (nchunk,2),“VariableNames”,[“累积”“窗口”]);Sigma11 = 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));ce{j,:} = Mdl。指标{“ClassificationError”,:};mc{j,:} = Mdl。指标{“MinimalCost”,:};sigma11(j + 1) = mld . distributionparameters {1,1}(2);结束

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

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

Tiledlayout (2,2) nexttile plot(sigma11) ylabel(“\ sigma_{11}”) xlim([0 nchunk]);参照线(Mdl。指标WarmupPeriod/numObsPerChunk,r -。)包含(“迭代”) nexttile h = plot(ce.Variables);Xlim ([0 nchunk]) ylabel(分类错误的)参照线(Mdl。指标WarmupPeriod/numObsPerChunk,r -。xlabel(“迭代”) nexttile h = plot(mc.Variables);xlim ([0 nchunk]);ylabel (“最小成本”)参照线(Mdl。指标WarmupPeriod/numObsPerChunk,r -。xlabel(h,mc.Properties.VariableNames)“迭代”

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

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

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

  • 仅在指标预热期(红色垂直线)之后计算性能指标。

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

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

训练一个朴素贝叶斯模型用于多类分类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表示传统训练朴素贝叶斯模型的模型对象。

转换训练模型

将传统训练的朴素贝叶斯模型转换为用于增量学习的朴素贝叶斯分类模型。

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

分别跟踪绩效指标和适合模型

方法对其余数据执行增量学习updateMetrics而且适合功能。通过一次处理50个观测数据来模拟数据流。在每次迭代中:

  1. 调用updateMetrics在给定传入观测数据块的情况下,更新模型的累积和窗口分类误差。的增量模型中更新损失指标财产。注意,函数并没有将模型与数据块相匹配——数据块是模型的“新”数据。指定观察权重。

  2. 调用适合使模型与观测数据相匹配。覆盖之前的增量模型以更新模型参数。指定观察权重。

  3. 存储第一类第一个预测变量的最小代价和平均值 μ 11

%预先配置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);Wil = W(idxil);%增量拟合j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1);iend = min(nil,numObsPerChunk*j);Idx = ibegin:iend;增量mdl = updateMetrics(增量mdl,Xil(idx,:),Yil(idx),...“重量”会(idx));mc{j,:} = IncrementalMdl。指标{“MinimalCost”,:};增量mdl = fit(增量mdl,Xil(idx,:),Yil(idx),“重量”会(idx));mu11(j+1) = incrementalmld . distributionparameters {1,1}(1);结束

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

或者,您可以使用updateMetricsAndFit在给定的新数据块中更新模型的性能指标,然后将模型与数据进行拟合。

绘制性能指标和的跟踪图 μ 11

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,“迭代”

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

累积损失水平快速且稳定,而窗口损失在整个训练过程中不断跳跃。

μ 11 起初变化突然,然后逐渐趋于平稳适合处理更多的块。

更多关于

全部展开

算法

全部展开

参考文献

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

版本历史

R2021a中引入

全部展开