特征缩放和拦截

时间:2018-10-17 10:10:49

标签: octave normalization

这是一个初学者的问题,但我有一个包含房屋大小和卧室数量两个特征的数据集,因此我正在研究Octave。因此,基本上我尝试进行特征缩放,但是像在“设计矩阵”中一样,我添加了一列(用于tetha0),所以我尝试进行均值归一化:(x- mean(x)/ std(x) 但是在一个明显的列中,平均值是1,因为每行只有1,所以当我这样做时,intercept column设置为0:

 mu = mean(X)
mu =

  1.0000   2000.6809      3.1702

 votric = X - mu
votric =

  0.00000    103.31915     -0.17021
  0.00000   -400.68085     -0.17021
  0.00000    399.31915     -0.17021
  0.00000   -584.68085     -1.17021
  0.00000    999.31915      0.82979

那么第一列是否不应该排除在均值归一化之外?

1 个答案:

答案 0 :(得分:1)

是的,您应该首先对所有观测值进行标准化,然后再添加偏差项(即“ 1的列”)。

归一化的目的是允许在相同的基础上比较各种功能,从而显着加快了优化算法的速度。

技术上,偏差(即一列)不是功能的一部分。允许我们使用单矩阵乘法以计算和符号有效的方式获得结果,只是数学上的便利。

换句话说,您无需创建Y = bias + weight1 * X1 + weight2 * X2,而是创建了一个虚构的X0 = 1,并将偏差表示为weight0,然后您就可以用矢量化方式将其表示为如下:Y = weights * X

“归一化”偏置项没有意义,因为很明显,这样做会X0 = 0,其效果是您随后将完全丢弃偏置项的效果。因此,是的,首先进行规范化,然后才将“ 1”添加到规范化功能中。


PS。我在这里徘徊,猜测您来自Coursera的Andrew Ng的机器学习课程。您将在ex1_multi.m中看到这确实是他在其代码中所做的(第52行)。

% Scale features and set them to zero mean
fprintf('Normalizing Features ...\n');

[X mu sigma] = featureNormalize(X);

% Add intercept term to X
X = [ones(m, 1) X];