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

Примечание. Это может быть немного длинновато. Итак, я делю его на три части. Так что исследуйте эту часть за частью.

Часть 1: Разработка функций

Что такое разработка функций и зачем об этом беспокоиться?

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

Это важно, и игнорировать его нельзя. Давайте посмотрим на общую идею:

  • Очистка и предварительная обработка данных

→ Обработка выбросов

→ Обработка отсутствующих значений

→ Устранение перекоса

  • Масштабирование
  • Кодировка
  1. Очистка и предварительная обработка данных:. В реальном мире мы никогда не получаем специально разработанные данные, идеально подходящие для алгоритма. Сделать это нужно следующими способами.

i) Обработка выбросов. Выбросы - это точка данных, которая не соответствует общей тенденции данных. Многие алгоритмы чувствительны к выбросам. Итак, вопрос в том, что делать?

→ Если их мало, удалите их полностью. Вы можете установить пороговое значение, чтобы идентифицировать их, а затем удалить их. Если в столбце много выбросов, лучше полностью удалить столбец, то же самое и со строками.

→ Вы можете преобразовать все в «Форму журнала», так как журнал переносит все на одинаковое расстояние. (работает только с числовыми данными)

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

ii) Обработка отсутствующих значений: Почему обработка пропущенных значений?

Отсутствие данных в наборе обучающих данных может снизить мощность / соответствие модели. Отсутствующие значения могут привести к смещению модели, потому что мы неправильно проанализировали поведение и взаимосвязь с другими переменными. Это полезно, потому что некоторые алгоритмы не могут работать с отсутствующими данными или использовать их. Поэтому важно идентифицировать и отмечать эти недостающие данные. После отметки можно подготовить значения для замены.

→ Замена отсутствующего значения либо на среднее, либо на медианное значение, либо на режим (это полностью зависит от оценки). Для той же цели можно использовать sklearn.preprocessing.impute.

→ При необходимости вы можете заменить их полностью новыми данными (опять же судебный приказ).

→ Или вы можете удалить весь столбец, если слишком много пропущенных значений. Так что это опять же требует в основном суждения !!!

iii) Асимметрия: асимметрия - это мера асимметрии распределения. Асимметрия - это мера симметрии, или, точнее, ее отсутствие.

Зачем обрабатывать асимметрию?

→ Многие методы построения моделей предполагают, что значения предикторов распределены нормально и имеют симметричную форму. Следовательно, иногда первостепенное значение имеет устранение перекоса.

→ Симметричное распределение предпочтительнее асимметричного, поскольку его легче интерпретировать и делать выводы.

→ используются логарифмическое преобразование, преобразование квадратного корня и т. Д.

2. Масштабирование:. Как будто обработка отсутствующих значений является обязательной, а масштабирование - нет. Но это не значит, что это менее важная техника. Подумайте о сценарии, где один из ваших столбцов (скажем, A) имеет значения в диапазоне от 10k до 100k, а один столбец имеет значение в диапазоне от 0 до 1 (скажем, B), тогда A будет иметь неподходящий преимущество перед B, так как он будет иметь больший вес.

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

→ Но стандартизация / масштабирование не может применяться к категориальным данным, поэтому мы разделяем категориальные и числовые данные, чтобы стандартизировать числовые данные.

Масштабатор MinMax, Стандартный склер, Нормализатор и т. Д. - вот некоторые методы. Все это можно выполнить с помощью ‘sklearn.preprocessing.scaler’

(Предлагаю вам посетить этот блог, чтобы подробнее изучить масштабирование)

3. Кодировка: Итак, что такое кодирование и почему?

Большинство алгоритмов, которые мы используем, работают с числовыми значениями, тогда как чаще всего категориальные данные представлены в текстовой / строковой (мужской, женский) или бинарном (0–4, 4–8 и т. Д.) Виде.

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

Обычно существует два типа кодирования данных: кодирование меток и горячее кодирование (или pandas.get_dummies).

i) Кодировка ярлыка: каждой категории присваивается один ярлык (например, 0, 1, 2 и т. д.). Кодирование меток - удобный метод кодирования категориальных переменных. Однако такие закодированные номинальные переменные могут быть неверно истолкованы как порядковые. Таким образом, кодирование меток выполняется только для порядковых типов данных (которые имеют определенный порядок).

→ Таким образом, даже после кодирования метки все данные не потеряют ранжирование или уровень важности.

Может быть выполнено с помощью ‘sklearn.preprocessing.LabelEncoder’

ii) Одно горячее кодирование: кодирование меток нельзя выполнить на номинальном или двоичном, поскольку мы не можем ранжировать их на основе их свойств. Все данные обрабатываются одинаково. Рассмотрим следующие две категориальные переменные и их значения, например

→ Цвет: синий, зеленый, красный, желтый.

→ Образование: начальная школа, средняя школа, аспирант, аспирант, доктор философии.

Может быть выполнено с помощью pd.get_dummies или sklearn.preprocessing.OneHotEncoder.

Набор данных с большим количеством измерений требует большего количества параметров для понимания модели, а это означает, что больше строк для надежного изучения этих параметров. Эффект от использования One Hot Encoder заключается в добавлении ряда столбцов (измерений).

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

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