为增量学习训练线性模型
的适合
函数拟合线性回归的已配置增量学习模型(incrementalRegressionLinear
对象)或线性二元分类(incrementalClassificationLinear
对象)到流数据。若要在数据到达时使用它来跟踪性能指标,请使用updateMetricsAndFit
代替。
创建一个默认的增量线性SVM模型用于二进制分类。指定5000个观测值的估计周期和SGD求解器。
Mdl =增量分类线性(“EstimationPeriod”, 5000,“规划求解”,“sgd”)
Mdl = incrementalClassificationLinear IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' Beta: [0x1 double]偏差:0学习者:'svm'属性,方法
Mdl
是一个incrementalClassificationLinear
模型。它的所有属性都是只读的。
Mdl
在使用它执行任何其他操作之前,必须适合于数据。
加载人类活动数据集。随机打乱数据。
负载humanactivityN = numel(actid);rng (1)%用于再现性Idx = randsample(n,n);X = feat(idx,:);Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
回答可以分为五类:坐着、站着、走着、跑着或跳舞。通过识别被测者是否在移动(actid
> 2)。
Y = Y > 2;
将增量模型拟合到训练数据中,每次以50个观测数据为块适合
函数。在每次迭代中:
通过处理50个观测数据来模拟一个数据流。
将先前的增量模型覆盖为一个适合于新观测的新模型。
商店
,训练观察的次数,受试者是否移动的先验概率(Y
=真正的
),看看它们在增量训练中是如何演变的。
%预先配置numObsPerChunk = 50;nchunk = floor(n/numObsPerChunk);Beta1 = 0 (nchunk,1);Numtrainobs = 0 (nchunk,1);Priormoved = 0 (nchunk,1);%增量拟合为j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min(n,numObsPerChunk*j);Idx = ibegin:iend;Mdl = fit(Mdl,X(idx,:),Y(idx));beta1(j) = Mdl.Beta(1);numtrainobs(j) = mll . numtrainingobservations;priormoved(j) = mll . prior (Mdl. prior)ClassNames == true);结束
IncrementalMdl
是一个incrementalClassificationLinear
在流中的所有数据上训练的模型对象。
要了解参数在增量学习过程中是如何演变的,请将它们绘制在单独的子图上。
图;Subplot (2,2,1)“\ beta_1”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);包含(“迭代”)轴紧次要情节(2 2 2)情节(numtrainobs);ylabel (“训练观察次数”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);包含(“迭代”)轴紧次要情节(2,2,3)情节(priormoved);ylabel (“Prior P(主语已移动)”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);包含(“迭代”)轴紧
情节表明适合
直到估计期结束后才使模型适合数据或更新参数。
训练一个用于二元分类的线性模型fitclinear
,将其转换为增量学习器,跟踪其性能,并使其适应流数据。在列中定位观测值,并指定观测值的权重。
加载和预处理数据
加载人类活动数据集。随机打乱数据。在列中定位预测器数据的观测值。
负载humanactivityrng (1);%用于再现性N = numel(actid);Idx = randsample(n,n);X = feat(idx,:)';Y = actid(idx);
关于数据集的详细信息,请输入描述
在命令行。
回答可以分为五类:坐着、站着、走着、跑着或跳舞。通过识别被测者是否在移动(actid
> 2)。
Y = Y > 2;
假设被测者不运动时收集的数据(Y
=假
)的质量是物体移动时的两倍。创建一个权重变量,将2归属于从静止主体收集的观察结果,1归属于移动主体。
W = ones(n,1) + ~Y;
二元分类训练线性模型
用二分之一的随机样本拟合二元分类的线性模型。
Idxtt = randsample([true false],n,true);TTMdl = fitclinear(X(:,idxtt),Y(idxtt),“ObservationsIn”,“列”,...“重量”W (idxtt))
TTMdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double]偏差:-0.1107 Lambda: 8.2967e-05学习者:'svm'属性,方法
TTMdl
是一个ClassificationLinear
模型对象,表示用于二进制分类的传统训练线性模型。
转换训练模型
将传统训练的分类模型转换为增量学习的二元分类线性模型。
IncrementalMdl =增量学习者(TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1x2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double]偏差:-0.1107 Learner: 'svm'属性,方法
分别跟踪绩效指标和适合模型
方法对其余数据执行增量学习updateMetrics
而且适合
功能。在每次迭代中:
通过一次处理50个观测数据来模拟数据流。
调用updateMetrics
在给定传入观测数据块的情况下,更新模型的累积和窗口分类误差。的增量模型中更新损失指标
财产。注意,函数并没有将模型与数据块相匹配——数据块是模型的“新”数据。指定观测值以列为方向,并指定观测值权重。
调用适合
使模型与观测数据相匹配。覆盖之前的增量模型以更新模型参数。指定观测值以列为方向,并指定观测值权重。
存储分类误差和第一次估计系数 .
%预先配置Idxil = ~idxtt;Nil = sum(idxil);numObsPerChunk = 50;nchunk = floor(nil/numObsPerChunk);Ce = array2table(0 (nchunk,2),“VariableNames”, (“累积”“窗口”]);beta1 = [incrementalmml . beta (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),...“ObservationsIn”,“列”,“重量”会(idx));ce{j,:} = IncrementalMdl。指标{“ClassificationError”,:};增量mdl = fit(增量mdl,Xil(:,idx),Yil(idx),“ObservationsIn”,“列”,...“重量”会(idx));beta1(j + 1) = incrementalmml . beta (1);结束
IncrementalMdl
是一个incrementalClassificationLinear
在流中的所有数据上训练的模型对象。
或者,您可以使用updateMetricsAndFit
更新给定数据块的模型的性能指标,然后将模型与数据进行拟合。
绘制性能指标和估计系数的轨迹图 .
图;subplot(2,1,1) h = plot(ce.Variables);xlim ([0 nchunk]);ylabel (分类错误的) subplot(2,1,2) plot(beta1) ylabel(“\ beta_1”) xlim([0 nchunk]);包含(“迭代”)
累积损失是稳定的,并逐渐减小,而窗口损失跳跃。
逐渐变化,然后趋于平稳,如适合
处理更多的块。
只有当线性回归模型的性能下降时,才对其进行增量训练。
加载和洗牌2015年纽约市住房数据集。有关数据的详细信息,请参见纽约市开放数据.
负载NYCHousing2015rng (1)%用于再现性n = size(NYCHousing2015,1);Shuffidx = randsample(n,n);NYCHousing2015 = NYCHousing2015(shuffidx,:);
提取响应变量SALEPRICE
从桌子上。为了数值的稳定性,刻度SALEPRICE
通过1 e6
.
Y = nychousing2015 . salesprice /1e6;NYCHousing2015。售价= [];
从分类预测器创建虚拟变量矩阵。
Catvars = [“区”“BUILDINGCLASSCATEGORY”“社区”];dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,...“数据源”, catvars);Dumvarmat = table2array(dumvarstbl);NYCHousing2015(:,catvars) = [];
将表中所有其他数值变量视为销售价格的线性预测因子。将虚拟变量矩阵连接到其余的预测器数据。
idxnum = varfun(@isnumeric,NYCHousing2015,“OutputFormat”,“统一”);X = [dumvarmat NYCHousing2015{:,idxnum}];
为增量学习配置线性回归模型,这样它就不会有估计或指标预热期。指定度量窗口大小为1000。将配置的模型与前100个观测值相匹配。
Mdl =增量回归线性(“EstimationPeriod”0,“MetricsWarmupPeriod”0,“MetricsWindowSize”, 1000);numObsPerChunk = 100;Mdl = fit(Mdl,X(1:numObsPerChunk,:),Y(1:numObsPerChunk));
Mdl
是一个incrementalRegressionLinear
模型对象。
使用条件拟合执行增量学习,每次迭代都遵循以下步骤:
通过一次处理100个观测数据块来模拟数据流。
在200个观测窗口内,通过计算ε不敏感损失来更新模型性能。
只有当损失是最小损失的两倍以上时,模型才适合数据块。
在跟踪性能和拟合时,覆盖之前的增量模型。
存储不敏感损失和 看看损耗和系数在训练过程中是如何演变的。
跟踪时适合
训练模型。
%预先配置n = nummel (Y) - numObsPerChunk;nchunk = floor(n/numObsPerChunk);Beta313 = 0 (nchunk,1);Ei = array2table(nan(nchunk,2),“VariableNames”, (“累积”“窗口”]);训练= false(nchunk,1);%增量拟合为j = 2:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1);iend = min(n,numObsPerChunk*j);Idx = ibegin:iend;Mdl = updateMetrics(Mdl,X(idx,:),Y(idx));ei{j,:} = Mdl。指标{“EpsilonInsensitiveLoss”,:};Minei = min(ei{:,2});Pdiffloss = (ei{j,2} - minei)/minei*100;如果pdiffloss > 100 Mdl = fit(Mdl,X(idx,:),Y(idx));训练(j) = true;结束beta313(j) = Mdl.Beta(end);结束
Mdl
是一个incrementalRegressionLinear
在流中的所有数据上训练的模型对象。
看看模型的性能如何 在训练过程中进化出来的,把它们画在单独的子图上。
Subplot (2,1,1) plot(beta313)保持不变在情节(找到(训练),beta313(训练),“r”。) ylabel (“\ beta_”{313})参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);传奇(“\ beta_”{313},培训发生的,“位置”,“东南”)举行从subplot(2,1,2) plot(ei.Variables) ylabel(“不敏感损失”)参照线(Mdl。EstimationPeriod / numObsPerChunk,r -。);包含(“迭代”传奇(ei.Properties.VariableNames)
的轨迹图 显示恒定值的时期,在此期间损失没有从经历的最小值翻倍。
Mdl
- - - - - -增量学习模型,以适应流数据incrementalClassificationLinear
模型对象|incrementalRegressionLinear
模型对象增量学习模型以适应流数据,指定为incrementalClassificationLinear
或incrementalRegressionLinear
模型对象。你可以创建Mdl
直接或通过转换支持的,传统训练的机器学习模型使用金宝appincrementalLearner
函数。更多详细信息,请参见相应的参考页面。
X
- - - - - -预测数据块模型拟合的预测器数据块,指定为的浮点矩阵n观察和Mdl。NumPredictors
预测变量。的值“ObservationsIn”
名称-值对参数决定变量和观察值的方向。
观察标签的长度Y
观察的次数X
必须平等;Y (
是观察的标签吗j(行或列)在j
)X
.
请注意
数据类型:单
|双
请注意
如果观察(预测或标签)或权重重量
包含至少一个缺失(南
)的值,适合
忽略观察结果。因此,适合
使用少于n计算模型性能的观察结果。
数据块大小n和随机梯度下降(SGD)超参数批量大小(Mdl。BatchSize
)可以是不同的值。如果n<Mdl。BatchSize
,适合
使用n应用SGD时可用的观测值。
的可选逗号分隔对名称,值
参数。名字
参数名称和价值
对应的值。名字
必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
“ObservationsIn”、“列”、“重量”,W
指定预测器矩阵的列对应于观测值,以及向量W
包含在增量学习期间应用的观察权重。
Mdl
-更新的增量学习模型incrementalClassificationLinear
模型对象|incrementalRegressionLinear
模型对象更新的增量学习模型,作为与输入模型具有相同数据类型的增量学习模型对象返回Mdl
,要么incrementalClassificationLinear
或incrementalRegressionLinear
.
如果Mdl。EstimationPeriod
> 0,增量拟合函数updateMetricsAndFit
而且适合
使用第一个估计超参数Mdl。EstimationPeriod
传递给任一函数的观测值;他们不会将输入模型训练为该数据。但是,如果传入块n观测值大于或等于估计期内剩余的观测值数米,适合
使用第一个估计超参数n- - - - - -米,并将输入模型拟合到其余的米观察。因此,软件更新β
而且偏见
属性、超参数属性和记录保存属性,例如NumTrainingObservations
.
对于分类问题,如果一会
属性的输入模型Mdl
是一个空数组,适合
设置一会
属性的输出模型Mdl
来独特的(Y)
.
与传统的训练不同,增量学习可能没有单独的测试(坚持)集。因此,要将每个传入的数据块视为一个测试集,将增量模型和每个传入的数据块传递给updateMetrics
在用相同的数据训练模型之前。
对于分类问题,如果先验类概率分布已知(换句话说,先验分布不是经验的),适合
将观察权重归一化,使其与各自类中的先验类概率相加。这个动作意味着,默认情况下,观测权重是各自的先验类概率。
对于回归问题或先验类概率分布是经验的,软件将指定的观察权重归一化,每次调用时求和为1适合
.
使用注意事项和限制:
使用saveLearnerForCoder
,loadLearnerForCoder
,codegen
(MATLAB编码器)方法生成代码适合
函数。通过使用保存一个训练好的模型saveLearnerForCoder
.定义一个入口点函数,该函数通过loadLearnerForCoder
并调用适合
函数。然后使用codegen
为入口点函数生成代码。
生成单精度C/ c++代码适合
,指定名称-值参数“数据类型”、“单”
当你打电话给loadLearnerForCoder
函数。
该表包含关于的参数的注释适合
.完全支持不包括在本表中的参数。金宝app
论点 | 注意事项和限制 |
---|---|
|
有关模型对象的使用说明和限制,请参见 |
|
|
|
|
以下限制适用:
如果你配置Mdl
打乱数据(Mdl。洗牌
是真正的
,或Mdl。解算器
是“sgd”
或“asgd”
),适合
函数随机洗牌每批传入的观测值,然后再将模型与该批匹配。打乱后的观测顺序可能与MATLAB生成的顺序不匹配®.因此,在MATLAB中计算的拟合系数与生成的代码可能不相等。
也可以对所有浮点输入参数和对象属性使用同构数据类型单
或双
.
有关更多信息,请参见代码生成简介.
다음matlab명령에해당하는링크를클릭했습니다。
명령을실행하려면matlab명령창에입력하십시오。웹브라우저는matlab명령을지원하지않습니다。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。