Как сделать нормировку значений

Обновлено: 03.07.2024

Здравствуйте. Не силен в екселе, но поставленную задачу надо решить, поэтому пришел к вам за помощью.
Итак нужно провести нормировку двух рядов. Первый ряд от 0 до +1, а второй ряд от 0 до -1. На форуме нашел похожую тему и оттуда взял пример. С нормировкой 0+1 все получилось, а вот с 0-1 не совсем то, что мне нужно. Поменял в формуле на знак "-" (спасибо подсказавшему) нормирует, но не совсем так как нужно. У меня задача состоит в том, что для нормировки 0-1 надо, что бы пиковые положительные значения со второго ряда стремились к 0, а пиковые отрицательные числа стремились к -1.
Буду признателен за вашу помощь.

Здравствуйте. Не силен в екселе, но поставленную задачу надо решить, поэтому пришел к вам за помощью.
Итак нужно провести нормировку двух рядов. Первый ряд от 0 до +1, а второй ряд от 0 до -1. На форуме нашел похожую тему и оттуда взял пример. С нормировкой 0+1 все получилось, а вот с 0-1 не совсем то, что мне нужно. Поменял в формуле на знак "-" (спасибо подсказавшему) нормирует, но не совсем так как нужно. У меня задача состоит в том, что для нормировки 0-1 надо, что бы пиковые положительные значения со второго ряда стремились к 0, а пиковые отрицательные числа стремились к -1.
Буду признателен за вашу помощь. Black-Cat

Однако - не далее как сегодня БЫЛО и в этой теме, имхо, вы могли бы кое-что почерпнуть и сделать для себя. И в поиске для себя определить особенности обозначения и сортировки отрицательных чисел.
ps Да, видимо, еще следует закрепить "баксами" диапазоны.

Однако - не далее как сегодня БЫЛО и в этой теме, имхо, вы могли бы кое-что почерпнуть и сделать для себя. И в поиске для себя определить особенности обозначения и сортировки отрицательных чисел.
ps Да, видимо, еще следует закрепить "баксами" диапазоны. TimSha

"Ctrl+S" - достойное завершение ваших гениальных мыслей. ;)

Да,было. Но по замечанию модератора создал новую тему. Из той ветки и брал пример для нормировки 0+1. А вот 0-1 не получилось.

Да,было. Но по замечанию модератора создал новую тему. Из той ветки и брал пример для нормировки 0+1. А вот 0-1 не получилось. Black-Cat

Сегодня мы хотим поговорить о том, что такое нормализация данных в Python. Пожалуй, начать стоит с определения. Нормализация данных – это метод, который ускоряет получение желаемого результата за счет того, что машине приходится обрабатывать меньший диапазон данных.

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

Нормализация также зависит от типа данных, т.е. от того, имеете ли вы дело с изображением, текстом, числами и т. д. Каждый тип данных имеет свои методы нормализации. В этой статье мы сосредоточимся на числовых данных.

Метод 1. Использование sklearn

Метод sklearn – очень популярный метод нормализации данных.


В ячейке номер [83] мы импортируем все необходимые для работы библиотеки: NumPy и sklearn . Вы также можете заметить, что мы импортируем preprocessing из самого sklearn . Именно поэтому данный метод называется методом нормализации sklearn.

Далее, в ячейке номер [84] мы создаем массив NumPy с уникальными целочисленными значениями.

В ячейке номер [85] вызываем метод normalize() из preprocessing и передаем numpy_array , который мы только что создали на предыдущем шаге, в качестве параметра.

Как видно из результатов, в ячейке номер [86] все наши целочисленные данные теперь нормализованы между нулем и единицей.

Метод 2. Нормализация определенного столбца в наборе данных с помощью sklearn

Мы также можем нормализовать конкретный столбец нашего набора данных. Давайте разберем такой случай.


В ячейке номер [87] мы импортируем библиотеки pandas и sklearn.

В ячейке номер [88] создаем CSV-файл с поддельными данными и загружаем его с помощью модуля pandas (функция read_csv() ).

Далее, в ячейке номер [89] мы выводим на экран только что загруженный CSV-файл.

В следующей ячейке мы считываем конкретный столбец CSV-файла, используя np.array() , и сохраняем результат в переменную value_array .

В ячейке номер [92] мы вызываем метод normalize() из preprocessing , в который передаем value_array в качестве параметра.

Метод 3. Нормализация всего набора данных по столбцам или по строкам

В предыдущем методе мы обсудили, как можно нормализовать конкретный столбец файла CSV. Но иногда нам нужно нормализовать весь набор данных. В таком случае мы можем использовать метод, показанный ниже. В нем мы нормализуем весь набор данных, но по столбцам ( axis = 0 ). Если в параметрах функции normalize() указать axis = 1 , она будет нормализовать данные по строкам. По умолчанию значение axis равно 1.

Итак, первые три шага абсолютно идентичны тому, что мы делали в предыдущем разделе.

В ячейке номер [96] мы передаем весь CSV-файл (demo_numeric.csv) вместе с еще одним дополнительным параметром axis = 0, который сообщает библиотеке, что мы хотим нормализовать весь набор данных по столбцам.

И далее, в ячейке [97] мы выводим результат нормализованных данных со значениями от нуля до единицы.

Метод 4. Использование MinMaxScaler()

Sklearn предоставляет и другой метод нормализации — MinMaxScalar . Благодаря простоте использования этот метод тоже пользуется большой популярностью.


Для начала импортируем все необходимые пакеты. Затем создаем CSV-файл с фиктивными данными (demo_numeric.csv) и загружаем его с помощью пакета pandas (функция read_csv() ). После выводим этот файл на экран. В общем, всё, как и в предыдущих методах.

А вот дальше, в ячейке номер [101], мы вызываем MinMaxScalar() из preprocessing и создаем объект min_max_Scalar . Мы не передали никаких параметров, потому что нам нужно нормализовать данные между 0 и 1. Но при желании вы можете добавить свои значения (мы это рассмотрим в следующем разделе).

В ячейке номер [102] мы сначала читаем все имена столбцов для дальнейшего использования для отображения результатов. Затем мы вызываем fit_tranform() из созданного объекта min_max_Scalar и передаем туда CSV-файл.

После этого, в ячейке номер [103], мы получаем нормализованные результаты, находящиеся между 0 и 1.

Метод 5. Использование MinMaxScaler с разными параметрами

Sklearn также предоставляет возможность изменить нормализованные значения. По умолчанию функция нормализует значения в диапазоне от нуля до единицы. Однако есть параметр (называется feature_range ), с помощью которого можно устанавливать границы нормализованных значений в соответствии с нашими требованиями.


Первые три шага идентичны тому, что мы делали в прошлых примерах.

Дальше, в ячейке номер [107], мы вызываем MinMaxScalar из preprocessing и создаем объект min_max_Scalar . Но в этот раз внутри MinMaxScaler мы передаем дополнительный параметр — feature_range. Значение параметра мы устанавливаем от 0 до 2. Таким образом, теперь MinMaxScaler нормализует значения данных от нуля до двух.

В ячейке [108] мы сначала читаем все имена столбцов, а затем вызываем fit_tranform() из созданного ранее объекта min_max_Scalar и передаем туда CSV-файл в качестве параметра.

И последним действием, в ячейке номер [109], мы получаем нормализованные результаты, которые находятся между 0 и 2.

Метод 6. Использование максимального абсолютного масштабирования

Также можно нормализовать данные с помощью библиотеки pandas. Этот способ тоже весьма популярен. Максимальное абсолютное масштабирование нормализует значения в диапазоне от нуля до единицы. В нашем примере мы применяем .max() и .abs() :


Сначала мы импортируем нужную нам библиотеку pandas.

Затем (в ячейке номер [111]) мы создаем фрейм фиктивных данных и выводим его на экран.

В ячейке [113] мы вызываем каждый столбец, а затем разделяем значения столбца с помощью .max() и .abs() .

В ячейке номер [114] мы выводим получившийся результат, который подтверждает, что наши данные действительно нормализованы между 0 и 1.

Метод 7. Использование метода z-оценки

Следующий метод, который мы хотим обсудить, — это метод z-оценки. Он преобразует информацию в распределение. Метод z-оценки вычисляет среднее значение каждого столбца, затем вычитает его из каждого столбца и, наконец, делит на стандартное отклонение. Таким образом мы получаем данные, нормализованные между -1 и 1.


В ячейке номер [115] мы создаем фрейм фиктивных данных и выводим его.

Далее, в ячейке [117], мы вычисляем среднее значение столбцов и вычитаем его из каждого столбца. Затем делим значение столбца на стандартное отклонение.

В итоге, в ячейке номер [118] мы получаем и выводим на экран данные, нормализованные в диапазоне от -1 до 1.

Заключение

Сегодня мы обсудили, что такое нормализация данных в Python, и разобрали разные виды методов нормализации. Среди них sklearn, который очень известен благодаря широкому использованию в машинном обучении.

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

Нельзя сказать, что существуют только данные методы нормализации. Нет, различных методов нормализации довольно много, причем они зависят от типа данных. В этой статье мы сфокусировались на числовых данных.

Я потерян в нормировании, может кто-нибудь направит меня, пожалуйста.

У меня есть минимальное и максимальное значения, скажем, -23,89 и 7,54990767 соответственно.

Если я получу значение 5,6878, как я могу масштабировать это значение по шкале от 0 до 1.

Это может помочь вам прочитать эту ветку: как проверить правильность распределения . Если это отвечает на ваш вопрос, вы можете удалить этот вопрос; если нет, отредактируйте свой Q, чтобы указать то, что вы все еще не понимаете.

Объяснение защиты: Этот вопрос привлекает дополнительные ответы, содержащие только решения кода. Хотя они могут быть интересными или полезными для некоторых читателей, целью CV не является предоставление репозиториев программных решений.

В представленных решениях учитывается значение линейного контраста. Хотите ли вы другую нормализацию, например, такую, которая бы обеспечивала равномерную вероятность для результата?

Если вы хотите нормализовать ваши данные, вы можете сделать это так, как вы предлагаете, и просто рассчитать следующее:

где x = ( x 1 , . . . , x n ) ' role="presentation"> Икс знак равно ( Икс 1 , , , , , Икс N ) и z i ' role="presentation"> Z я теперь ваш i t h ' role="presentation"> я T час нормализованный данные. В качестве подтверждения концепции (хотя вы не просили об этом) приведем R код и сопровождающий график, чтобы проиллюстрировать этот момент:

введите описание изображения здесь

Мне только интересно, как две совершенно разные гистограммы отражают illustrate the point ваш (правильный) ответ?

@ttnphns Они выглядят по-разному только из-за разбивки гистограмм. Моя цель, однако, заключалась в том, чтобы показать, что исходные значения жили в диапазоне от -100 до 100, а теперь после нормализации они живут в диапазоне от 0 до 1. Я мог бы использовать другой график, чтобы показать это, я полагаю, или просто сводную статистику.

Мягкий толчок @ttnphns был призван побудить вас не только использовать менее сложные способы иллюстрации (простой) идеи, но также (я подозреваю) в качестве намека на то, что более релевантная иллюстрация может быть полезной здесь. Вы могли бы сделать и то и другое, найдя более простой способ

@JohnDemetriou Может быть не самое чистое решение, но вы можете масштабировать нормализованные значения, чтобы сделать это. Если вы хотите, например, диапазон 0-100, вы просто умножаете каждое число на 100. Если вы хотите, чтобы диапазон не начинался с 0, например, 10-100, вы бы сделали это путем масштабирования до MAX-MIN, а затем до значения, которые вы получаете от этого просто добавив МИН. Поэтому масштабируйте до 90, а затем добавьте 10. Этого должно быть достаточно для большинства пользовательских диапазонов, которые вы можете захотеть.

Общая однострочная формула для линейного масштабирования значений данных с учетом min и max в новый произвольный диапазон min ' to max' имеет вид

Это правильно, но не эффективно. Это линейное преобразование, поэтому вы должны предварительно рассчитать a и b константы, а затем просто применить newvalue = a * value + b . a = (max'-min')/(max-min) и b = max - a * max

Вот моя реализация PHP для нормализации:

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

Денормализация использует следующую формулу:

Я не думаю, что это единственная разница. В своем коде я также показал, как вернуть нормализованное значение к значению, которое было до нормализации. Я думаю, это стоит того, чтобы ответить.

Есть некоторые проблемы, когда вам нужно восстановить значение: Nueral Networks, например . Но вы правы, в смысле анализа данных, этот ответ очень плохой.


Экспоненциальная нормировка. Данные в таблице. как применить формулу к каждому значению во втором столбце f(x)=1-exp(1- x/xmin). Что здесь брать за x и что такое exp?

xmin -- минимум равен 5.
Применяешь формулу для 12, 15 и т. д последовательно:
для 12: 1-exp(1- x/xmin) = 1-exp(1- 12/5)
для 15: 1-exp(1- x/xmin) = 1-exp(1- 15/5)
и т. д.

Читайте также: