特征缩放和拦截

feature scaling and intercept

这是一个初学者问题,但我有一个包含房屋大小和卧室数量两个特征的数据集,所以我正在研究 Octave;所以基本上我尝试做一个特征缩放但是在设计矩阵中我添加了一列(对于 tetha0)所以我尝试做一个平均归一化:(x-mean(x)/ std(x) 但是在一列中显然平均值是 1 因为每行只有 1 所以当我这样做时截距列设置为 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

所以第一列不应该被排除在均值归一化之外?

是的,您应该首先对所有观察的原始数据集进行归一化,然后才添加偏差项(即 'column of ones')。

归一化的要点是允许在平等的基础上比较各种特征,从而显着加快优化算法。

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

换句话说,不是说 Y = bias + weight1 * X1 + weight2 * X2 等,而是创建一个假想的 X0 = 1,并将偏差表示为 weight0,这样您就可以用向量化的方式表达它时尚如下:Y = weights * X

"Normalising" 偏差项没有意义,因为显然这会使 X0 = 0,其效果是您随后将完全丢弃偏差项的影响。所以是的,首先标准化,然后才将 'ones' 添加到标准化特征。


PS。我在这里走下坡路,猜测您来自 Andrew Ng 在 coursera 上的机器学习课程。您会在 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];