损失
线性回归模型的回归损失
描述
返回预测器数据的MSEl
=损失(Mdl
,资源描述
,ResponseVarName
)资源描述
其中的真响应资源描述。ResponseVarName
.
请注意
如果预测数据X
或者预测变量资源描述
包含任何缺失的值,则损失
函数可以返回NaN。详情请参见loss可以为丢失值的预测器数据返回NaN.
输入参数
Mdl
- - - - - -线性回归模型
RegressionLinear
模型对象
线性回归模型,指定为aRegressionLinear
模型对象。您可以创建RegressionLinear
使用模型对象fitrlinear
.
X
- - - - - -预测数据
完整的矩阵|稀疏矩阵
预测器数据,指定为n——- - - - - -p全矩阵或稀疏矩阵。这个方向X
指示行对应于单个观测值,列对应于单个预测变量。
请注意
如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”
,那么您可能会经历计算时间的显著减少。
的长度Y
观察的次数X
必须是相等的。
数据类型:单
|双
资源描述
- - - - - -样本数据
表格
用于训练模型的示例数据,指定为表。每行资源描述
对应一个观测值,每一列对应一个预测变量。可选地,资源描述
可以包含响应变量和观察权重的附加列。资源描述
必须包含用于训练的所有预测器Mdl
.不允许使用字符向量的单元格数组以外的多列变量和单元格数组。
如果资源描述
包含用于训练的响应变量Mdl
,则不需要指定ResponseVarName
或Y
.
如果你训练Mdl
使用样本数据包含在一个表中,然后输入数据为损失
也必须在表中。
ResponseVarName
- - - - - -响应变量名
变量名资源描述
响应变量名,指定为中的变量名资源描述
.响应变量必须是数值向量。
如果你指定ResponseVarName
,则必须将其指定为字符向量或字符串标量。例如,如果响应变量存储为资源描述。Y
,然后指定ResponseVarName
作为“Y”
.否则,软件处理的所有列资源描述
,包括资源描述。Y
,作为预测指标。
数据类型:字符
|字符串
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
LossFun
- - - - - -损失函数
mse的
(默认)|“epsiloninsensitive”
|函数处理
损失函数,指定为逗号分隔的对,由“LossFun”
和内置的损失函数名或函数句柄。
下表列出了可用的损失函数。使用相应的值指定一个。同样,在表格中,
β的向量p系数。
x是来自p预测变量。
b是标量偏置。
价值 描述 “epsiloninsensitive”
Epsilon-insensitive损失: mse的
均方误差: “epsiloninsensitive”
仅适用于SVM学习器。使用函数句柄表示法指定自己的函数。
让n的观测数
X
.你的函数必须有这个签名lossvalue =
lossfun
(Y, Yhat W)输出参数
lossvalue
是标量。选择函数名(
lossfun
).Y
是一个n观测响应的-维向量。损失
传递输入参数Y
在Y
.Yhat
是一个n预测响应的-维向量,与的输出相似预测
.W
是一个n-by-1观测权重的数值向量。
使用以下命令指定函数
“LossFun”@
.lossfun
数据类型:字符
|字符串
|function_handle
ObservationsIn
- - - - - -预测器数据观测维数
“行”
(默认)|“列”
预测器数据观测维数,指定为“行”
或“列”
.
请注意
如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”
,那么您可能会经历计算时间的显著减少。你不能指定“ObservationsIn”、“列”
用于表中的预测器数据。
数据类型:字符
|字符串
输出参数
请注意
如果Mdl。FittedLoss
是mse的
,则目标函数中的损失项为MSE的一半。损失
默认情况下返回MSE。因此,如果你使用损失
检查再替换(训练)误差,则MSE与优化结果之间存在差异,即fitrlinear
的回报。
例子
估计测试样本均方误差
从这个模型中模拟10000个观测值
是一个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
因为有一个正则化的强度Mdl
,mseTrain
而且mseTest
都是数值标量。
指定自定义回归损失
从这个模型中模拟10000个观测值
是一个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),即,
在哪里
残差是用来观察的吗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个观测值
是一个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个对数间隔的正则化强度 通过 .
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}λ的)举行从
的索引λ
平衡最小分类错误和预测变量稀疏性(例如,λ(11)
).
Idx = 11;MdlFinal = selectModels(Mdl,idx);
MdlFinal
是受过训练的RegressionLinear
使用λ(11)
作为正则化的力量。
扩展功能
高大的数组
使用行数超过内存容量的数组进行计算。
版本历史
在R2016a中引入R2022a:损失
可以返回NaN的预测数据与缺失的值
的损失
函数在计算加权平均回归损失时不再忽略具有NaN预测的观测值。因此,损失
现在可以返回NaN时的预测器数据X
或者预测变量资源描述
包含任何缺失的值。在大多数情况下,如果测试集观测值不包含缺失的预测因子,则损失
函数不返回NaN。
当您使用回归模型时,此更改改进了回归模型的自动选择fitrauto
.在此更改之前,软件可能会选择一个具有很少非nan预测器的模型(预计能够最好地预测新数据的响应)。
如果损失
在你的代码中返回NaN,你可以更新你的代码来避免这个结果。使用删除或替换缺失的值rmmissing
或fillmissing
,分别。
下表显示了回归模型损失
对象函数可能返回NaN。有关更多详细信息,请参见每种产品的兼容性考虑因素损失
函数。
模型类型 | 完整或紧凑模型对象 | 损失 目标函数 |
---|---|---|
高斯过程回归(GPR)模型 | RegressionGP ,CompactRegressionGP |
损失 |
高斯核回归模型 | RegressionKernel |
损失 |
线性回归模型 | RegressionLinear |
损失 |
神经网络回归模型 | RegressionNeuralNetwork ,CompactRegressionNeuralNetwork |
损失 |
金宝app支持向量机(SVM)回归模型 | RegressionSVM ,CompactRegressionSVM |
损失 |
另请参阅
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。