incrementalClassificationNaiveBayes
增量学习的朴素贝叶斯分类模型
描述
的incrementalClassificationNaiveBayes
函数创建incrementalClassificationNaiveBayes
模型对象,表示一种用于增量学习的朴素贝叶斯多类分类模型。
与其他统计和机器学习工具箱™模型对象不同,incrementalClassificationNaiveBayes
可直接调用。此外,您还可以在将模型与数据拟合之前指定学习选项,例如性能指标配置和先验类概率。在创建一个incrementalClassificationNaiveBayes
对象,则为其准备增量学习.
incrementalClassificationNaiveBayes
最适合增量学习。有关训练用于多类分类的朴素贝叶斯模型的传统方法(例如通过将模型拟合到数据、执行交叉验证、调优超参数等来创建模型),请参见fitcnb
.
创建
您可以创建incrementalClassificationNaiveBayes
用以下几种方法对对象建模:
直接调用函数—配置增量学习选项,或通过调用指定特定学习者的选项
incrementalClassificationNaiveBayes
直接。当你还没有数据或者你想立即开始增量学习时,这种方法是最好的。在增量学习期间,必须指定响应数据中期望的类的最大数量或所有类名。转换传统训练的模型-使用已训练模型对象的模型参数初始化朴素贝叶斯分类模型,用于增量学习(
ClassificationNaiveBayes
),您可以将传统训练的模型转换为incrementalClassificationNaiveBayes
对象通过将其传递给incrementalLearner
函数。调用增量学习函数- - - - - -
适合
,updateMetrics
,updateMetricsAndFit
接受已配置的incrementalClassificationNaiveBayes
将对象和数据建模为输入,并返回incrementalClassificationNaiveBayes
使用从输入模型和数据中学习到的信息更新的模型对象。
语法
描述
返回用于朴素贝叶斯分类的默认增量学习模型对象,Mdl
= incrementalClassificationNaiveBayes(“MaxNumClasses”,MaxNumClasses
)Mdl
,在那里MaxNumClasses
是增量学习期间响应数据中期望的最大类数。默认模型的属性包含未知模型参数的占位符。您必须训练一个默认模型,然后才能跟踪它的性能或从中生成预测。
输入参数
一会
- - - - - -所有唯一的类标签
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
增量学习期间响应数据中期望的所有唯一类标签,指定为类别、字符或字符串数组;逻辑或数字向量;或者是字符向量的单元格数组。一会
响应数据必须具有相同的数据类型。此参数设置一会
财产。
一会
指定与类顺序对应的任何输入或输出参数维度的顺序。例如,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数字矩阵 |
|
结构数组 | 有两个字段的结构数组:
|
如果你指定成本
时,还必须指定一会
论点。成本
设置成本
财产。
默认为以下选项之一:
空数组
[]
当你指定MaxNumClasses
一个c——- - - - - -c矩阵,当你指定
一会
,在那里成本(
对所有我
,j
) = 1
≠我
,j
成本(
对所有我
,j
) = 0
=我
j
例子:“成本”,结构(“类名”,{' b ', ' g '},“ClassificationCosts”,[0 2;1 0])
数据类型:单
|双
|结构体
指标
- - - - - -建模性能指标,以便在增量学习期间跟踪
“mincost”
(默认)|“classiferror”
|字符串向量|函数处理|细胞向量|结构数组|“binodeviance”
|“指数”
|“枢纽”
|“分对数”
|“二次”
在增量学习期间跟踪的模型性能指标,除了最小的预期错误分类代价之外,还指定为内置损失函数名称、名称的字符串向量、函数句柄(例如,@metricName
),函数句柄的结构数组,或名称、函数句柄或结构数组的单元格向量。
当Mdl
是温暖的(见IsWarm),updateMetrics
而且updateMetricsAndFit
中跟踪性能指标指标的属性Mdl
.
下表列出了内置的损失函数名称。您可以使用字符串向量指定多个。
的名字 | 描述 |
---|---|
“binodeviance” |
二项异常 |
“classiferror” |
误分类错误率 |
“指数” |
指数 |
“枢纽” |
铰链 |
“分对数” |
物流 |
“mincost” |
最小的预期错误分类成本(对于分类分数是后验概率)。 |
“二次” |
二次 |
有关内置损失函数的详细信息,请参见损失
.
例子:“指标”,(“classiferror”“分对数”)
若要指定返回性能指标的自定义函数,请使用函数句柄表示法。函数必须是这种形式。
度量= customMetric(C,S,成本)
输出参数
度规
是一个n-by-1数值向量,其中每个元素是增量学习函数在一个学习周期中处理的数据中相应观测值的损失。你指定函数名(这里,
customMetric
).C
是一个n——- - - - - -K逻辑矩阵,其中行表示对应观测值所属的类,其中K是类的数量。类中的类顺序对应于列顺序一会
财产。创建C
通过设置C (
=p
,问
)1
,如果观察
在课堂上p
,为指定数据中的每个观测值。在行中设置另一个元素问
来p
0
.年代
是一个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_ ,在那里 是度量 在指标 |
行名称@ (C、S、成本)customMetric (C、S、成本)… 是CustomMetric_1 |
有关性能度量选项的详细信息,请参见性能指标.
数据类型:字符
|字符串
|结构体
|细胞
|function_handle
属性
只能在调用时使用名-值对参数语法来设置大多数属性incrementalClassificationNaiveBayes
直接。您可以在调用时设置一些属性incrementalLearner
转换传统训练的模型。不能设置属性DistributionParameters
,IsWarm
,NumTrainingObservations
.
分类模型参数
CategoricalPredictors
- - - - - -分类预测器列表
正整数向量|逻辑向量|“所有”
此属性是只读的。
类别预测符列表,指定为此表中的值之一。
价值 | 描述 |
---|---|
正整数向量 | 向量中的每个条目都是一个索引值,对应于包含分类变量的预测器数据的列。索引值在1和之间 |
逻辑向量 | 一个真正的 条目意味着预测器数据的对应列是分类变量。向量的长度是NumPredictors . |
“所有” |
所有预测因素都是绝对的。 |
对于已识别的分类预测因子,incrementalClassificationNaiveBayes
使用多元多项式分布。详情请参见DistributionNames
.
默认情况下,如果指定DistributionNames
选项中,所有预测变量对应于“mvmn”
是绝对的。否则,没有一个预测变量是分类的。
例子:“CategoricalPredictors”,[1 2 4]
而且'CategoricalPredictors',[真真假真]
指定四个预测变量中的第一个、第二个和第四个是分类变量。
数据类型:单
|双
|逻辑
CategoricalLevels
- - - - - -多变量多项预测变量水平
细胞向量
多变量多项预测变量的水平,指定为一个单元向量。的长度CategoricalLevels
等于NumPredictors
.
增量拟合函数适合
而且updateMetricsAndFit
用学习到的每个类别预测变量的数字类别级别填充单元格,而与其他预测变量对应的单元格包含一个空数组[]
.具体来说,如果预测器j是多元多项式,CategoricalLevels {
j}
是一个列表的所有不同的值预测j经历增量拟合。有关详细信息,请参见DistributionNames
财产。
请注意
不像fitcnb
,增量拟合函数对预测器的水平进行排序,因为函数在训练期间经历了它们。例如,假设predictorj具有多元多项分布的范畴性。层次的顺序CategoricalLevels {j}
因此,每个单元格的水平概率的顺序DistributionParameters {: j}
增量拟合函数返回的顺序可能与返回的顺序不同fitcnb
对于相同的训练数据集。
成本
- - - - - -错误分类观察的代价
方形数值矩阵|空数组[]
此属性是只读的。
错误分类观测值的代价,指定为数组。
如果您指定“成本”
名称-值参数,其值集成本
.如果指定一个结构数组,成本
是值ClassificationCosts
字段。
如果你将一个传统的训练模型转换为创建Mdl
,成本
是成本
传统训练模型的性质。
数据类型:单
|双
一会
- - - - - -所有唯一的类标签
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
此属性是只读的。
增量学习期间响应数据中期望的所有唯一类标签,指定为类别或字符数组、逻辑或数字向量或字符向量的单元格数组。
你可以设置一会
以下三种方式之一:
如果您指定
MaxNumClasses
参数,软件推断一会
属性。如果您指定
一会
参数,incrementalClassificationNaiveBayes
中存储您的规格一会
财产。(该软件将字符串数组视为字符向量的单元格数组。)如果你将一个传统的训练模型转换为创建
Mdl
,一会
属性由传统训练模型的相应属性指定。
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
|分类
NumPredictors
- - - - - -预测变量数量
非负数值标量
此属性是只读的。
预测变量的数目,指定为非负数值标量。
默认的NumPredictors
值取决于你如何创建模型:
如果你将一个传统的训练模型转换为创建
Mdl
,NumPredictors
由传统训练模型的相应属性指定。如果你创建
Mdl
通过调用incrementalClassificationNaiveBayes
您可以直接指定NumPredictors
通过使用名称-值参数语法。如果不指定该值,则默认值为0
,增量拟合函数进行推断NumPredictors
从训练期间的预测器数据。
数据类型:双
NumTrainingObservations
- - - - - -观测数符合增量模型
0
(默认)|非负数值标量
此属性是只读的。
符合增量模型的观测数Mdl
,指定为非负数字标量。NumTrainingObservations
当你通过时增加Mdl
训练数据适合
或updateMetricsAndFit
.
请注意
如果你将一个传统的训练模型转换为创建Mdl
,incrementalClassificationNaiveBayes
没有将符合传统训练模型的观察数添加到NumTrainingObservations
.
数据类型:双
之前
- - - - - -先验类概率
数值向量|“经验”
|“统一”
此属性是只读的。
先验类概率,指定为“经验”
,“统一”
,或数值向量。incrementalClassificationNaiveBayes
存储之前
值作为数值向量。
价值 | 描述 |
---|---|
“经验” |
增量学习函数从增量训练期间响应数据中观察到的类相对频率推断先验类概率。 |
“统一” |
对于每一类,先验概率为1/K,在那里K是类的数量。 |
数值向量 | 自定义,规范化先验概率。元素的顺序之前 元素的元素一会 财产。 |
默认的之前
值取决于你如何创建模型:
如果你将一个传统的训练模型转换为创建
Mdl
,之前
由传统训练模型的相应属性指定。否则,为默认值
之前
是“经验”
.
数据类型:单
|双
|字符
|字符串
ScoreTransform
- - - - - -分数变换函数
“没有”
(默认)|字符串标量|特征向量|函数处理
此属性是只读的。
分数转换函数,描述增量学习函数如何转换指定为字符向量、字符串标量或函数句柄的原始响应值。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
值取决于你如何创建模型:
如果你将一个传统的训练模型转换为创建
Mdl
,ScoreTransform
由传统训练模型的相应属性指定。默认的
“没有”
指定返回后验类概率。
数据类型:字符
|function_handle
|字符串
训练参数
DistributionNames
- - - - - -预测分布
“锰”
|“mvmn”
|“正常”
|字符串向量|特征向量的单元向量
预测分布P(x|ck),ck是类类名(
,指定为字符向量或字符串标量,或1 × -k
)NumPredictors
字符串向量或单元格向量的字符向量的值从表。
价值 | 描述 |
---|---|
“锰” |
多项分布。如果你指定“锰” ,则所有特征都是多项分布(例如,abag-of-tokens模型)。因此,不能包含“锰” 作为字符串数组或字符向量单元格数组的元素。详细信息请参见多项式分布的估计概率. |
“mvmn” |
多元多项分布。详细信息请参见多元多项分布的估计概率. |
“正常” |
正态分布。详细信息请参见正态分布估计 |
如果指定字符向量或字符串标量,则软件将使用该分布对所有特征建模。如果你指定一个1 ×NumPredictors
字符串向量或单元格向量的字符向量,是软件建模的特点j使用元素中的分布j向量的。
默认情况下,软件将所有指定为类别预测器的预测器设置为类别预测器(请参阅CategoricalPredictors
财产)“mvmn”
.否则,默认分布为“正常”
.
incrementalClassificationNaiveBayes
将值存储为字符向量或字符向量的单元格向量。
例子:“DistributionNames”、“锰”
指定所有预测变量的联合条件分布是多项的。
例子:'DistributionNames',["normal" "mvmn" "normal"]
指定第一个和第三个预测变量是正态分布,第二个变量是具有多元多项分布的分类变量。
数据类型:字符
|字符串
|细胞
DistributionParameters
- - - - - -分布参数估计
单元阵列
此属性是只读的。
分布参数估计,指定为单元格数组。DistributionParameters
是一个K——- - - - - -NumPredictors
单元格数组,其中K是类和单元格(k
,j
)包含预测器实例的分布参数估计值j
在课堂上k
.行顺序对应于属性中类的顺序一会
,列的顺序对应于预测器数据中预测器的顺序。
如果类k
没有观察到的预测j
,然后DistributionParameters {
为空(k
,j
}[]
).
的要素DistributionParameters
依赖于预测器的分布。中的值DistributionParameters {
.k
,j
}
预测器分布j | 预测器单元格阵列的值j 和类k |
---|---|
“锰” |
表示该标记的概率的标量j出现在课堂上k.详细信息请参见多项式分布的估计概率. |
“mvmn” |
一个数字向量,包含每种可能级别预测器的概率j在课堂上k.该软件排序概率的所有唯一级别的预测器的顺序j(存储在属性中CategoricalLevels ).详情请参见多元多项分布的估计概率. |
“正常” |
一个2乘1的数字向量。第一个元素是加权样本均值,第二个元素是加权样本标准差。详情请参见正态分布估计. |
请注意
不像fitcnb
,增量拟合函数对预测器的水平进行排序,因为函数在训练期间经历了它们。例如,假设predictorj具有多元多项分布的范畴性。层次的顺序CategoricalLevels {j}
因此,每个单元格的水平概率的顺序DistributionParameters {: j}
增量拟合函数返回的顺序可能与返回的顺序不同fitcnb
对于相同的训练数据集。
数据类型:细胞
性能指标及参数
IsWarm
- - - - - -标志,指示模型是否跟踪性能指标
假
或0
|真正的
或1
标志,指示增量模型是否跟踪作为逻辑指定的性能度量0
(假
)或1
(真正的
).
增量模型Mdl
是温暖的(IsWarm
就变成了真正的
)当增量拟合函数同时执行以下两个动作时:
拟合增量模型
MetricsWarmupPeriod
观察。过程
MaxNumClasses
类指定的所有类名一会
名称-值参数。
价值 | 描述 |
---|---|
真正的 或1 |
增量模型Mdl 是温暖的。因此,updateMetrics 而且updateMetricsAndFit 中跟踪性能指标指标 的属性Mdl . |
假 或0 |
updateMetrics 而且updateMetricsAndFit 不要跟踪性能指标。 |
数据类型:逻辑
指标
- - - - - -建模性能度量
表格
此属性是只读的。
建模在增量学习期间更新的性能指标updateMetrics
而且updateMetricsAndFit
,指定为具有两列和的表米行,米指标的数量是否由指标
名称-值参数。
的列指标
标记累积
而且窗口
.
累积
:元素j
模型的性能是通过度量来衡量的吗j
,从模型变暖开始(IsWarm
是1
).窗口
:元素j
模型的性能是通过度量来衡量的吗j
属性指定的窗口内的所有观测值MetricsWindowSize
财产。软件更新窗口
处理之后MetricsWindowSize
观察。
行由指定的度量进行标记。详细信息请参见指标
的名称-值参数incrementalLearner
或incrementalClassificationNaiveBayes
.
数据类型:表格
MetricsWarmupPeriod
- - - - - -在跟踪性能指标之前,符合观察的数量
非负整数
此属性是只读的。
增量模型在跟踪其性能指标之前必须适合的观察数指标
属性,指定为非负整数。
默认的MetricsWarmupPeriod
值取决于你如何创建模型:
如果你将一个传统的训练模型转换为创建
Mdl
,MetricsWarmupPeriod
的名称-值参数incrementalLearner
函数设置此属性。参数的默认值为0
.否则,默认值为
1000
.
详情请参见性能指标.
数据类型:单
|双
MetricsWindowSize
- - - - - -用于计算窗口性能指标的观察数
正整数
此属性是只读的。
用于计算窗口性能指标的观察数,指定为正整数。
默认的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个观察结果。
将先前的增量模型覆盖为一个适合于新观测值的新模型。
将第一个预测器的平均值存储在第一个类中 ,累积指标,以及窗口指标,以查看它们在增量学习期间是如何发展的。
%预先配置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
检查模型在传入观测数据上的性能,然后将模型与这些观测数据拟合。
看看性能指标和 在训练过程中进化,将它们绘制在单独的瓷砖上。
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)“迭代”)
这些图表表明updateMetricsAndFit
执行以下操作:
适合 在所有增量学习迭代过程中。
仅在指标预热期(红色垂直线)之后计算性能指标。
在每次迭代期间计算累计度量。
在处理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)“迭代”)
的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个观测数据块来模拟数据流。
将先前的增量模型覆盖为一个适合于新观测值的新模型。
在第一类中存储第一个预测变量的标准差 ,累积指标,以及窗口指标,以查看它们在增量学习期间是如何发展的。
%预先配置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
检查模型在传入观测数据上的性能,然后将模型与这些观测数据拟合。
看看性能指标和 在训练过程中进化,将它们绘制在单独的瓷砖上。
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)“迭代”)
这些图表表明updateMetricsAndFit
执行以下操作:
适合 在所有增量学习迭代过程中。
仅在指标预热期(红色垂直线)之后计算性能指标。
在每次迭代期间计算累计度量。
在处理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个观测数据来模拟数据流。在每次迭代中:
调用
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);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
在给定的新数据块中更新模型的性能指标,然后将模型与数据进行拟合。
绘制性能指标和的跟踪图 .
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,“迭代”)
累积损失水平快速且稳定,而窗口损失在整个训练过程中不断跳跃。
起初变化突然,然后逐渐趋于平稳适合
处理更多的块。
更多关于
Bag-of-Tokens模型
在代币袋模型中,预测器的值j令牌出现的非负数吗j在观察中。多项模型中类别(箱子)的数量是不同标记的数量(预测器的数量)。
增量学习
增量学习,或在线学习是机器学习的一个分支,涉及处理来自数据流的传入数据,可能很少或根本不知道预测变量的分布、预测或目标函数的各个方面(包括调优参数值),或者观察结果是否被标记。增量学习与传统的机器学习不同,传统的机器学习有足够的标记数据来拟合模型,执行交叉验证来调优超参数,并推断预测器分布。
给定传入的观察结果,增量学习模型以以下任何一种方式处理数据,但通常按以下顺序:
预测标签。
测量预测性能。
检查模型中的结构断裂或漂移。
将模型与观测结果相吻合。
详情请参见增量学习概述.
算法
性能指标
的
updateMetrics
而且updateMetricsAndFit
功能跟踪模型性能指标(指标
),仅当增量模型为时温暖的(IsWarm
属性是真正的
).如果您通过使用
incrementalLearner
而且MetricsWarmupPeriod
为0(默认为incrementalLearner
),模型在创作时是温暖的。否则,增量模型之后会变暖
适合
或updateMetricsAndFit
执行这两个动作:拟合增量模型
MetricsWarmupPeriod
观察,也就是指标预热期.使增量模型适合所有预期的类(请参阅
MaxNumClasses
而且一会
参数的incrementalClassificationNaiveBayes
).
的
指标
属性将每个性能度量的两种形式存储为表的变量(列),累积
而且窗口
,将单个指标列成行。当增量模型为温模型时,updateMetrics
而且updateMetricsAndFit
以以下频率更新指标:累积
-函数计算自模型性能跟踪开始的累积度量。每次调用函数时,函数都会更新度量,并基于整个提供的数据集进行计算。窗口
函数根据窗口内的所有观察结果计算指标MetricsWindowSize
名称-值参数。MetricsWindowSize
还决定软件更新的频率窗口
指标。例如,如果MetricsWindowSize
为20时,函数根据所提供数据中的最后20个观察结果计算度量(X((end - 20 + 1):end,:)
而且Y((end - 20 + 1):end)
).跟踪窗口内性能指标的增量函数使用以下过程:
存储一个长度的缓冲区
MetricsWindowSize
对于每个指定的度量,并存储一个观察权重的缓冲区。用基于批量传入观察的模型性能填充度量缓冲区的元素,并在权重缓冲区中存储相应的观察权重。
当缓冲区已满时,覆盖
Mdl.Metrics.Window
在指标窗口中使用加权平均性能。如果函数处理一批观测值时缓冲区溢出,则最新的传入MetricsWindowSize
观测值进入缓冲区,最早的观测值从缓冲区中删除。例如,假设MetricsWindowSize
为20时,度量缓冲区中有10个来自先前处理的批处理的值,15个值是传入的。为了组成长度为20的窗口,函数使用来自15个传入观测值的测量值和来自前一批的最新5个测量值。
该软件省略了一个观察
南
计算累积
而且窗口
性能度量值。
正态分布估计
如果预测变量j
有一个条件正态分布(见DistributionNames
属性),软件通过计算特定类别的加权平均值和加权标准差的偏倚(最大似然)估计来拟合数据的分布。每门课k:
预测器的加权平均值j是
在哪里w我重量是用来观察的吗我.该软件将一个类中的权重规范化,使它们之和为该类的先验概率。
预测器加权标准差的无偏估计量j是
多项式分布的估计概率
如果所有预测变量组成条件多项分布(参见DistributionNames
属性),该软件适合使用Bag-of-Tokens模型.软件存储该令牌的概率j
出现在课堂上k
在财产中DistributionParameters {
.添加平滑[1],则估计概率为k
,j
}
地点:
哪个是令牌出现的加权次数j在课堂上k.
nk课堂上的观察次数是多少k.
重量是用来观察的吗我.该软件将一个类中的权重规范化,使它们之和为该类的先验概率。
类中所有令牌出现的加权总数是多少k.
多元多项分布的估计概率
如果预测变量j
具有条件多元多项分布(参见DistributionNames
属性),软件遵循以下过程:
该软件收集的唯一级别的列表,存储排序的列表
CategoricalLevels
,并将每一层视为一个箱子。预测器和类的每个组合都是一个独立的多项式随机变量。每门课k,该软件使用存储在
CategoricalLevels {
.j
}该软件存储概率预测器
j
在课堂上k
有水平l在财产中DistributionParameters {
,适用于各级k
,j
}CategoricalLevels {
.添加平滑[1],则估计概率为j
}地点:
哪个是哪个预测器的加权观测数j=l在课堂上k.
nk课堂上的观察次数是多少k.
如果xij=l,否则为0。
重量是用来观察的吗我.该软件将一个类中的权重规范化,使它们之和为该类的先验概率。
米j不同水平的数量是预测因素吗j.
米k在课堂上观察的加权数是多少k.
参考文献
[1]曼宁,克里斯托弗·D,普拉巴卡尔·拉格哈万,辛里奇Schütze。信息检索概论纽约:剑桥大学出版社,2008年。
版本历史
R2021a中引入R2021b:朴素贝叶斯增量拟合函数计算有条件正态预测变量的有偏(最大似然)标准差
从R2021b开始,朴素贝叶斯增量拟合函数适合
而且updateMetricsAndFit
在训练过程中计算有条件正常预测变量的加权标准差的偏倚(最大似然)估计。换句话说,对于每个类k,增量拟合函数对条件正态预测因子的加权方差平方和进行归一化xj通过类中权重的和k.在R2021b之前,朴素贝叶斯增量拟合函数计算无偏标准差,如fitcnb
.目前返回的加权标准差估计值与R2021b之前计算的估计值相差一个因素
随着样本量的增加,因子趋于1。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。