Как масштабировать массив целых чисел со знаком в диапазоне от 0 до 1?

15

Я использую мозг для обучения нейронной сети на наборе функций, который включает в себя как положительные, так и отрицательные значения. Но Brain требует входных значений от 0 до 1. Как лучше всего нормализовать мои данные?

Джонатан Шобрук
источник

Ответы:

25

Это называется единой нормализацией. Если у вас есть вектор X , вы можете получить его нормализованную версию, скажем, Z , выполнив:

Z=Xmin(X)max(X)min(X)
stochazesthai
источник
1
Этот подход также известен как нормализация min-max (так как мы используем минимальные и максимальные значения)
Шагун Содхани
Можно ли использовать этот метод для нормализации значения, которое представляет собой процент и может быть отрицательным, но всегда выше -2% и ниже 30%? Не будет ли сложнее для нейронной сети понять значение, означающее, если я нормализую его таким образом?
Иван
3

Найдите самое большое положительное число и самое маленькое (самое отрицательное) число в массиве. Добавьте абсолютное значение наименьшего (самого отрицательного) числа к каждому значению в массиве. Разделите каждый результат на разницу между наибольшим и наименьшим числом.

mcduffee
источник
@Jonathan: это не имеет значения, если оба значения находятся в одном массиве, исходном или обновленном. Поскольку к каждому значению добавляется одно и то же число, разница между минимальным и максимальным остается неизменной.
RemcoGerlich
1

скажем, у вас есть вектор / массив значений v = [1, -2, 3]

minV = Math.min.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] -= minV;}
maxV = Math.max.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] /= ( maxV - minV );}

Выход в конце будет v = [0.6, 0, 1]. Объяснение:

  1. Перемещение всего диапазона значений с нуля, чтобы у нас не было негативов

  2. Деление значений на (max - min) диапазона, так что max будет 1

device_exec
источник
1

Прежде чем сделать это, вы можете проверить наличие выбросов. Скажем, 99% данных находятся в диапазоне (-5, 5), но один маленький парень принимает значение 25,0. Ваш нормализованный массив будет сгруппирован вокруг (0, 0,3), и это вызовет проблемы для обучения нейронной сети.

horaceT
источник