Методы уменьшения размеров вашего набора данных, чтобы уменьшить переоснащение и ускорить процесс

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

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

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

Выбор признаков с порогом отклонения

Как следует из названия, дисперсия представляет собой изменчивость в наборе данных, указывающую, насколько разбросано распределение. Если дисперсия признака очень низкая, признак не так важен. Предположим, у нас есть набор данных о здоровье собак с различными характеристиками, указывающими вес собаки, рост, ИМТ и т. д. Если характеристика веса имеет только одно или, может быть, два значения, дисперсия веса равна нулю и, следовательно, это неважно для нас. Поскольку вес одинаков во всех записях, очевидно, что эта функция не содержит для нас много информации, поскольку дает неизвестные идеи или способствует обучению прогностических моделей.

Библиотека Python scikit-learn предоставляет простой способ отбросить функции с низкой дисперсией с помощью VarianceThreholdоценщика. Мы можем установить пороговые параметры равными любому порогу дисперсии, который мы хотим установить. Функции, имеющие дисперсию ниже порогового значения, автоматически отбрасываются.

Реализация порога отклонения на Python

В строках 1 и 2 мы импортируем и определяем оценщик с порогом, равным 1. В строке 5 мы подгоняем оценщик к нашему набору данных. В строке 8 мы создаем маску переменных с признаками, имеющими дисперсию, равную единице или больше, а в строке 9 мы получаем сокращенный набор данных, применяя маску к исходному набору данных.

Выбор признаков с попарной корреляцией

Корреляция определяет отношение между двумя функциями. Положительная корреляция означает, что при увеличении одного признака увеличивается и другой, а отрицательная корреляция означает, что при увеличении признака другой уменьшается. Чтобы ясно понять, предположим, что у нас тот же набор данных о видах собак, но на этот раз мы рассмотрим две характеристики, а именно вес и рост. Если корреляция между этими двумя переменными составляет 0,99, они имеют сильную положительную корреляцию, означающую, что если вес собаки увеличивается, ее рост также увеличивается, и наоборот. Следовательно, использование обеих этих функций для моделирования приведет только к переоснащению и затратам ресурсов/времени, поскольку одной функции достаточно, чтобы отобразить взаимосвязь между функцией и целью.

Реализация парной корреляции на Python

В строке 1 мы вычисляем корреляцию всех признаков в нашем наборе данных. В строках 4 и 5 мы создаем логическую маску корреляционной матрицы, чтобы избавиться от повторяющихся значений корреляции и применяем маску к исходной корреляционной матрице. В строках 8, 9 и 10 мы запускаем цикл по сокращенным столбцам матрицы, чтобы получить столбцы с корреляцией выше 0,9 и вывести имена столбцов, которые нам нужно удалить.

Рекурсивное устранение признаков

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

Реализация RFE на Python

В строках 1 и 2 мы импортируем классификатор дерева решений и RFE. В строках 5–7 мы определяем дерево решений как dt, а RFE — как rfe, где оценщик установлен равным dt, а n_features_to_select установлен равным пяти, что означает, что нам нужны пять наиболее важных функций из нашего набора данных. В строке 10 мы определяем важные функции как selected_features, а в строке 11 мы печатаем selected_features, чтобы взглянуть на наши самые важные функции.

Извлечение признаков с помощью анализа главных компонентов или PCA

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

Реализация PCA на Python

В строке 1 мы импортируем PCA. В строке 4 мы определяем PCA как PCA и передаем n_components, равный пяти, что указывает на то, что нам нужно пять извлеченных функций. В строках 7 и 8 мы создаем новый набор данных, содержащий наши недавно извлеченные функции.

Заключение

В этой статье мы обсудили проклятие размерности и поняли разницу между выбором признаков и извлечением признаков. Затем мы изучили четыре метода уменьшения размерности и способы их реализации в Python.

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