MATLAB 中的线性回归并添加新功能

Linear regression in MATLAB and adding new features

我在 MATLAB 中使用 regress 函数进行多元线性回归。下面是 regress 文档给出的示例代码:

load carsmall
x1 = Weight;
x2 = Horsepower;    % Contains NaN data
y = MPG;

X = [ones(size(x1)) x1 x2 x1.*x2];
b = regress(y,X)    % Removes NaN data

我不明白他们为什么在上面的代码中使用ones(size(x1))x1.*x2。这些分别是下面模型的第一个系数(β 零)和 epsilon 值吗?

yi = b0 +  b1*xi1 +  b2*xi2 + ... bp*xip +  ei for i = 1,2, ... n

如果我有两个以上的特征,例如 x1, x2, x3,我该如何更改上面的公式来解决这个问题?

X 的每一列都是一个特征。具体来说,每一列描述一个值 xi,一行描述一个样本。具体来说,每一行都有 n 个特征,其中每一列描述了该样本的一个特征。

之所以将第一列全部设为 1,是因为这将允许您在模型中使用截距项。这允许您有偏见并且独立于您输入的任何功能。它还试图帮助最大限度地减少预测错误。在线性回归中,你是正确的,因为你有一个预测模型,它是权重项的总和。

具体应该是

yi = b0*x0 + b1*x1 + b2*x2 + ...bi*xi + ... + bn*xn + ei, for i = 1, 2, ... n

ei 是为样本获得所需输出而引入的错误。线性回归旨在 最小化每个样本引入的误差 以便当您输入未知特征向量/样本时,输出应该为您提供误差最少的预测。使用 regress 时,您无权访问该值,但请放心,它不是必需的,并且该值已计入回归系数,以便在执行预测时产生的错误量最少.

如您所见,与您的方程式进行比较时,模型要求 x0 为 1 以允许 b0 作为截距项,这就是为什么您有第一列的原因作为所有存在者。现在,这就是全部 "linear" 的原因是因为即使您的一个特征是非线性的,权重 bn 是线性的 。具体来说,您正在查看三个功能:

x1 = Weight
x2 = Horsepower
x3 = x1*x2 --> Weight * Horsepower

输出会给你 4 个线性回归系数(包括截距项),告诉你每个特征在预测输出时有多少权重。如果您想添加更多功能,只需向 X 添加更多列,这将为您提供更多可用于对测试数据执行回归的系数。

例如,假设您想在矩阵中再添加两个特征:CylindersDisplacement

因此,您所要做的就是:

load carsmall
x1 = Weight;
x2 = Horsepower;    % Contains NaN data
x3 = Cylinders; %// New
x4 = Displacement; %// New
y = MPG;

X = [ones(size(x1)) x1 x2 x1.*x2 x3 x4]; %// New
b = regress(y,X)    % Removes NaN data

b 将包含对每个特征进行加权的系数,以便您可以使用它来预测 MPG。你拥有的特征越多,你拥有的系数就越多。请注意,引入太多特征可能会导致过度拟合,不幸的是,这会使您在测试数据样本上的准确性很差。

决定要将哪些特征合并到模型中与提高模型预测准确性之间存在微妙的界限。