зачем нужно масштабировать признаки при подготовке набора данных к машинному обучению
Big Data. Machine Learning. Data Science.
Блог компании Даталитика. Интересное об искусственном интеллекте, машинном обучении, больших данных и ИТ-консалтинге
Подготовка данных для алгоритмов машинного обучения
Описание стека и некоторые вводные
Первый взгляд на датасет и понимание его специфики
Трудно работать с данными, не понимая, что они из себя представляют, поэтому давайте их загрузим и выведем некоторые статистики.
Это даст нам первое представление о том, что есть наши данные. Далее посмотрим на размеры наших табличных данных. Выполнив построчно код ниже
Также было бы неплохо увидеть информацию о количестве каждого уникального значения для каждого столбца в наборе данных:
Большинство столбцов выглядят хорошо, но есть несколько нуждающихся в очистке. Примеры некорректных значений данных ниже.
Разделение на обучающую выборку и целевую переменную
Обработка пропусков в данных
id | weather | temperature | humidity | play tennis? |
---|---|---|---|---|
1 | cloudy | 60 | NaN | yes |
2 | rainy | 75 | 80% | NaN |
3 | cloudy | NaN | 50% | no |
4 | sunny | 65 | 40% | yes |
Если бы мы удалили все строки с отсутствующими значениями, осталась бы только одна строка, и наш предиктор всегда бы предполагал, что я должен играть в теннис, так как других вариантов, по которым он будет учиться, про не будет. Предположим, мы вместо этого решили заменить нулевое значение температуры в строке 3 средним. В этом случае температура строки 3 искусственно сообщалась бы равной 65. И это уже позволит при каких-то входных параметрах получать от алгоритма отрицательный результат.
Scikit-learn предоставляет реализацию для обработки пропусков
Поиск неявных дубликатов
Если бы требовалось создать механизм предварительной обработки, который мог бы очищать входящие данные, требовалось бы воспользоваться более умным подходом. Но так как наша задача — это работа с уже имеющемся датасетом, то мы просто используем этот подход с заменой определенных типов.
Обнаружение выбросов
Как уже упоминалось ранее, оказалось, что для Age существуют значения, которые кажутся ошибочными. Такие как отрицательный возраст или чрезвычайно большие целые числа, могут негативно повлиять на результат работы алгоритма машинного обучения, и нам нужно будет их устранить.
Для этого возьмем нашу эвристическую оценку, в каком возрасте могут работать люди: от 14 до 100 лет. И все величины, не попадающие в этот диапазон, преобразуем в формат Not-a-Number.
Эти нулевые значения затем могут быть обработаны с использованием описанного выше sklearn Imputer.
После определения диапазона для работающего человека, визуализируем распределение возраста, присутствующего в этом наборе данных.
Кодирование данных
Многие алгоритмы машинного обучения ожидают числовые входные данные, поэтому нам нужно выяснить способ представления наших категориальных данных численным образом.
Одним из решений этого было бы произвольное присвоение числового значения для каждой категории и отображение набора данных из исходных категорий в каждое соответствующее число. Например, давайте посмотрим на столбец «leave» (как легко вам взять отпуск по болезни для состояния психического здоровья?) В нашем наборе данных
Который возвращает следующие значения
Для кодирования этих данных, сопоставим каждое значение с числом.
Этот процесс известен как Label Encoding и sklearn может сделать это за нас.
Проблема с этим подходом заключается в том, что вы вводите порядок, который может отсутствовать в исходных данных. В нашем случае можно утверждать, что данные являются ранжированными («Very difficult» меньше «Somewhat difficult», который меньше «Very easy», который меньше «Somewhat easy»), но в большинстве своем категориальные данные не имеют порядка. Например, если у вас есть признак обозначающий вид животного, зачастую высказывание кошка больше собаки не имеет смысла. Опасность кодирования меток заключается в том, что ваш алгоритм может научиться отдавать предпочтение собак, кошкам из-за искусственных порядковых значений, введенных вами во время кодирования.
Общим решением для кодирования номинальных данных является one-hot-encoding.
Вместо того, чтобы заменять категориальное значение на числовое значение (кодирование меток), как показано ниже
id | type | numerical |
---|---|---|
1 | cat | 1 |
2 | dog | 2 |
3 | snake | 3 |
4 | cat | 1 |
5 | dog | 2 |
6 | turtle | 4 |
7 | dog | 2 |
Вместо этого мы создаем столбец для каждого значения и используем 1 и 0 для обозначения выражения каждого значения. Эти новые столбцы часто называются фиктивными переменными.
id | type | is_cat | is_dog | is_snake | is_turtle |
---|---|---|---|---|---|
1 | cat | 1 | 0 | 0 | 0 |
2 | dog | 0 | 1 | 0 | 0 |
3 | snake | 0 | 0 | 1 | 0 |
4 | cat | 1 | 0 | 0 | 0 |
5 | dog | 0 | 1 | 0 | 0 |
6 | turle | 0 | 0 | 0 | 1 |
7 | dog | 0 | 1 | 0 | 0 |
Вы можете выполнить one-hot-encoding непосредственно в Pandas или использовать sklearn, хотя sklearn немного более прозрачен, поскольку one-hot-encoding из него работает только для целых значений. В нашем примере (где входные данные представляют собой строки) нам нужно сначала выполнить кодировку меток, а затем one-hot-encoding.
Нормализация тренировочных данных
На этом этапе мы успешно очистили наши данные и превратили их в форму, которая подходит для алгоритмов машинного обучения. Однако на данном этапе мы должны рассмотреть вопрос о том, полезен ли какой-либо метод нормализации данных для нашего алгоритма. Это зависит от данных и алгоритма, который мы планируем реализовать.
ML алгоритмы, которые требуют нормализации данных:
Примечание: приведенные выше списки ни в коем случае не являются исчерпывающими, а просто служат примером.
Предположим, у вас есть набор данных с различными единицами: температура в Кельвине, относительная влажность и день года. Мы можем увидеть следующие диапазоны для каждой функции.
Когда вы смотрите на эти значения, вы интуитивно нормализуете значения. Например, вы знаете, что увеличение на 0,5 (=50%) для влажности намного более значимо, чем увеличение на 0,5 для температуры. И если мы не будем нормализовать эти данные, наш алгоритм может научиться использовать температуру в качестве основного предиктора просто потому, что масштаб является наибольшим (и, следовательно, изменения в значениях температуры наиболее значительны для алгоритма). Нормализация данных позволяет всем признакам вносить одинаковый вклад (или, что более точно, позволяет добавлять признаки в зависимости от их важности, а не их масштаба).
Алгоритм нормализации
Если вы используете такой инструмент, как градиентный спуск, для оптимизации алгоритма, нормализация данных позволяет проводить последовательное обновление весов во всех измерениях.
Первое изображение представляет две функции с разными шкалами, в то время как последняя представляет собой нормализованное пространство признаков. Оптимизация градиентным спуском в первом случае может занять большее количество времени и в конечном итоге не прийти к минимуму.
Существует несколько различных методов нормализации данных, самые популярные из них:
Нормализация Min-max устанавливает наименьшее наблюдаемое значение равным 0, а наибольшее наблюдаемое значение — 1.
Для выполнения нормализации мы можем использовать функции в sklearn.
Несколько замечаний по этой реализации:
На практике вы можете выбрать только определенные столбцы. Например, вам не нужно нормализовать фиктивные переменные из one-hot-encoding.
Разделение данных для обучения и тестирования
Разделение данных на две подвыборки
Одной из последних вещей, которые нам нужно будет сделать, чтобы подготовить данные для обучения, является разделение данных на обучающую и тестовую выборку. Выделение тестовой выборки необходимо для понимания того, что мы обучили алгоритм в достаточной степени (не произошло переобучение или недообучение)
Отбор признаков в задачах машинного обучения. Часть 1
1. Методы фильтрации
Методы фильтрации применяются до обучения модели и, как правило, имеют низкую стоимость вычислений. К ним можно отнести визуальный анализ (например, удаление признака, у которого только одно значение, или большинство значений пропущено), оценку признаков с помощью какого-нибудь статистического критерия (дисперсии, корреляции, X 2 и др.) и экспертную оценку (удаление признаков, которые не подходят по смыслу, или признаков с некорректными значениями).
Простейшим способом оценки пригодности признаков является разведочный анализ данных (например, с библиотекой pandas-profiling). Эту задачу можно автоматизировать с помощью библиотеки feature-selector, которая отбирает признаки по следующим параметрам:
Количество пропущенных значений (удаляются признаки у которых процент пропущенных значений больше порогового).
Коэффициент корреляции (удаляются признаки, у которых коэффициент корреляции больше порогового).
Вариативность (удаляются признаки, состоящие из одного значения).
Оценка важности признаков с помощью lightgbm (удаляются признаки, имеющие низкую важность в модели lightgbm. Следует применять только если lightgbm имеет хорошую точность.)
Туториал по этой библиотеке находится здесь.
Более сложные методы автоматического отбора признаков реализованы в sklearn. VarianceThreshold отбирает признаки, у которых дисперсия меньше заданного значения. SelectKBest и SelectPercentile оценивают взаимосвязь предикторов с целевой переменной используя статистические тесты, позволяя отобрать соответственно заданное количество и долю наилучших по заданному критерию признаков. В качестве статистических тестов используются F-тест,
и взаимная информация.
F-тест
F-тест оценивает степень линейной зависимости между предикторами и целевой переменной, поэтому он лучше всего подойдёт для линейных моделей. Реализован в sklearn как f_regression и f_classif соответственно для регрессии и классификации.
Этот тест используется в задах классификации и оценивает зависимость между признаками и классами целевой пременной. Описание метода приведено здесьи здесь (для sklearn). Стоит отметить, что этот тип тестов требует неотрицательных и правильно отмасштабированных признаков.
Взаимная информация
2. Встроенные методы
Встроенные методы выполняют отбор признаков во время обучения модели, оптимизируя их набор для достижения лучшей точности. К этим методам можно отнести регуляризацию в линейных моделях (обычно L1) и расчёт важности признаков в алгоритмах с деревьями (который хорошо разобран здесь). Отметим, что для линейных моделей требуется масштабирование и нормализация данных.
Пример
fnlwgt (final weight) – примерная оценка количества людей, которое представляет каждая строка данных
educational-num – длительность обучения
capital-gain – прирост капитала
capital-loss – потеря капитала
hours-per-week – количество рабочих часов в неделю
Масштабирование данных для машинного обучения в Python с помощью Scikit-Learn
Дата публикации 2014-07-11
Ваши данные должны быть подготовлены, прежде чем вы сможете строить модели.подготовка данныхПроцесс может включать три этапа: выбор данных, предварительная обработка данных и преобразование данных.
В этом посте вы обнаружите два простых метода преобразования данных, которые вы можете применить к своим данным в Python, используяscikit учиться,
Изменение масштаба данных
Ваши предварительно обработанные данные могут содержать атрибуты со смесью весов для различных количеств, таких как доллары, килограммы и объем продаж.
Многие методы машинного обучения ожидают или более эффективны, если атрибуты данных имеют одинаковый масштаб. Два популярныхмасштабирование данныхметодынормализацияи стандартизация.
Нормализация данных
Нормализация относится к изменению масштаба числовых атрибутов в диапазоне от 0 до 1.
Полезно масштабировать входные атрибуты для модели, которая опирается на величину значений, таких как меры расстояния, используемые в k-ближайших соседях, и при подготовке коэффициентов в регрессии.
Пример ниже демонстрирует нормализацию данных набора цветов Iris.
Для получения дополнительной информации см.нормализовать функциюв документации API.
Стандартизация данных
Стандартизация относится к сдвигу распределения каждого атрибута, чтобы иметь среднее значение нуля и стандартное отклонение единицы (дисперсия единицы).
Полезно стандартизировать атрибуты для модели, которая опирается на распределение атрибутов, таких как гауссовские процессы.
Приведенный ниже пример демонстрирует стандартизацию данных набора цветов Iris.
Для получения дополнительной информации см.функция масштабированияв документации API.
Совет: какой метод использовать
Трудно понять, улучшит ли масштаб ваших данных производительность ваших алгоритмов, прежде чем применять их. Если часто можно, но не всегда.
Резюме
Изменение масштаба данных является важной частью подготовки данных перед применением алгоритмов машинного обучения.
В этом посте вы обнаружили, как масштабирование данных вписывается в процесс прикладного машинного обучения, и два метода: нормализация и стандартизация, которые вы можете использовать для изменения масштаба данных в Python с помощью библиотеки scikit-learn.
Русские Блоги
(1) Линейная регрессия и масштабирование признаков (масштабирование признаков)
Видео по машинному обучению Ву Энда
Линейность на самом деле представляет собой линейную комбинацию ряда основных характеристик. Это прямая линия в двухмерном пространстве и плоскость в трехмерном пространстве. Затем она расширяется до n-мерного пространства. Вы можете понять размерную обобщенную линейность.
Например, для прогнозирования цены дома сначала извлеките характеристики. Выбор характеристик повлияет на точность модели, такую как высота дома и площадь дома. Нет сомнений в том, что площадь является важным фактором, влияющим на цену жилья. Во-вторых, высота в основном не связана с ценой жилья.
На рисунке ниже выбраны четыре характеристики: площадь, количество, количество этажей и время завершения, а затем выбираются несколько наборов поездов
После получения этих данных выполняется обучение. Ниже представлена схематическая диаграмма обучения с учителем.
Train Set получает модель h в соответствии с алгоритмом обучения. Для новых данных x прогнозируемое значение y может быть получено непосредственно с помощью модели. В этом случае можно получить размер дома. Фактически, для поиска закона он по существу основан на исторических данных. Все всегда смещено в сторону Развитие в том направлении, которое происходило много раз в истории.
Конкретная форма градиентного спуска: Подробнее о градиентном спуске см.Подробное объяснение градиентного спуска
Локально взвешенная регрессия
Метод локальной взвешенной регрессии заключается в следующем: сначала посмотрите на функцию потерь линейной или полиномиальной регрессии «
Очевидно, что локальная взвешенная регрессия будет заново определять параметры каждый раз, когда прогнозируется новая выборка, для достижения лучших результатов прогнозирования. Когда масштаб данных относительно велик, объем вычислений велик, а эффективность обучения очень низкая. И не обязательно избегать локальной взвешенной регрессии.underfitting,Потому что эти колеблющиеся выборки могут быть выбросами или шумом данных.
При решении модели линейной регрессии необходимо обратить внимание на два вопроса.
как толькоКомбинация функцийНапример, длина и ширина дома используются как два элемента для участия в построении модели. Лучше умножить площадь, чтобы получить площадь, а затем решить ее как элемент. Таким образом, работа по уменьшению размеров выполняется при выборе элементов.
ВторойНормализация функций(Масштабирование функций), это также проблема, на которую необходимо обратить внимание многим моделям машинного обучения.
После того, как некоторые модели неравномерно масштабируются в каждом измерении, оптимальное решение не эквивалентно исходному, например SVM. Для такой модели, если диапазон распределения данных каждого измерения относительно близок, в противном случаеиметьСтандартизируйте, чтобы параметры модели не преобладали над данными с большим или меньшим диапазоном распределения.
После того, как некоторые модели выполняют неравномерное масштабирование в каждом измерении, оптимальное решение эквивалентно исходному, например логистическая регрессия. Для такой модели независимо от того, не меняет ли теория стандартизации оптимальное решение. Однако, поскольку фактическое решение часто использует итерационные алгоритмы, если форма целевой функции слишком «плоская», итерационный алгоритм может сходиться очень медленно или даже нет. Итак, для моделей с инвариантностью масштабируемостилучшееТакже выполняется стандартизация данных.
После нормализации есть два преимущества:
1. Увеличьте скорость сходимости модели.
2. Повысьте точность модели.
Еще одним преимуществом нормализации является повышение точности. Это эффективно, когда она включает в себя некоторые алгоритмы вычисления расстояния. Например, алгоритм должен вычислить евклидово расстояние. Диапазон значений x2 на приведенном выше рисунке относительно невелик. Эффект от результата намного меньше, чем от x1, поэтому это приведет к потере точности. Так что нормализация необходима, она может заставить каждую функцию вносить одинаковый вклад в результат.
Ниже приводится распространенный метод нормализации.
1). Линейная нормализация, линейная нормализация преобразует все входные данные в диапазон [0 1], формула выглядит следующим образом
2). 0 означает нормализацию, 0 означает метод нормализации, который нормализует исходный набор данных до набора данных со средним значением 0 и дисперсией 1. Формула нормализации выглядит следующим образом:
О выборе метода нормализации
1) В алгоритмах классификации и кластеризации, когда расстояние необходимо для измерения сходства или когда технология PCA используется для уменьшения размерности, второй метод (стандартизация Z-оценки) работает лучше.
2) Первый метод или другие методы нормализации можно использовать, когда измерение расстояния, расчет ковариации и данные не соответствуют нормальному распределению. Например, при обработке изображения изображение RGB преобразуется в изображение в оттенках серого, и его значение ограничено диапазоном [0 255].
Как масштабировать данные машинного обучения с нуля с помощью Python
Дата публикации 2016-10-14
Многие алгоритмы машинного обучения ожидают, что данные будут последовательно масштабироваться.
Есть два популярных метода, которые вы должны учитывать при масштабировании ваших данных для машинного обучения.
В этом уроке вы узнаете, как вы можете изменить масштаб ваших данных для машинного обучения. Прочитав этот урок, вы узнаете:
Описание
Многие алгоритмы машинного обучения ожидают, что масштаб входных и даже выходных данных будет эквивалентен.
Это может помочь в методах, которые вводят вес для прогнозирования, таких как линейная регрессия и логистическая регрессия.
Это практически необходимо в методах, которые комбинируют взвешенные входы сложными способами, такими как искусственные нейронные сети и глубокое обучение.
В этом уроке мы будем практиковаться в пересчете одного стандартного набора данных машинного обучения в формате CSV.
Вы можете узнать больше об этом наборе данных наUCI Хранилище Машинного Обучения(Обновить:скачать отсюда).
Руководство
Этот урок разделен на 3 части:
Эти шаги обеспечат основы, необходимые для масштабирования ваших собственных данных.
1. Нормализуйте данные
Нормализация может относиться к различным методам в зависимости от контекста.
Здесь мы используем нормализацию для ссылки на масштабирование входной переменной в диапазоне от 0 до 1.
Нормализация требует, чтобы вы знали минимальные и максимальные значения для каждого атрибута.
Это можно оценить по данным обучения или указать напрямую, если вы хорошо знаете предметную область.
Вы можете легко оценить минимальное и максимальное значения для каждого атрибута в наборе данных, перечислив значения.
Фрагмент кода ниже определяетdataset_minmax ()функция, которая вычисляет минимальное и максимальное значение для каждого атрибута в наборе данных, а затем возвращает массив этих минимальных и максимальных значений.
Мы можем придумать небольшой набор данных для тестирования следующим образом:
С помощью этого надуманного набора данных мы можем проверить нашу функцию для вычисления минимума и максимума для каждого столбца.
Выполнение примера приводит к следующему выводу.
Сначала набор данных печатается в формате списка списков, затем минимальный и максимальный значения для каждого столбца печатаются в форматеСтолбец 1: мин, макс. и столбец 2: мин., макс.,
Получив оценки максимальных и минимально допустимых значений для каждого столбца, мы можем теперь нормализовать необработанные данные в диапазоне 0 и 1.
Расчет для нормализации одного значения для столбца:
Ниже приведена реализация этого в функции под названиемnormalize_dataset ()это нормализует значения в каждом столбце предоставленного набора данных.
Мы можем связать эту функцию вместе сdataset_minmax ()функционировать и нормализовать надуманный набор данных.
Выполнение этого примера печатает выходные данные ниже, включая нормализованный набор данных.
Мы можем комбинировать этот код с кодом для загрузки набора данных CSV и загрузки и нормализации набора данных диабета индейцев Пима.
Загрузите набор данных индейцев Пима изUCI Хранилище Машинного Обученияи поместите его в свой текущий каталог с именемПим-индусы-diabetes.csv(Обновить:скачать отсюда), Откройте файл и удалите все пустые строки внизу.
Вначале пример загружает набор данных и преобразует значения для каждого столбца из строки в значения с плавающей запятой. Минимальное и максимальное значения для каждого столбца оцениваются из набора данных, и, наконец, значения в наборе данных нормализуются.
Выполнение примера приводит к выводу ниже.
Первая запись из набора данных печатается до и после нормализации, показывая эффект масштабирования.
2. Стандартизировать данные
Вместе среднее значение и стандартное отклонение можно использовать для суммирования нормального распределения, также называемого гауссовым распределением или кривой колокола.
Требуется, чтобы среднее значение и стандартное отклонение значений для каждого столбца были известны до масштабирования. Как и в случае с приведенной выше нормализацией, мы можем оценить эти значения на основе данных обучения или использовать знания предметной области для определения их значений.
Начнем с создания функций для оценки статистики среднего и стандартного отклонения для каждого столбца из набора данных.
Среднее значение описывает среднюю или центральную тенденцию для набора чисел. Среднее значение для столбца рассчитывается как сумма всех значений для столбца, деленная на общее количество значений.
Функция ниже названаcolumn_means ()вычисляет средние значения для каждого столбца в наборе данных.
Стандартное отклонение описывает средний разброс значений от среднего. Его можно рассчитать как квадратный корень из суммы квадратов разности между каждым значением и средним и деления на количество значений минус 1.
Функция ниже названаcolumn_stdevs ()вычисляет стандартное отклонение значений для каждого столбца в наборе данных и предполагает, что средние значения уже рассчитаны.
Опять же, мы можем придумать небольшой набор данных, чтобы продемонстрировать оценку среднего значения и стандартного отклонения от набора данных.
Используя электронную таблицу Excel, мы можем оценить среднее и стандартное отклонение для каждого столбца следующим образом:
Используя надуманный набор данных, мы можем оценить сводную статистику.
Выполнение примера дает следующий вывод, соответствующий числам, вычисленным в электронной таблице.
После того как итоговая статистика рассчитана, мы можем легко стандартизировать значения в каждом столбце.
Расчет для стандартизации данного значения выглядит следующим образом:
Ниже приведена функция с именемstandardize_dataset ()который реализует это уравнение
Комбинируя это с функциями для оценки средней статистики и стандартного отклонения, мы можем стандартизировать наш надуманный набор данных.
Выполнение этого примера приводит к следующему выводу, показывающему стандартизированные значения для надуманного набора данных.
Опять же, мы можем продемонстрировать стандартизацию набора данных машинного обучения.
Приведенный ниже пример демонстрирует, как загрузить и стандартизировать набор данных диабета индейцев Пима, предположительно находящийся в текущем рабочем каталоге, как в предыдущем примере нормализации.
При выполнении примера печатается первая строка набора данных, сначала в загруженном необработанном формате, а затем стандартизированный, что позволяет нам увидеть разницу для сравнения.
3. Когда нормализовать и стандартизировать
Если данный атрибут данных является нормальным или близким к нормальному, это, вероятно, метод масштабирования, который следует использовать.
Рекомендуется записывать сводные статистические данные, используемые в процессе стандартизации, чтобы вы могли применять их при дальнейшей стандартизации данных, которые вы, возможно, захотите использовать с вашей моделью.
Если ваши данные обычно не распространяются, рассмотрите возможность их нормализации до применения алгоритма машинного обучения.
Рекомендуется записывать минимальные и максимальные значения для каждого столбца, используемого в процессе нормализации, опять же, в случае необходимости нормализации новых данных в будущем для использования с вашей моделью.
расширения
Есть много других преобразований данных, которые вы можете применить.
Идея преобразования данных состоит в том, чтобы наилучшим образом представить структуру вашей проблемы в ваших данных алгоритму обучения.
Может быть неясно, какие преобразования требуются заранее. Комбинация проб и ошибок и анализ разведочных данных (графики и статистика) могут помочь определить, что может сработать.
Ниже приведены некоторые дополнительные преобразования, которые вы можете рассмотреть при исследовании и реализации:
Обзор
В этом руководстве вы узнали, как масштабировать данные для машинного обучения с нуля.
В частности, вы узнали:
У вас есть вопросы о масштабировании ваших данных или об этом посте?
Задайте свой вопрос в комментариях ниже, и я сделаю все возможное, чтобы ответить.