Подготовка (pre-processing) данных
HTML-код
- Опубликовано: 21 авг 2024
- Запишетесь на полный курс Машинного обучения на Python по адресу support@ittensive.com
После сбора всех данных и выявления всех ограничений и взаимосвязей финальный набор данных нужно подготовить к обработке моделью машинного обучения.
Нормирование и стандартизация
Большинство моделей лучше работают с значениями параметров, если они находятся в одном диапазоне - например, от 0 до 1. Поэтому сильно разнородные значения параметров принято приводить к одному диапазону: это повышает точность работы модели (почему так происходит, разберем в следующих уроках).
Для приведения значений независимых параметров к одному диапазону есть несколько вариантов. Первый - вычесть минимальное значение параметра из всех его значений и разделить на разницу между максимальным и минимальным. Тогда все значения этого параметра будут строго от 0 до 1 (за счет множителей можно добиться и значений от -3 до 3). Константы такого преобразования будут различаться от параметра к параметру.
Второй вариант - стандартизация (z-нормализация), приведение значений к нормальному распределению. Для этого из всех значений вычитают среднее и делят на корень из дисперсии. Значения параметра будут находиться примерно от -3 до 3. Этот вариант предпочтительнее, если значения параметра распределены нормально.
Категории и единичные векторы
Нормирование данных отлично работает для числовых (номинативных) и даже ранговых параметров. Но для категориальных признаков (например, пол респондента) не работает. Для корректной работы с категориальными данными их преобразуют в единичные векторы. Например, записи
id Пол
1 Мужской
2 Мужской
3 Женский
4 Женский
Становятся
id Пол_Мужской Пол_Женский
1 1 0
2 1 0
3 0 1
4 0 1
И затем эти значения можно преобразовать обычным образом.
Циклические значения
В ряде случаев вводят дополнительные параметры, синус и косинус от значения параметра, если параметр предполагает цикличность. Например, это может быть направление ветра (в градусах после 360 идет 0), день (от 1 до 365), неделя (от 1 до 53) и месяц (от 1 до 12) года - все эти значения идут по кругу.
Тригонометрические значения будут находиться в диапазоне от -1 до 1, поэтому дополнительно их можно разделить на 2 и прибавить 0,5, чтобы получить нормированные значения.
1:00
1:40
2:05 3 основных аспекта подготовки данных
2:09 1. Нормирование данных
3:14 4:09 при наличии отрицательных чисел диапазон получается [-1; 1] и почему не использовали более простую формулу нормирования - x/max (тоже ведь все значения будут в пределах данного диапазона)?
4:37 z-нормализация
5:24 зачем нужно
6:23 2. Категориальные данные
6:30 Приведение к единичным векторам
8:28
8:42 3. Циклические параметры
9:27 Тригонометрические функции
11:38
12:35
Благодарю Вас за структурность
Отличный ликбез! Спасибо!
огромное спасибо!!!!
Лайк!
Так то интересно, спасибо, но музычка заставляет заснуть
Подскажите пожалуйста, есть ли смысл в алгоритмах деревьев решений (например xgboost/catboost) представлять временные фичи в циклическом виде?
Время(например час) мы можем представить 2мя колонками cos/sin одновременно!. По сплит рулу деревьев у нас идёт разбиение лишь по одной колонке, а нам нужно, что бы модель учитывала одновременно 2 колонки, иначе выходит для 1-й sin или cos может быть а течении 24 часов несколько одинаковых точек
Благодарю за ответ
если модель строится только по одному из парных атрибутов, то, наверное, важность второго минимальна. Технически, можно сделать какой-нибудь sinx / cosx, чтобы был учет обоих атрибутов, но это будет уже не циклично
@@ittensive Благодарю за ответ
Скажите пожалуйста, согласно центральной предельной теоремы мы можешь преставить любые данные (не автокррелированные) в виде нормально распределения. Выходит мы можем к любому (не автокоррелированному) набору данных применить z-нормализацию? Просто Вы сказали, что применить ее можно только к нормально распределенной выборке
Отличный комментарий. В реальности, все выборки - это некоторое приближение к исходному распределению генеральной совокупности. А большинство распределений являются нормальными. Т.е. z-нормализацию можно применять к любому набору данных, другой вопрос - какой от этого будет результат, если, например, у нас бинарные данные (есть/нет признак).