这是一个初学者的问题,但我有一个包含房屋大小和卧室数量两个特征的数据集,因此我正在研究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
那么第一列是否不应该排除在均值归一化之外?
答案 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];