Как нормализовать данные между -1 и 1?

36

Я видел формулу нормализации min-max, но она нормализует значения между 0 и 1. Как бы я нормализовал мои данные между -1 и 1? В моей матрице данных есть как отрицательные, так и положительные значения.

covfefe
источник
1
Если вы работаете в R, посмотрите эту ветку для нескольких вариантов. В частности, комментарий к принятому ответу имеет эту функцию, где вы устанавливаете 'newMax' в 1 и 'newMin' в -1 и запускаете функцию для ваших данных
mtreg
Вы можете найти ссылку в Википедии следующим образом: en.wikipedia.org/wiki/Normalization_(statistics)
Салем
Пример Javascript, взятый отсюда . function convertRange (value, r1, r2) {return (value - r1 [0]) * (r2 [1] - r2 [0]) / (r1 [1] - r1 [0]) + r2 [0]; } convertRange (328.17, [300.77, 559.22], [1, 10]); >>> 1.9541497388276272
Джузеппе Канале
1
@covfefe, если вы все еще рядом, возможно, вы захотите принять один из ответов
Simone

Ответы:

97

x[0,1]

Икс'знак равноИкс-минИксМаксимумИкс-минИкс
Икс[0,1]

Для нормализации в вы можете использовать:[-1,1]

Икс"знак равно2Икс-минИксМаксимумИкс-минИкс-1

В общем, вы всегда можете получить новую переменную в : [ а , б ]Икс'' '[a,б]

Икс'' 'знак равно(б-a)Икс-минИксМаксимумИкс-минИкс+a
Симона
источник
15
Честно говоря, у меня нет ссылок на это. Это просто линейное преобразование случайной величины. Посмотрите на влияние линейных преобразований на поддержку случайной величины.
Симона
-1

Я проверил на случайно сгенерированных данных, и

Xout=(ba)XinminXinmaxXinminXin+a

не сохраняет форму распределения. Очень хотелось бы увидеть правильное вывод этого с использованием функций случайных величин.

Подход, который сохранил форму для меня, использовал:

Xout=Xinμinσinσout+μout

где

σout=ba6

(Я признаю, что использование 6 немного грязно ) и

μout=b+a2

а также

a и - желаемый диапазон; так что в соответствии с первоначальным вопросом будет и .ba=1b=1

Я пришел к результату из этого рассуждения

Zout=Zin

Xoutμoutσout=XinμinσiN

А.Л. Верминбургер
источник
3
Вы уверены, что это гарантирует, что преобразованные данные будут лежать в границах? В R, попробуйте: set.seed(1); scale(rnorm(1000))*.333. Я получаю максимум 1.230871. Ваш метод, кажется, просто настраивает данные, а не нормализует их по запросу. Обратите внимание, что вопрос не требует метода, который сохраняет форму распределения (что было бы странным требованием для нормализации).
gung - Восстановить Монику
3
Я не уверен, как оригинальное преобразование могло не сохранить форму данных. Это эквивалентно вычитанию константы, а затем делению на константу, что и делает ваше предложение, и которое не меняет форму данных. В вашем предложении предполагается, что все данные находятся в пределах трех стандартных отклонений от среднего значения, что может быть несколько разумно для небольших, приблизительно нормально распределенных выборок, но не для больших или ненормальных выборок.
Ноя
1
aб
2
@whuber true, но я имел в виду, что в данном наборе данных (т.е. при обработке данных как фиксированных) они являются константами, так же как среднее значение выборки и функция стандартного отклонения выборки в качестве констант при стандартизации набора данных. У меня сложилось впечатление, что OP хотел нормализовать набор данных, а не распределение.
Ноя
@ Нет, у меня сложилось такое же впечатление, но я полагаю, что настоящий пост может отвечать на другую интерпретацию.
whuber