Да, вы должны сначала нормализовать исходный набор данных по всем наблюдениям, а только затем добавить термин смещения (т. Е. «Столбец единиц»).
Точка нормализации состоит в том, чтобы разрешитьразличные функции должны сравниваться на равной основе, что значительно ускоряет алгоритмы оптимизации.
Смещение (т. е. столбец единиц) технически не является частью характеристик.Это просто математическое удобство, позволяющее нам использовать одиночное матричное умножение, чтобы получить наш результат вычислительно и нотационно эффективным образом.
Другими словами, вместо того, чтобы говорить Y = bias + weight1 * X1 + weight2 * X2
и т. Д., Вы создаете воображаемое X0 = 1
, и обозначим смещение как weight0
, что затем позволяет выразить его в векторизованном виде следующим образом: Y = weights * X
«Нормализация» термина смещения не имеет смысла, поскольку ясно, что этосделайте X0 = 0
, результатом чего будет то, что вы затем полностью откажетесь от эффекта смещения.Так что да, нормализуйте сначала, и только потом добавляйте «единицы» к нормализованным функциям.
PS.Я собираюсь быть на пороге и предположить, что вы пришли из курса машинного обучения Эндрю Нг на 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];