主要内容

适合

训练朴素贝叶斯分类模型进行增量学习

描述

适合函数拟合一个配置的朴素贝叶斯分类模型用于增量学习(incrementalClassificationNaiveBayes对象)转换为流数据。另外,要在数据到达时使用它来跟踪性能指标,请使用updateMetricsAndFit代替。

要想一次对整批数据拟合或交叉验证一个朴素的贝叶斯分类模型,请参见fitcnb

例子

Mdl=健康(MdlXY返回用于增量学习的朴素贝叶斯分类模型Mdl表示用于增量学习的输入朴素贝叶斯分类模型Mdl使用预测器和反应数据进行训练,XY分别。具体地说,适合更新已知数据的预测变量的条件后验分布。

例子

Mdl=健康(MdlXY“重量”,权重指定观察权重权重

例子

全部折叠

这个例子展示了当您只知道数据中期望的最大类数时,如何拟合增量朴素贝叶斯学习器。

创建一个增量朴素贝叶斯模型。指定期望的最大类数为5。

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

Mdl是一个incrementalClassificationNaiveBayes模型。它的所有属性都是只读的。Mdl最多可以遇到5种不同的职业。默认情况下,优先类分布Mdl。Prior是经验的,这意味着软件在遇到标签时更新先验分布。

Mdl必须适合数据,才能使用它执行任何其他操作。

加载人工活动数据集。随机洗牌数据。

负载humanactivityn =元素个数(actid);rng (1)%的再现性idx = randsample (n, n);X =壮举(idx:);Y = actid (idx);

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

将增量模型拟合到训练数据中,每次50个观察数据块适合函数。在每一次迭代:

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

  • 用一个适合传入观测的新模型覆盖先前的增量模型。

  • 存储第一类中第一个预测器的平均值 μ 11 以及物体正在移动的先验概率(Y> 2)观察他们如何在增量训练中发展。

%预先配置numObsPerChunk = 50;nchunk =地板(n / numObsPerChunk);mu11 = 0 (nchunk, 1);priormoved = 0 (nchunk, 1);%增量式拟合n = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min (n, numObsPerChunk * j);idx = ibegin: iend;Mdl =适合(Mdl X (idx:), Y (idx));mu11 (j) = Mdl.DistributionParameters {1} (1);priormoved (j) = (Mdl.Prior (Mdl求和。类名> 2));结束

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

要了解参数在增量学习过程中是如何演变的,请将它们绘制在单独的子图上。

图;次要情节(2,1,1)情节(mu11) ylabel (“\ mu_{11}”)包含(“迭代”)轴次要情节(2,1,2)情节(priormoved);ylabel (“之前P(主题了))包含(“迭代”)轴

适合当它处理每个块时,更新预测器分布的后验均值。因为先验类分布是经验的, π (物体在移动)变化为适合流程每个块。

这个例子展示了当您知道数据中的所有类名时,如何适应增量朴素贝叶斯学习器。

考虑训练一种设备,根据测量对象的生物特征数据来预测对象是坐、站、走、跑还是跳舞,你知道从1到5的班级名称映射到一项活动。此外,假设研究人员计划将该设备统一地展示给每个阶层。

创建一个用于多类学习的增量朴素贝叶斯学习器。指定类名和统一的优先类分布。

一会= 1:5;Mdl = incrementalClassificationNaiveBayes (“类名”一会,“之前”“统一”
Mdl = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1×2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {5×0 cell}属性,方法

Mdl是一个incrementalClassificationNaiveBayes模型对象。它的所有属性都是只读的。在培训期间,必须有观察到的标签Mdl。一会

Mdl必须适合数据,才能使用它执行任何其他操作。

加载人工活动数据集。随机洗牌数据。

负载humanactivityn =元素个数(actid);rng (1);%的再现性idx = randsample (n, n);X =壮举(idx:);Y = actid (idx);

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

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

  • 50的观察过程。

  • 用一个适合传入观测的新模型覆盖先前的增量模型。

  • 存储第一类中第一个预测器的平均值 μ 11 以及物体正在移动的先验概率(Y> 2)观察他们如何在增量训练中发展。

%预先配置numObsPerChunk = 50;nchunk =地板(n / numObsPerChunk);mu11 = 0 (nchunk, 1);priormoved = 0 (nchunk, 1);%增量式拟合n = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min (n, numObsPerChunk * j);idx = ibegin: iend;Mdl =适合(Mdl X (idx:), Y (idx));mu11 (j) = Mdl.DistributionParameters {1} (1);priormoved (j) = (Mdl.Prior (Mdl求和。类名> 2));结束

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

要了解参数在增量学习过程中是如何演变的,请将它们绘制在单独的子图上。

图;次要情节(2,1,1)情节(mu11) ylabel (“\ mu_{11}”)包含(“迭代”)轴次要情节(2,1,2)情节(priormoved);ylabel (“之前P(主题了))包含(“迭代”)轴

适合当它处理每个块时,更新预测器分布的后验均值。因为先验类分布被指定为均匀的, π (物体在移动)= 0.6,不改变为适合流程每个块。

使用。训练朴素贝叶斯分类模型fitcnb,将其转换为增量学习器,跟踪其在流数据上的表现,然后将其与数据进行匹配。指定观察权重。

加载和预处理数据

加载人工活动数据集。随机洗牌数据。

负载humanactivityrng (1);%的再现性n =元素个数(actid);idx = randsample (n, n);X =壮举(idx:);Y = actid (idx);

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

假设受试者不移动时收集的数据(Y<= 2)的质量是物体移动时的两倍。创建一个权重变量,2表示从静止物体收集到的观测值,1表示从移动物体收集到的观测值。

n = 1, n = 1;

训练朴素贝叶斯分类模型

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

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: {1×60 cell} DistributionParameters: {5×60 cell}属性,方法

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

转换训练模型

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

IncrementalMdl = incrementalLearner (TTMdl)
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [1×2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1×60 cell} DistributionParameters: {5×60 cell}属性,方法

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

分别跟踪性能指标和适合模型

对剩余的数据进行增量学习updateMetrics适合功能。在每一次迭代:

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

  2. 调用updateMetrics更新模型的累积误差和窗口分类误差。覆盖先前的增量模型以更新指标财产。注意,该函数并不使模型适合数据块——数据块是模型的“新”数据。设置观测权值。

  3. 调用适合使模型与观测数据相吻合。覆盖之前的增量模型以更新模型参数。设置观测权值。

  4. 以最小的成本储存。

%预先配置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 = updateMetrics (IncrementalMdl自(idx:), Yil (idx),...“重量”会(idx));mc {j:} = IncrementalMdl。指标{“MinimalCost”,:};IncrementalMdl =适合(IncrementalMdl自(idx:), Yil (idx),“重量”会(idx));结束

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

或者,您可以使用updateMetricsAndFit更新给定新数据块的模型的性能指标,然后使模型适合于数据。

绘制性能指标的跟踪图。

h =情节(mc.Variables);xlim ([0 nchunk]);ylabel (“最小成本”传奇(h, mc.Properties.VariableNames)包含(“迭代”

累积损失逐渐稳定,而窗口损失跳跃。

增量训练朴素贝叶斯分类模型,仅当其性能下降时。

加载人工活动数据集。随机洗牌数据。

负载humanactivityn =元素个数(actid);rng (1)%的再现性idx = randsample (n, n);X =壮举(idx:);Y = actid (idx);

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

为增量学习配置朴素贝叶斯分类模型,使期望的最大类数为5,跟踪的性能度量包括误分类错误率,度量窗口大小为1000。使配置的模型适合前1000个观察。

Mdl = incrementalClassificationNaiveBayes (“MaxNumClasses”5,“MetricsWindowSize”, 1000,...“指标”“classiferror”);initobs = 1000;Mdl =适合(Mdl X (1: initobs,:), Y (1: initobs));

Mdl是一个incrementalClassificationNaiveBayes模型对象。

使用条件拟合进行增量学习,每次迭代遵循以下程序:

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

  • 更新传入数据块上的模型性能。

  • 只有当误分类错误率大于0.05时,才能将模型拟合到数据块上。

  • 在跟踪性能和拟合时,覆盖之前的增量模型。

  • 在第二类中存储第一类预测器的误分类错误率和平均值 μ 21 看看他们在训练中是如何发展的。

  • 跟踪时适合火车模型。

%预先配置numObsPerChunk = 100;nchunk = floor((n - initobs)/numObsPerChunk);mu21 = 0 (nchunk, 1);ce = array2table (nan (nchunk, 2),“VariableNames”, (“累积”“窗口”]);训练= false (nchunk, 1);%增量式拟合n = 1:nchunk 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”,:};如果{j,2} > 0.05 Mdl =拟合(Mdl,X(idx,:),Y(idx));训练(j) = true;结束mu21 (j) = Mdl.DistributionParameters {1}, (1);结束

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

看看模型的表现和 μ 21 在训练中进化,把它们放在不同的次要情节上。

次要情节(2,1,1)情节(mu21)情节(找到(训练),mu21(训练),“r”。) ylabel (“\ mu_{21}”)传说(“\ mu_{21}”培训发生的“位置”“最佳”)举行次要情节(2,1,2)情节(ce.Variables) ylabel (“误分类错误率”)包含(“迭代”)传说(ce.Properties.VariableNames“位置”“最佳”

的轨迹图 μ 21 显示为常数周期,在此期间前1000个观察窗口内损失不超过0.05。

输入参数

全部折叠

用于适应流式数据的增量学习的朴素贝叶斯分类模型,指定为incrementalClassificationNaiveBayes模型对象。您可以创建Mdl直接或转换支持的,传统训练的机器学习模型使用金宝appincrementalLearner函数。详细信息请参见对应的参考页面。

模型拟合的预测数据块,指定为n——- - - - - -Mdl。NumPredictors浮点矩阵。

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

请注意

如果Mdl。NumPredictors= 0,适合推断预测器的数量X,并设置输出模型的一致性属性。否则,如果流数据中的预测变量数量发生变化Mdl。NumPredictors适合一个错误的问题。

数据类型:|

模型适合的标签块,指定为类别、字符或字符串数组、逻辑或浮点向量,或字符向量的单元格数组。

观察标签的长度Y观察的次数X必须是相等的;Y (j是观察的标签吗j(行或列)在X适合当满足至少一个条件时发出错误:

  • Y包含一个新遇到的标签和类的最大数量已经达到以前(参见MaxNumClasses一会参数的incrementalClassificationNaiveBayes).

  • 的数据类型YMdl。一会是不同的。

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

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

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

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

数据类型:|

请注意

如果一个观察(预测器或标签)或重量中至少有一个缺失()的值,适合忽略了观察。因此,适合使用不到n观察,以计算模型性能。

输出参数

全部折叠

更新了用于增量学习的朴素贝叶斯分类模型,作为与输入模型相同数据类型的增量学习模型对象返回Mdl,一个incrementalClassificationNaiveBayes对象。

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

  • 属性指定所有期望的类一会当您创建输入模型时,名称-值参数Mdl使用incrementalClassificationNaiveBayes适合

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

    2. 扩展Mdl。成本到一个c——- - - - - -c矩阵,c是班级数吗Mdl。一会.由此产生的误分类代价矩阵被平衡。

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

  • 如果您在创建输入模型时指定了所有期望的类Mdl或者转换一个传统训练的朴素贝叶斯模型incrementalLearner,但不指定误分类代价矩阵(Mdl。成本),适合设置处理类的误分类成本为1和未处理的类.例如,如果适合处理可能的三个类中的前两个类,Mdl。成本[0 1南;1 0南;1 1 0)

更多关于

全部折叠

Bag-of-Tokens模型

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

提示

  • 与传统训练不同,增量学习可能没有单独的测试集。因此,要将每个传入的数据块视为一个测试集,将增量模型和每个传入的数据块传递给updateMetrics在用相同的数据训练模型之前。

算法

全部折叠

正态分布估计

如果预测变量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.与添加剂平滑[1],估计的概率是

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.与添加剂平滑[1],估计的概率是

    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

观察权重

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

如果先验类别概率分布已知(换句话说,先验分布不是经验的),适合将观察权值归一化到各自类中的先验类概率。这个操作意味着默认的观察权值是各自的先验类概率。

如果先验类概率分布是经验的,软件将指定的观察权值归一化,使其在每次调用时之和为1适合

兼容性的考虑

全部展开

行为在R2021b中改变

参考文献

[1] Manning, Christopher D., Prabhakar Raghavan, Hinrich Schütze。信息检索概论,纽约:剑桥大学出版社,2008。

介绍了R2021a