масштабирование и перехват объектов - PullRequest
0 голосов
/ 17 октября 2018

это вопрос новичка, но у меня есть набор данных с двумя характеристиками размеров домов и количеством спален, так что я работаю над 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

Таким образом, первый столбец не должен быть оставлен вне среднегонормализация?

1 Ответ

0 голосов
/ 17 октября 2018

Да, вы должны сначала нормализовать исходный набор данных по всем наблюдениям, а только затем добавить термин смещения (т. Е. «Столбец единиц»).

Точка нормализации состоит в том, чтобы разрешитьразличные функции должны сравниваться на равной основе, что значительно ускоряет алгоритмы оптимизации.

Смещение (т. е. столбец единиц) технически не является частью характеристик.Это просто математическое удобство, позволяющее нам использовать одиночное матричное умножение, чтобы получить наш результат вычислительно и нотационно эффективным образом.

Другими словами, вместо того, чтобы говорить 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];
...