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

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

В: Зачем нам нужно уменьшение размерности?

A: Рассмотрим сценарий, в котором мы пытаемся предсказать цену дома, используя его площадь (в квадратных футах). Мы можем попытаться построить модель для переменной и визуализировать ее с помощью таких библиотек, как matplotlib, и понять, является ли модель линейной. (См. изображение 1.1)

Визуализация гладкая, поскольку у нас есть только одна переменная, что, если у нас есть две переменные: площадь (в квадратных футах) и местоположение. Затем для визуализации графика модели нам придется использовать трехмерные графики или трехмерные графики. И чем дольше идет подсчет признаков, тем сложнее становится визуализировать соответствие модели. Таким образом, необходимо определить функции, которые важны для построения модели.

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

Существует два метода уменьшения размерности:

  1. Выбор функции
  2. Извлечение признаков

В этой статье мы поговорим о выборе функций.

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

Общие методы выбора функций:

  1. Анализ соотношения отсутствующей стоимости
  2. Фильтр низкой дисперсии
  3. Высококорреляционный фильтр
  4. Устранение обратной функции
  5. Устранение прямой функции

Теперь давайте рассмотрим каждый метод:

Анализ соотношения отсутствующей стоимости:

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

  1. Прочитайте данные, используя библиотеку pandas
  2. Проверьте, читаются ли данные, проверьте первые 5 строк данных, чтобы определить функции (зависимые и независимые).

3. Проверьте наличие пропущенных значений в наборе данных и рассчитайте соотношение пропущенных значений.

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

5. Удалите столбцы из кадра данных, которые пересекают установленный порог, и проверьте, удалены ли столбцы.

Низкодисперсионный фильтр:

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

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

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

Ниже приведены шаги для выполнения фильтра с низкой дисперсией:

  1. Прочитайте csv, используя библиотеку pandas, и отобразите первые несколько строк.
  2. Проверьте, есть ли нулевые значения, и проверьте типы данных столбцов.

3. Нормализуйте данные, используя модуль нормализации в sklearn.preprocessing.

4. Рассчитайте дисперсию с помощью функции .var()

5. Наблюдайте за дисперсией и установите порог дисперсии

6. Выберите функции, дисперсия которых превышает пороговое значение.

Высококорреляционный фильтр

Этот фильтр можно использовать для удаления мультиколлинеарности из набора данных. Мультиколлинеарность возникает, когда две или более независимых переменных сильно коррелируют друг с другом.

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

Ниже приведены шаги для выполнения фильтра с высокой корреляцией:

  1. Прочитайте csv, используя библиотеку pandas, и отобразите первые несколько строк.
  2. Проверьте, есть ли нулевые значения, и проверьте типы данных столбцов.

3. Импортируйте variance_inflation_factor из модуля statsmodels.stats.outliers_influence.

VIF используется для проверки мультиколлинеарности. Для получения более подробной информации перейдите по этой ссылке: https://www.analyticsvidhya.com/blog/2020/03/what-is-multicollinearity/

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

5. Рассчитайте VIF и наблюдайте за данными VIF, проверьте коллинеарность между переменными.

6. Если мы обнаружим какую-либо коллинеарность между переменными, мы отбросим одну из этих переменных.

Устранение обратной функции

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

Устранение обратной функции работает следующим образом:

Допустим, мы пытаемся предсказать итоговые оценки учащегося, используя Задание1, Задание2 и Задание3.

  1. Сначала строится модель с использованием всех функций (назначений) и оценивается производительность модели.
  2. Затем задание1 удаляется, а модель строится на основе задания2 и задания3. Оценивается производительность модели.
  3. Затем задание2 удаляется, и модель строится на задании1 и задании3. Оценивается производительность модели.
  4. Затем задание3 удаляется, и модель строится на задании1 и задании2. Оценивается производительность модели.
  5. После завершения всех комбинаций функций мы проверим производительность модели с наименьшим изменением производительности по сравнению с исходной моделью, содержащей все функции.
  6. Мы идентифицируем функцию, удаленную в модели, и не будем использовать эту функцию в нашей модели.

Ниже приведены шаги для устранения обратной функции:

  1. Прочитайте csv, используя библиотеку pandas, и отобразите первые несколько строк.
  2. Проверьте, есть ли нулевые значения, и проверьте типы данных столбцов.

3. Выберите переменные X и y для построения модели, Dataframe X обычно содержит независимые переменные, а y содержит зависимую переменную (удалите столбцы, такие как идентификатор, из независимых переменных, поскольку они не помогают в построении модели)

4. Импортируйте SequentialFeatureSelector из модуля mlxtend.feature_selection.

5. Импортируйте необходимые библиотеки для построения модели. В этом случае мы используем LinearRegression из sklearn.linear_model, поскольку мы пытаемся построить модель регрессии.

6. Создайте объект для LinearRegression и SequentialFeatureSelector, SequentialFeatureSelector принимает следующие аргументы в качестве входных данных:

Модель: в данном случае это линейная регрессия.

k_features: количество функций, которые мы хотим иметь в окончательной сборке модели.

вперед: False (поскольку мы выполняем удаление функций назад)

verbose: 1 (отображает сообщения о выполнении)

оценка: метрика оценки для модели (в этом случае мы используем «отрицательную среднеквадратичную ошибку»

7. Выполните подгонку для объекта SequentialFeatureSelector.

8. Определите функции, выбранные с помощью свойства переменной k_feature_names_ объекта sfs_initial.

9. Используйте функции, выбранные SequentialFeatureSelector, для окончательной сборки модели.

Устранение прямой функции

Устранение признаков вперед используется в том же сценарии, что и когда мы использовали устранение признаков назад.

Прямое устранение признаков работает следующим образом:

Допустим, мы пытаемся предсказать итоговые оценки учащегося, используя Задание1, Задание2 и Задание3.

  1. Сначала рассмотрим только задание1 и построим модель
  2. Далее рассмотрим только задание2 и построим модель
  3. Далее мы рассмотрим только задание3 и построим модель
  4. Мы оценим производительность модели на трех моделях и возьмем переменную с самой высокой производительностью модели (например, допустим, что присваивание 3 дало нам лучшую производительность модели)
  5. Затем мы включаем оставшиеся переменные одну за другой вместе с выбранной переменной (например, присваивание3+присваивание1, присваивание3+присваивание2) и выполняем оценку модели.
  6. Мы продолжаем этот процесс до тех пор, пока не увидим, что производительность модели не улучшилась, и берем функции с оптимальной производительностью модели.

Ниже приведены шаги для устранения обратной функции:

  1. Прочитайте csv, используя библиотеку pandas, и отобразите первые несколько строк.
  2. Проверьте, есть ли нулевые значения, и проверьте типы данных столбцов.

3. Выберите переменные X и y для построения модели, Dataframe X обычно содержит независимые переменные, а y содержит зависимую переменную (удалите столбцы, такие как идентификатор, из независимых переменных, поскольку они не помогают в построении модели)

4. Импортируйте SequentialFeatureSelector из модуля mlxtend.feature_selection.

5. Импортируйте необходимые библиотеки для построения модели. В этом случае мы используем LinearRegression из sklearn.linear_model, поскольку мы пытаемся построить модель регрессии.

6. Создайте объект для LinearRegression и SequentialFeatureSelector, SequentialFeatureSelector принимает следующие аргументы в качестве входных данных:

Модель: в данном случае это линейная регрессия.

k_features: количество функций, которые мы хотим иметь в окончательной сборке модели.

вперед: True (поскольку мы выполняем удаление функции вперед)

verbose: 1 (отображает сообщения о выполнении)

оценка: метрика оценки для модели (в этом случае мы используем «отрицательную среднеквадратичную ошибку»

7. Выполните подгонку для объекта SequentialFeatureSelector.

8. Определите функции, выбранные с помощью свойства переменной k_feature_names_ объекта sfs_initial.

9. Используйте функции, выбранные SequentialFeatureSelector, для окончательной сборки модели.

Это способы, которыми мы можем попытаться определить функции, которые наиболее важны при построении моделей машинного обучения. Эти методы могут помочь нам построить оптимальные модели.