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

时间:2015-08-26 15:52:32

标签: matlab regression linear-regression

我在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。这些是下面模型的第一个系数(beta零)和epsilon值吗?

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

如果我有两个以上的功能,例如x1, x2, x3,我该如何更改上述公式以解决此问题?

1 个答案:

答案 0 :(得分:3)

X的每一列都是一个功能。具体而言,每列描述值xi,一行描述样本。具体而言,每行都有n个功能,其中每列描述该样本的功能。

你将第一列全部放在第一列的原因是因为这将允许你在模型中使用截距项。这允许您具有偏差并且独立于您放入的任何特征。它还旨在帮助最小化预测中的误差。在线性回归中,你是正确的,因为你有一个预测模型,它是具有权重的项的总和。

具体而言,它应该是

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

ei是为样本引入的错误,以获得所需的输出。线性回归旨在最小化为每个样本引入的误差,以便当您在未知特征向量/样本中输入时,输出应该为您提供具有最小误差量的预测。使用regress时,您无法访问此值,但请确保不需要此值,并且此值会计入回归系数中,以便产生最少量的错误进行预测时。

正如您所看到的,当与您的等式进行比较时,模型需要x0为1以允许b0充当拦截术语,这就是为什么您将第一列作为所有是一个人。现在,这就是全部"线性"是因为即使您的某个功能是非线性的,权重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。您拥有的功能越多,您拥有的系数就越多。请注意,引入太多特征可能会导致过度拟合,并且遗憾的是,测试数据样本的准确性会很差。

在决定要将哪些功能合并到模型中以及提高模型预测准确性之间存在一条界线。