主要内容

损失

类:RegressionLinear

线性回归模型的回归损失

描述

例子

l=损失(MdlXY返回线性回归模型的均方误差(MSE)Mdl使用预测器数据X和相应的响应Yl中每个正则化强度都包含一个MSEMdl

l=损失(Mdl资源描述ResponseVarName返回预测器数据的MSE资源描述其中的真响应资源描述。ResponseVarName

l=损失(Mdl资源描述Y返回表中预测器数据的MSE资源描述其中的真响应Y

例子

l=损失(___名称,值除以前语法中的任何输入参数组合外,还使用一个或多个名称-值对参数指定选项。例如,指定预测器数据中的列对应于观测值或指定回归损失函数。

请注意

如果预测数据X或者预测变量资源描述包含任何缺失的值,则损失函数可以返回NaN。详情请参见loss可以为丢失值的预测器数据返回NaN

输入参数

全部展开

线性回归模型,指定为aRegressionLinear模型对象。您可以创建RegressionLinear使用模型对象fitrlinear

预测器数据,指定为n——- - - - - -p全矩阵或稀疏矩阵。这个方向X指示行对应于单个观测值,列对应于单个预测变量。

请注意

如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”,那么您可能会经历计算时间的显著减少。

的长度Y观察的次数X必须是相等的。

数据类型:|

响应数据,指定为n-维数值向量。的长度Y必须等于中的观测数X资源描述

数据类型:|

用于训练模型的示例数据,指定为表。每行资源描述对应一个观测值,每一列对应一个预测变量。可选地,资源描述可以包含响应变量和观察权重的附加列。资源描述必须包含用于训练的所有预测器Mdl.不允许使用字符向量的单元格数组以外的多列变量和单元格数组。

如果资源描述包含用于训练的响应变量Mdl,则不需要指定ResponseVarNameY

如果你训练Mdl使用样本数据包含在一个表中,然后输入数据为损失也必须在表中。

响应变量名,指定为中的变量名资源描述.响应变量必须是数值向量。

如果你指定ResponseVarName,则必须将其指定为字符向量或字符串标量。例如,如果响应变量存储为资源描述。Y,然后指定ResponseVarName作为“Y”.否则,软件处理的所有列资源描述,包括资源描述。Y,作为预测指标。

数据类型:字符|字符串

名称-值参数

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

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

损失函数,指定为逗号分隔的对,由“LossFun”和内置的损失函数名或函数句柄。

  • 下表列出了可用的损失函数。使用相应的值指定一个。同样,在表格中, f x x β + b

    • β的向量p系数。

    • x是来自p预测变量。

    • b是标量偏置。

    价值 描述
    “epsiloninsensitive” Epsilon-insensitive损失: y f x 马克斯 0 | y f x | ε
    mse的 均方误差: y f x y f x 2

    “epsiloninsensitive”仅适用于SVM学习器。

  • 使用函数句柄表示法指定自己的函数。

    n的观测数X.你的函数必须有这个签名

    lossvalue =lossfun(Y, Yhat W)
    地点:

    • 输出参数lossvalue是标量。

    • 选择函数名(lossfun).

    • Y是一个n观测响应的-维向量。损失传递输入参数YY

    • Yhat是一个n预测响应的-维向量,与的输出相似预测

    • W是一个n-by-1观测权重的数值向量。

    使用以下命令指定函数“LossFun”@lossfun

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

预测器数据观测维数,指定为“行”“列”

请注意

如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”,那么您可能会经历计算时间的显著减少。你不能指定“ObservationsIn”、“列”用于表中的预测器数据。

数据类型:字符|字符串

观察权重,由逗号分隔的对组成“重量”和数值向量或变量名资源描述

  • 如果你指定权重作为一个数值向量,则大小为权重必须等于中的观测数X资源描述

  • 如果你指定权重作为变量的名称资源描述,则名称必须为字符向量或字符串标量。例如,如果权重存储为资源描述。W,然后指定权重作为' W '.否则,软件处理的所有列资源描述,包括资源描述。W,作为预测指标。

如果你提供权重,损失计算加权回归损失并归一化权重和为1。

数据类型:|

输出参数

全部展开

回归损失,作为数字标量或行向量返回。的解释l取决于权重而且LossFun

l尺寸和Mdl。lambdaL (j线性回归模型的回归损失是用正则化强度训练的吗Mdl。lambda(j

请注意

如果Mdl。FittedLossmse的,则目标函数中的损失项为MSE的一半。损失默认情况下返回MSE。因此,如果你使用损失检查再替换(训练)误差,则MSE与优化结果之间存在差异,即fitrlinear的回报。

例子

全部展开

从这个模型中模拟10000个观测值

y x 1 0 0 + 2 x 2 0 0 + e

  • X x 1 x 1 0 0 0 是一个10000 × 1000的稀疏矩阵,其中10%为非零标准正规元素。

  • e均值为0,标准差为0.3的随机正态误差。

rng (1)%用于再现性N = 1e4;D = 1e3;Nz = 0.1;X = sprandn(n,d,nz);Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

训练一个线性回归模型。保留30%的观察结果作为保留样本。

CVMdl = fitrlinear(X,Y,“坚持”, 0.3);Mdl = CVMdl。训练有素的{1}
Mdl = RegressionLinear ResponseName: 'Y' ResponseTransform: 'none' Beta: [1000x1 double]偏差:-0.0066 Lambda: 1.4286e-04学习者:'svm'属性,方法

CVMdl是一个RegressionPartitionedLinear模型。它包含属性训练有素的,这是一个1乘1单元格数组,包含一个RegressionLinear软件使用训练集训练的模型。

从分区定义中提取训练和测试数据。

trainIdx = training(CVMdl.Partition);testdx = test(CVMdl.Partition);

估计训练样本和测试样本的MSE。

mseTrain = loss(Mdl,X(trainIdx,:),Y(trainIdx))
mseTrain = 0.1496
mseTest =损失(Mdl,X(testdx,:),Y(testdx))
mseTest = 0.1798

因为有一个正则化的强度MdlmseTrain而且mseTest都是数值标量。

从这个模型中模拟10000个观测值

y x 1 0 0 + 2 x 2 0 0 + e

  • X x 1 x 1 0 0 0 是一个10000 × 1000的稀疏矩阵,其中10%为非零标准正规元素。

  • e均值为0,标准差为0.3的随机正态误差。

rng (1)%用于再现性N = 1e4;D = 1e3;Nz = 0.1;X = sprandn(n,d,nz);Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);X = X';将观察结果列在栏中,以便更快地训练。

训练一个线性回归模型。保留30%的观察结果作为保留样本。

CVMdl = fitrlinear(X,Y,“坚持”, 0.3,“ObservationsIn”“列”);Mdl = CVMdl。训练有素的{1}
Mdl = RegressionLinear ResponseName: 'Y' ResponseTransform: 'none' Beta: [1000x1 double]偏差:-0.0066 Lambda: 1.4286e-04学习者:'svm'属性,方法

CVMdl是一个RegressionPartitionedLinear模型。它包含属性训练有素的,这是一个1乘1单元格数组,包含一个RegressionLinear软件使用训练集训练的模型。

从分区定义中提取训练和测试数据。

trainIdx = training(CVMdl.Partition);testdx = test(CVMdl.Partition);

创建一个度量Huber损失的匿名函数( δ = 1),即,

l 1 w j j 1 n w j j

在哪里

j 0 5 e j ˆ 2 | e j ˆ | - 0 5 | e j ˆ | 1 | e j ˆ | > 1

e j ˆ 残差是用来观察的吗j.自定义损失函数必须以特定的形式编写。有关编写自定义损失函数的规则,请参见“LossFun”名称-值对参数。

huberloss = @ (Y, Yhat, W)和(W . * ((0.5 * (abs (Y-Yhat) < = 1)。* (Y-Yhat) ^ 2) +...((abs (Y-Yhat) > 1)。* abs (Y-Yhat) -0.5))) / (W)之和;

利用Huber损失函数估计训练集和测试集的回归损失。

eTrain = loss(Mdl,X(:,trainIdx),Y(trainIdx),“LossFun”huberloss,...“ObservationsIn”“列”
eTrain = -0.4186
eTest =损失(Mdl,X(:, testdx),Y(testdx),“LossFun”huberloss,...“ObservationsIn”“列”
eTest = -0.4010

从这个模型中模拟10000个观测值

y x 1 0 0 + 2 x 2 0 0 + e

  • X x 1 x 1 0 0 0 是一个10000 × 1000的稀疏矩阵,其中10%为非零标准正规元素。

  • e均值为0,标准差为0.3的随机正态误差。

rng (1)%用于再现性N = 1e4;D = 1e3;Nz = 0.1;X = sprandn(n,d,nz);Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

创建一组15个对数间隔的正则化强度 1 0 - 4 通过 1 0 - 1

Lambda = logspace(-4,-1,15);

保留30%的数据用于测试。确定测试样本指数。

cvp = cvpartition(numel(Y),“坚持”, 0.30);idxTest = test(cvp);

训练线性回归模型使用套索惩罚与力量λ.指定正则化强度,使用SpaRSA优化目标函数,以及数据分区。要提高执行速度,可以调换预测器数据,并指定观察值为列。

X = X';CVMdl = fitrlinear(X,Y,“ObservationsIn”“列”“λ”λ,...“规划求解”“sparsa”“正规化”“套索”“CVPartition”、本量利);Mdl1 = cvmdl .训练{1};元素个数(Mdl1.Lambda)
Ans = 15

Mdl1是一个RegressionLinear模型。因为λ是一个15维的正则化强度向量,你能想到吗Mdl1作为15个训练过的模型,每个模型对应一个正则化强度。

估计每个正则化模型的测试样本均方误差。

mse = loss(Mdl1,X(:,idxTest),Y(idxTest),“ObservationsIn”“列”);

较高的值λ导致预测变量的稀疏性,这是回归模型的一个很好的品质。使用整个数据集和之前使用的所有选项(数据分区规范除外)重新训练模型。确定每个模型的非零系数的数量。

Mdl = fitrlinear(X,Y,“ObservationsIn”“列”“λ”λ,...“规划求解”“sparsa”“正规化”“套索”);numNZCoeff = sum(Mdl.Beta~=0);

在同一图中,绘制每个正则化强度的MSE和非零系数的频率。在对数尺度上画出所有变量。

图;[h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),...log10(λ)log10 (numNZCoeff));hL1。标志=“o”;hL2。标志=“o”;ylabel (h (1),“log_ {10} MSE的) ylabel (h (2),'log_{10}非零系数频率')包含(“log_{10}λ的)举行

图中包含2个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。

的索引λ平衡最小分类错误和预测变量稀疏性(例如,λ(11)).

Idx = 11;MdlFinal = selectModels(Mdl,idx);

MdlFinal是受过训练的RegressionLinear使用λ(11)作为正则化的力量。

扩展功能

版本历史

在R2016a中引入

全部展开