Что такое нормализация вправо
Нормализованная запись вещественных чисел
Для 10-тичной системы: 0.110 4
Как производится преобразование вещественного числа к нормализованной форме:
Нормализация влево: пошаговое деление числа на p и одновременное возрастание показателя степени.
Нормализация вправо: пошаговое умножение числа на p и одновременное уменьшение показателя степени.
Блок-схема нормализаций влево или вправо
Представление в ЭВМ вещественных чисел в нормализованной форме:
(знак числа, мантисса, знак порядка, порядок) на примере языка Pascal
Представление вещественных чисел в ЭВМ определяется особенностями конструкции ЭВМ и программного обеспечения.
Нпример, для 32 разрядного (4 байтового) числа возможен следующий способ представления:
В ходе вычислений постоянно производится нормализация промежуточных и конечных значений: сдвиг мантиссы вправо и влево с одновременным изменением порядка. При сдвигах могут теряться значащие цифры мантиссы, то есть возрастать вычислительная погрешность.
О переполнении при операциях с вещественными переменными:
Мантисса не может переполниться: произойдет нормализация.
Порядок может переполниться.
Например, для схемы представления вещественного числа, приведенной выше имеем:
Точность обработки вещественных чисел зависит ль формы их представления:
Тип переменной | Точность – количество значащих цифр в мантиссе |
single | |
real | |
double | |
extended |
Повышение точности вычислений требует больших ресурсов компьютера, увеличивает время вычислений.
Один из аспектов оптимизации алгоритмов и программ их реализации: компромисс между точностью вычислений и затратами ресурсов ЭВМ (времени).
Чем больше разрядов отводится под запись мантиссы, тем выше точность представления чисел.
Чем больше разрядов занимает порядок, тем шире диапазон чисел от машинного нуля до наибольшего числа.
Вещественный формат с m— разрядной мантиссой дает возможность абсолютно точно представить m— разрядное целое число, то есть любое двоичное целое число, состоящее не более, чем из m разрядов, может быть без искажений представлено в вещественном формате (узлы сетки).
Иллюстрирующий пример-эксперимент №1.
Рассмотрим выражение: R=N* 1/N ─ 1.
1.В математике R=0 для любого N.
2. При программировании. Посмотрим, что будет, если запрограммировать это выражение:
Что такое нормализация вправо
Часть 4 Вопросы 10-12
Нормализованная форма числа
В этой записи M10 называется мантиссой нормализованного числа; значения мантиссы лежат в интервале 0,1 Мантисса располагается в промежутке 0,12
1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif» /> (будем называть ее «нормализация влево» ), то N
1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif» /> [(123,45)10] = 0,1234510·10 3 ; N
1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif» /> [(23,4·10 5 )10] = 0,23410·10 7 ; N
Пример: Выполнить преобразование X10=16,510
Пример: Выполнить преобразование: X2 = (0,11·2 110 )2
Источник
Нужна ли нормализация в числах с плавающей точкой?
В прошлом топике (1 ) мы говорили о числах с плавающей точкой/запятой, нормализованных в соответствии со стандартом IEEE754. Там же были рассмотрены денормализованные числа, искусственное введение которых в стандарте привело к чудовищным программно-аппаратным затратам, тормозящим процессы компьютерной обработки чисел в десятки и сотни раз. Но, так уж ли нужна эта самая нормализация и тем более оправдано ли введение экзотического класса денормализованных чисел в компьютерную арифметику? Попробуем разобраться с этим вопросом.
Напомним, что в предыдущей статье, для простоты изложения, нами были введены следующие понятия. Область машинной мантиссы (ОММ) — это область машинного слова, в которую записывается мантисса числа. Область машинного порядка (ОМП) — это область машинного слова, в которую записывается порядок характеристики числа. Далее, в тексте, мы будем использовать эти понятия.
Итак, как известно, любое число, записанное в естественном виде, может быть представлено в эквивалентном ему экспоненциальном виде:
где М представляет собой число, записанное в естественном виде, со смещенной точкой на h позиций в ту или иную сторону. Число М в такой записи принято называть мантиссой числа, а q^(±h) характеристикой числа с порядком ±h. Знак и величина порядка h компенсируют величину смещения точки относительно ее первоначального положения в числе, представленном в естественном виде
Когда мы ставим перед собой задачу записать некоторое число в машинное слово, мы, прежде всего, заботимся о том, чтобы в машинном слове было записано число с минимальной потерей точности. Этому условию удовлетворяет такая запись числа, при которой в ОММ записывается максимум значащих цифр мантиссы числа и, при этом, в ОМП не происходит переполнения.
Предположим, что мы имеем некоторое двоичное число, записанное в экспоненциальном виде с мантиссой, имеющей N разрядов и порядком характеристики, равным h. Рассмотрим случай, когда N≥К., т.е., если число значащих цифр мантиссы записываемого числа превышает или равно количеству разрядов ОММ.
Например, пусть нам необходимо записать в машинное слово, в котором В =3, К=4 двоичное число, представленное в естественной форме как 11.011. В этом числе количество значащих цифр превышает количество разрядов ОММ. В экспоненциальном виде это число может иметь различные варианты записи, такие как: 11011•2^(-3); 11.011•2^0; 0.0011011•2^4; и проч.
Для того, чтобы число 11011.•2^(-3) записать в машинное слово с дробной мантиссой, необходимо точку в мантиссе числа смещать влево до тех пор пока в старшем разряде ОММ ни появится единица. На количество смещений точки необходимо откорректировать порядок характеристики мантиссы в ОМП. В нашем случае точку необходимо сместить на 5 разрядов влево. В ОМП тогда будет записано число 5-3=2. А в машинном слове, таким образом, будет записано число 0.1101•2^2. Младшая единица не вместилась в разрядную сетку ОММ и была потеряна. Аналогично будем иметь для числа 11.011•2^0. Чтобы его записать в наше машинное слово необходимо сместить точку на два разряда влево и соответственно увеличить порядок тоже на 2. В результате в машинном слове будет записано число 0.1101•2^2. Чтобы записать в машинное слово число 0.0011011•2^4, точку в нем необходимо сдвинуть на два разряда вправо, а порядок уменьшить также на 2. В результате, мы опять получаем записанное в машинном слове число 0.1101•2^2.
Во всех рассмотренных случаях, не зависимо от вида первоначальной записи числа, мы получили однозначное представление числа в машинном слове и поэтому необходимости в нормализации таких чисел не возникала.
Кодирование вещественных чисел. Нормализованное представление числа
В компьютерной технике вещественными называются числа, имеющие дробную часть.
Нормализованная форма числа является наиболее удобной для представления дробных чисел в компьютере.
Понятно, что нормализированное представление используется не только для десятичной системы счисления. Вот примеры нормализованных записей дробных чисел в двоичной системе счисления:
Здесь степени 11 и 10 – это двоичная форма десятичных чисел 3 и 2.
Нормализованная форма представления числа – это одна из форм множества вариантов экспоненциальной формы записи числа.
Пусть слово состоит из 2 байт, два слова – это 4 байта или 32 бита.
Нормализированное число одинарной точности, представленное в формате с плавающей точкой, записывается в память следующим образом: знак числа – в бите 15 первого слова (0 – для положительных и 1 – для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах (с 0 по 6 бит первого слова и все биты второго слова). Нормализированное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым словом трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит.
Следует иметь в виду, что, хотя для мантиссы отведено 23 разряда для чисел одинарной точности и 55 разрядов – для чисел двойной точности, в операциях участвует 24 и 56 разрядов соответственно, т.к. старший разряд мантиссы нормализированного числа не хранится, т.е. имеет место так называемый скрытый разряд. Однако при аппаратном выполнении операций этот разряд автоматически восстанавливается и учитывается. Порядок числа также учитывает скрытый старший разряд мантиссы.
Пример представления числа в формате с плавающей точкой:
Если мантисса представлена бесконечной периодической дробью, то последний учитываемый разряд мантиссы округляется.
При выполнении арифметических операций над числами, представленными в формате с плавающей точкой, надо отдельно выполнять их для порядков и мантисс. При алгебраическом сложении чисел надо сначала уравнять порядки слагаемых. При умножении порядки надо складывать, а мантиссы — перемножать. При делении из порядка делимого вычитают порядок делителя, а над мантиссами совершают обычную операцию деления. После выполнения операций, если это необходимо, проводят нормализацию результата, что влечет изменение порядков, т.к. каждый сдвиг на один разряд влево соответствует уменьшению порядка на единицу, а сдвиг вправо увеличению на единицу. Введение термина «плавающая точка» как раз и объясняется тем, что двоичный порядок, определяющий фактическое положение точки в изображении числа, корректируется после выполнения каждой арифметической операции, т.е. точка в изображении числа «плавает» (изменяется ее положение) по мере изменения данной величины. А в изображении чисел, представленных в формате с фиксированной точкой, она жестко зафиксирована в определенном месте.
Арифметические операции с числами, представленными в формате с плавающей точкой, намного сложнее таких же операций для чисел, представленных в формате с фиксированной точкой. Но зато плавающая точка позволяет производить операции масштабирования автоматически в самой машине и избавляет от накопления абсолютной погрешности при вычислениях (хотя не избавляет от накопления относительной погрешности).
Умная нормализация данных
Эта статья появилась по нескольким причинам.
Во-первых, в подавляющем большинстве книг, интернет-ресурсов и уроков по Data Science нюансы, изъяны разных типов нормализации данных и их причины либо не рассматриваются вообще, либо упоминаются лишь мельком и без раскрытия сути.
Во-вторых, имеет место «слепое» использование, например, стандартизации для наборов с большим количеством признаков — “чтобы для всех одинаково”. Особенно у новичков (сам был таким же). На первый взгляд ничего страшного. Но при детальном рассмотрении может выясниться, что какие-то признаки были неосознанно поставлены в привилегированное положение и стали влиять на результат значительно сильнее, чем должны.
И, в-третьих, мне всегда хотелось получить универсальный метод учитывающий проблемные места.
Повторение — мать учения
Нормализация — это преобразование данных к неким безразмерным единицам. Иногда — в рамках заданного диапазона, например, [0..1] или [-1..1]. Иногда — с какими-то заданным свойством, как, например, стандартным отклонением равным 1.
Ключевая цель нормализации — приведение различных данных в самых разных единицах измерения и диапазонах значений к единому виду, который позволит сравнивать их между собой или использовать для расчёта схожести объектов. На практике это необходимо, например, для кластеризации и в некоторых алгоритмах машинного обучения.
Аналитически любая нормализация сводится к формуле
где — текущее значение,
— величина смещения значений,
— величина интервала, который будет преобразован к “единице”
По сути всё сводится к тому, что исходный набор значений сперва смещается, а потом масштабируется.
Минимакс (MinMax). Цель — преобразовать исходный набор в диапазон [0..1]. Для него: =
, минимальное значение исходных данных.
=
—
, т.е. за “единичный” интервал берется исходный диапазон значений.
Стандартизация. Цель — преобразовать исходный набор в новый со средним значением равным 0 и стандартным отклонением равным 1. =
, среднее значение исходных данных.
— равен стандартному отклонению исходного набора.
Для других методов всё аналогично, но со своими особенностями.
В большинстве методов кластеризации или, например, классификации методом ближайших соседей необходимо рассчитывать меру “близости” между различными объектами. Чаще всего в этой роли выступают различные вариации евклидового расстояния.
Представим, что у Вас есть какой-то набор данных с несколькими признаками. Признаки отличаются и по типу распределения, и по диапазону. Чтобы можно было с ними работать, сравнивать, их нужно нормализовать. Причём так, чтобы ни у какого из них не было преимуществ перед другими. По крайней мере, по умолчанию — любые такие предпочтения Вы должны задавать сами и осознанно. Не должно быть ситуации, когда алгоритм втайне от Вас сделал, например, цвет глаз менее важным, чем размер ушей*
* нужно сделать небольшое примечание — здесь речь идёт не о важности признака для, например, результата классификации (это определяется на основе самих данных при обучении модели), а о том, чтобы до начала обучения все признаки были равны по своему возможному влиянию.
Итого, главное условие правильной нормализации — все признаки должны быть равны в возможностях своего влияния.
Шаг 1 — определяем смещение
Чаще всего данные центрируют — т.е. определяют, значение, которое станет новым 0 и “сдвигают” данные относительно него.
Что лучше взять за центр? Некоего «типичного представителя» Ваших данных. Так при использовании стандартизации используется среднее арифметическое значение.
Здесь проявляется проблема № 1 — различные типы распределений не позволяют применять к ним методы, созданные для нормального распределения.
Если Вы спросите любого специалиста по статистике, какое значение лучше всего показывает “типичного представителя” совокупности, то он скажет, что это — медиана, а не среднее арифметическое. Последнее хорошо работает только в случае нормального распределения и совпадает с медианой (алгоритм стандартизации вообще оптимален именно для нормального распределения). А у Вас распределения разных признаков могут (и скорее всего будут) кардинально разные.
Вот, например, различия между медианой и средним арифметическим значением для экспоненциального распределения.
А вот так выглядят эти различия при добавлении выброса:
В отличии от среднего значения медиана практически не чувствительна к выбросам и асимметрии распределения. Поэтому её оптимально использовать как “нулевое” значение при центрировании.
В случае, когда нужно не центрировать, а вписать в заданный диапазон, смещением является минимальное значение данных. К этому вернёмся чуть позже.
Шаг 2 — масштабируем
Мы определили нужные величины смещения для всех признаков. Теперь нужно сделать признаки сравнимыми между собой.
Степень возможного влияния признаков определяется величиной их диапазонов после масштабирования. Если оба признака распределены в одинаковых интервалах, например, [-1..1], то и влиять они могут одинаково. Если же изначально один из признаков лежит в диапазоне [-1..1], а второй — в [-1..100], то очевидно, что изменения второго могут оказывать существенно большее влияние. А значит он будет в привилегированном положении по сравнению с первым.
Стандартное отклонение
Вернёмся к примеру стандартизации. В её случае новый диапазон определяется величиной стандартного отклонения. Чем оно меньше, тем диапазон станет “шире”.
Посмотрим на гипотетические распределения различных признаков с одинаковыми начальными диапазонами (так будет нагляднее):
Для второго признака (бимодальное распределение) стандартное отклонение будет больше, чем у первого.
А это значит, что у второго признака новый диапазон после масштабирования (стандартизации) будет “уже”, и его влияние будет меньше по сравнению с первым.
Итог — стандартное отклонение не удовлетворяет начальным требованиям по одинаковому влиянию признаков (величине интервала). Даже не говоря о том, что и наличие выбросов может исказить “истинную” величину стандартного отклонения.
Межквартильный интервал
Другим часто используемым кандидатом является разница между 75-м и 25-м процентилями данных — межквартильный интервал. Т.е. интервал, в котором находятся “центральные” 50% данных набора. Эта величина уже устойчива к выбросам и не зависит от “нормальности” распределения наличия/отсутствия асимметрии.
Но и у неё есть свой серьезный недостаток — если у распределения признака есть значимый “хвост”, то после нормализации с использованием межквартильного интервала он добавит “значимости” этому признаку в сравнении с остальными.
Проблема № 2 — большие “хвосты” распределений признаков.
Пример — два признака с нормальным и экспоненциальным распределениями. Интервалы значений одинаковы
После нормализации с использованием межквартильного интервала (для наглядности оба интервала смещены к минимальным значениям равным нулю).
В итоге интервал у признака с экспоненциальным распределением из-за большого “хвоста” стал больше. А, следовательно, и сам признак стал “влиятельнее”.
Размах значений
Очевидным решением проблемы межквартильного интервала выглядит просто взять размах значений признака. Т.е. разницу между максимальным и минимальным значениями. В этом случае все новые диапазоны будут одинаковыми — равными 1.
И здесь максимально проявляется, наверное, самая частая проблема в подготовке данных, проблема № 3 — выбросы. Присутствие одного или нескольких аномальных (существенно удалённых) значений за пределами диапазона основных элементов набора может ощутимо повлиять на его среднее арифметическое значение и фиктивно увеличить его размах.
Это, пожалуй, самый наглядный пример из всех. К уже использовавшемуся выше набору из 2-х признаков добавим немного выбросов для одного признака
После нормализации по размаху
Наличие выброса, который вдвое увеличил размах признака, привело к такому же уменьшению значимого интервала его значений после нормализации. Следовательно влияние этого признака уменьшилось.
Работаем с выбросами
Решением проблемы влияния выбросов при использовании размаха является его замена на интервал, в котором будут располагаться “не-выбросы”. И дальше — масштабировать по этому интервалу.
Искать и удалять выбросы вручную — неблагодарное дело, особенно когда количество признаков ощутимо велико. А иногда выбросы и вовсе нельзя удалять, поскольку это приведёт к потере информации об исследуемых объектах. Вдруг, это не ошибка в данных, а некое аномальное явление, которое нужно зафиксировать на будущее, а не отбрасывать без изучения? Такая ситуация может возникнуть при кластеризации.
Пожалуй, самым массово применяемым методом автоматического определения выбросов является межквартильный метод. Его суть заключается в том, что выбросами “назначаются” данные, которые более чем в 1,5 межквартильных диапазонах (IQR) ниже первого квартиля или выше третьего квартиля.*
* — в некоторых случаях (очень большие выборки и др.) вместо 1,5 используют значение 3 — для определения только экстремальных выбросов.
Схематично метод изображен на рисунке снизу.
Вроде бы все отлично — наконец-то есть инструмент, и можно приступать к работе.
Но и здесь есть своя ложка дёгтя. В случае наличия длинных хвостов (как, например, при экспоненциальном распределении) слишком много данных попадают в такие “выбросы” — иногда достигая значений более 7%. Избирательное использование других коэффициентов (3 * IQR) опять приводит к необходимости ручного вмешательства — не для каждого признака есть такая необходимость. Их потребуется по отдельности изучать и подбирать коэффициенты. Т.е. универсальный инструмент опять не получается.
Ещё одной существенной проблемой является то, что этот метод симметричный. Полученный “интервал доверия” (1,5 * IQR) одинаков как для малых, так и для больших значений признака. Если распределение не симметричное, то многие аномалии-выбросы с “короткой” стороны просто будут скрыты этим интервалом.
Скорректированный интервал
Красивое решение этих проблем предложили Миа Хаберт и Елена Вандервирен (Mia Hubert and Ellen Vandervieren) в 2007 г. в статье “An Adjusted Boxplot for Skewed Distributions”.
Их идея заключается в вычислении границ “интервал доверия” с учетом асимметрии распределения, но чтобы для симметричного случая он был равен всё тому же 1,5 * IQR.
Для определения некоего “коэффициента асимметрии” они использовали функцию medcouple (MC), которая определяется так:
Поиск подходящей формулы для определения границ “интервала доверия” производился с целью сделать долю, приходящуюся на выбросы, не превышающей такую же, как у нормального распределения и 1,5 * IQR — приблизительно 0,7%
В конечном итоге они получили такой результат:
Для = 0$» data-tex=»inline»/>:
Для :
Более подробно про этот метод и его эффективность лучше прочитать в самой статье. Найти ее по названию не составляет труда.
Универсальный инструмент
Теперь, объединяя все найденные плюсы и учитывая проблемы, мы получаем оптимальное решение:
Назовем его методом… скорректированного интервала — по названию статьи Mia Hubert и Ellen Vandervieren
Теперь сравним результаты обычных методов с новым. Для примера возьмем уже использовавшиеся выше три распределения с добавлением выбросов.
Сравнивать новый инструмент будем с методами стандартизации, робастной нормализации (межквартильный интервал) и минимакса (MinMax — с помощью размаха).
Ситуация № 1 — данные необходимо центрировать. Это используется в кластеризации и многих методах машинного обучения. Особенно, когда необходимо определять меру “близости” объектов.
Робастная нормализация (по межквартильному интервалу):
Преимущество использования метода скорректированного интервала в том, что каждый из признаков равен по своему возможному влиянию — величина интервала, за пределами которого находятся выбросы, одинакова у каждого из них.
Ситуация № 2 — данные необходимо вписать в заданный интервал. Обычно это [0..1]. Это используется, например, при подготовке данных для входов нейронной сети.
В этом случае метод скорректированного интервала вписал в нужный диапазон только значения без выбросов. Значения-выбросы, выходящие за границы этого диапазона, в зависимости от постановки задачи можно удалить или принудительно приравнять ближайшей границе нужного диапазона — т.е. 0 или 1.
То, что только “нормальные” данные попадают в единичный диапазон [0..1], а выбросы не удаляются, но пропорционально выносятся за его пределы — это крайне полезное свойство, которое сильно поможет при кластеризации объектов со смешанными признаками, как числовыми, так и категорийными. Подробно об этом я напишу в другой статье.
Напоследок, для возможности пощупать руками этот метод, Вы можете попробовать демонстрационный класс AdjustedScaler из моей библиотеки AdjDataTools.
Он не оптимизирован под работу с очень большим объемом данных и работает только с pandas DataFrame, но для пробы, экспериментов или даже заготовки под что-то более серьезное вполне подойдет. Пробуйте.