Рубрики
Без рубрики

Применение методов фильтрации в Python для выбора объектов

Автор оригинала: Usman Malik.

Вступление

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

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

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

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

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

Методы фильтрации для выбора объектов

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

Методы фильтрации можно широко разделить на две категории: Одномерные методы фильтрации и Многомерные методы фильтрации .

Одномерные методы фильтрации-это тип методов, в которых отдельные признаки ранжируются в соответствии с определенными критериями. Затем выбираются верхние N объектов. Для одномерных методов фильтрации используются различные типы критериев ранжирования, например оценка Фишера , взаимная информация и дисперсия признака.

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

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

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

Удаление постоянных функций

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

Давайте посмотрим, как мы можем удалить постоянные объекты из набора данных. Набор данных, который мы собираемся использовать для этого примера, – это набор данных Santander Customer Satisfaction , который можно загрузить с Kaggle. Мы будем использовать файл “train.csv”. Тем не менее, я переименовал его в “santander_data.csv” для удобства чтения.

Импорт необходимых библиотек и наборов данных

Постоянные объекты имеют значения с нулевой дисперсией, так как все значения одинаковы. Мы можем найти постоянные столбцы, используя функцию Variance Threshold библиотеки Python Scikit Learn . Выполните следующий сценарий для импорта необходимых библиотек и набора данных:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

santandar_data = pd.read_csv(r"E:\Datasets\santandar_data.csv", nrows=40000)
santandar_data.shape

Я отфильтровал 40 тысяч лучших записей. В выходных данных вы должны увидеть (40000, 371), что означает, что у нас есть 40 тысяч строк и 371 столбец в нашем наборе данных.

Разделение Данных На Обучающие и Тестовые Наборы

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

train_features, test_features, train_labels, test_labels=train_test_split(
    santandar_data.drop(labels=['TARGET'], axis=1),
    santandar_data['TARGET'],
    test_size=0.2,
    random_state=41)
Удаление постоянных объектов с помощью порога дисперсии

Теперь пришло время удалить постоянные функции. Для этого мы будем использовать функцию Variance Threshold , которую мы импортировали ранее. Функция требует значения для своего параметра threshold . Передача нулевого значения для параметра приведет к фильтрации всех объектов с нулевой дисперсией. Выполните следующий сценарий, чтобы создать фильтр для постоянных объектов.

constant_filter = VarianceThreshold(threshold=0)

Затем нам нужно просто применить этот фильтр к нашему учебному набору, как показано в следующем примере:

constant_filter.fit(train_features)

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

len(train_features.columns[constant_filter.get_support()])

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

Аналогично, вы можете найти количество постоянных функций с помощью следующего скрипта:

constant_columns = [column for column in train_features.columns
                    if column not in train_features.columns[constant_filter.get_support()]]

print(len(constant_columns))

Чтобы просмотреть все постоянные столбцы, выполните следующий сценарий:

for column in constant_columns:
    print(column)

Выход выглядит примерно так:

ind_var2_0
ind_var2
ind_var18_0
ind_var18
ind_var27_0
ind_var28_0
ind_var28
ind_var27
ind_var34_0
ind_var34
ind_var41
ind_var46_0
ind_var46
num_var18_0
num_var18
num_var27_0
num_var28_0
num_var28
num_var27
num_var34_0
num_var34
num_var41
num_var46_0
num_var46
saldo_var18
saldo_var28
saldo_var27
saldo_var34
saldo_var41
saldo_var46
delta_imp_amort_var18_1y3
delta_imp_amort_var34_1y3
imp_amort_var18_hace3
imp_amort_var18_ult1
imp_amort_var34_hace3
imp_amort_var34_ult1
imp_reemb_var13_hace3
imp_reemb_var17_hace3
imp_reemb_var33_hace3
imp_trasp_var17_out_hace3
imp_trasp_var33_out_hace3
num_var2_0_ult1
num_var2_ult1
num_reemb_var13_hace3
num_reemb_var17_hace3
num_reemb_var33_hace3
num_trasp_var17_out_hace3
num_trasp_var33_out_hace3
saldo_var2_ult1
saldo_medio_var13_medio_hace3

Наконец, чтобы удалить постоянные объекты из обучающих и тестовых наборов, мы можем использовать метод transform() метода constant_filter . Для этого выполните следующий сценарий:

train_features = constant_filter.transform(train_features)
test_features = constant_filter.transform(test_features)

train_features.shape, test_features.shape

Если вы выполните описанный выше сценарий, вы увидите, что наши обучающие и тестовые наборы теперь будут содержать 320 столбцов, так как 50 постоянных столбцов были удалены.

Удаление квазипостоянных признаков

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

В этом разделе мы создадим квазипостоянный фильтр с помощью функции Порог дисперсии . Однако вместо того, чтобы передавать 0 в качестве значения параметра threshold , мы будем передавать 0.01, что означает, что если дисперсия значений в столбце меньше 0.01, удалите этот столбец. Другими словами, удалите столбец признаков, где примерно 99% значений аналогичны.

Эти шаги очень похожи на предыдущий раздел. Мы импортируем набор данных и библиотеки, выполним разделение train-test и сначала удалим постоянные объекты.

Импорт необходимых библиотек и наборов данных

Выполните следующий сценарий для импорта набора данных и нужных библиотек:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

santandar_data = pd.read_csv(r"E:\Datasets\santandar_data.csv", nrows=40000)
santandar_data.shape
Разделение Данных На Обучающие и Тестовые Наборы
train_features, test_features, train_labels, test_labels = train_test_split(
    santandar_data.drop(labels=['TARGET'], axis=1),
    santandar_data['TARGET'],
    test_size=0.2,
    random_state=41)
Удаление постоянных объектов с помощью порога дисперсии

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

constant_filter = VarianceThreshold(threshold=0)
constant_filter.fit(train_features)

len(train_features.columns[constant_filter.get_support()])

constant_columns = [column for column in train_features.columns
                    if column not in train_features.columns[constant_filter.get_support()]]

train_features.drop(labels=constant_columns, axis=1, inplace=True)
test_features.drop(labels=constant_columns, axis=1, inplace=True)
Удаление Квазипостоянных Признаков С Использованием Порога Дисперсии

Давайте создадим наш квазипостоянный фильтр. Для этого выполните следующий сценарий:

qconstant_filter = VarianceThreshold(threshold=0.01)

Остальные шаги те же. Нам нужно применить фильтр к нашему тренировочному набору с помощью метода fit () , как показано ниже.

qconstant_filter.fit(train_features)

Давайте проверим количество наших не квазипостоянных столбцов. Выполните следующий сценарий:

len(train_features.columns[qconstant_filter.get_support()])

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

Чтобы проверить количество квазипостоянных столбцов, выполните следующий сценарий:

qconstant_columns = [column for column in train_features.columns
                    if column not in train_features.columns[qconstant_filter.get_support()]]

print(len(qconstant_columns))

Вы должны увидеть 55 в выводе.

Теперь выведем имена всех квазипостоянных столбцов. Выполните следующий сценарий:

for column in qconstant_columns:
    print(column)

В выходных данных вы должны увидеть следующие имена столбцов:

ind_var1
ind_var6_0
ind_var6
ind_var13_largo
ind_var13_medio_0
ind_var13_medio
ind_var14
ind_var17_0
ind_var17
ind_var19
ind_var20_0
ind_var20
ind_var29_0
ind_var29
ind_var30_0
ind_var31_0
ind_var31
ind_var32_cte
ind_var32_0
ind_var32
ind_var33_0
ind_var33
ind_var40
ind_var39
ind_var44_0
ind_var44
num_var6_0
num_var6
num_var13_medio_0
num_var13_medio
num_op_var40_hace3
num_var29_0
num_var29
delta_imp_aport_var33_1y3
delta_num_aport_var33_1y3
ind_var7_emit_ult1
ind_var7_recib_ult1
num_aport_var33_hace3
num_aport_var33_ult1
num_var7_emit_ult1
num_meses_var13_medio_ult3
num_meses_var17_ult3
num_meses_var29_ult3
num_meses_var33_ult3
num_meses_var44_ult3
num_reemb_var13_ult1
num_reemb_var17_ult1
num_reemb_var33_ult1
num_trasp_var17_in_hace3
num_trasp_var17_in_ult1
num_trasp_var17_out_ult1
num_trasp_var33_in_hace3
num_trasp_var33_in_ult1
num_trasp_var33_out_ult1
num_venta_var44_hace3

Наконец, чтобы увидеть, содержат ли наши обучающие и тестовые наборы только непостоянные и не квазипостоянные столбцы, мы можем использовать метод transform() метода qconstant_filter . Для этого выполните следующий сценарий:

train_features = qconstant_filter.transform(train_features)
test_features = qconstant_filter.transform(test_features)

train_features.shape, test_features.shape

Если вы выполните описанный выше сценарий, то увидите, что наши обучающие и тестовые наборы теперь будут содержать 265 столбцов, поскольку 50 постоянных и 55 квазипостоянных столбцов были удалены из общего числа стандартных 370 столбцов.

Удаление Дубликатов Функций

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

Импорт необходимых библиотек и наборов данных

Выполните следующий сценарий для импорта набора данных и нужных библиотек:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

santandar_data = pd.read_csv(r"E:\Datasets\santandar_data.csv", nrows=20000)
santandar_data.shape

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

Разделение Данных На Обучающие и Тестовые Наборы
train_features, test_features, train_labels, test_labels = train_test_split(
    santandar_data.drop(labels=['TARGET'], axis=1),
    santandar_data['TARGET'],
    test_size=0.2,
    random_state=41)
Удаление дубликатов объектов с помощью Транспонирования

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

train_features_T = train_features.T
train_features_T.shape

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

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

Давайте найдем общее количество повторяющихся объектов в нашем наборе данных с помощью метода sum () , связанного с методом duplicated () , как показано ниже.

print(train_features_T.duplicated().sum())

В выходных данных вы должны увидеть 94.

Наконец, мы можем удалить дубликаты строк с помощью метода drop_duplicates () . Если вы передадите строковое значение first параметру keep метода drop_duplicates () , то все повторяющиеся строки будут удалены, кроме первой копии. На следующем шаге мы удалим все дубликаты строк и сделаем транспонирование транспонированного обучающего набора, чтобы получить исходный обучающий набор, который не содержит дубликатов столбцов. Выполните следующий сценарий:

unique_features = train_features_T.drop_duplicates(keep='first').T

Теперь давайте напечатаем форму нашего нового тренировочного набора без дубликатов функций:

unique_features.shape

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

Чтобы увидеть имена повторяющихся столбцов, выполните этот скрипт:

duplicated_features = [dup_col for dup_col in train_features.columns if dup_col not in unique_features.columns]
duplicated_features

В выходных данных вы должны увидеть следующие столбцы:

['ind_var2',
 'ind_var13_medio',
 'ind_var18_0',
 'ind_var18',
 'ind_var26',
 'ind_var25',
 'ind_var27_0',
 'ind_var28_0',
 'ind_var28',
 'ind_var27',
 'ind_var29_0',
 'ind_var29',
 'ind_var32',
 'ind_var34_0',
 'ind_var34',
 'ind_var37',
 'ind_var40_0',
 'ind_var40',
 'ind_var41',
 'ind_var39',
 'ind_var46_0',
 'ind_var46',
 'num_var13_medio',
 'num_var18_0',
 'num_var18',
 'num_var26',
 'num_var25',
 'num_op_var40_hace3',
 'num_op_var39_hace3',
 'num_var27_0',
 'num_var28_0',
 'num_var28',
 'num_var27',
 'num_var29_0',
 'num_var29',
 'num_var32',
 'num_var34_0',
 'num_var34',
 'num_var37',
 'num_var40_0',
 'num_var40',
 'num_var41',
 'num_var39',
 'num_var46_0',
 'num_var46',
 'saldo_var18',
 'saldo_var28',
 'saldo_var27',
 'saldo_var29',
 'saldo_var34',
 'saldo_var40',
 'saldo_var41',
 'saldo_var46',
 'delta_imp_amort_var18_1y3',
 'delta_imp_amort_var34_1y3',
 'delta_imp_reemb_var33_1y3',
 'delta_imp_trasp_var17_out_1y3',
 'delta_imp_trasp_var33_out_1y3',
 'delta_num_reemb_var13_1y3',
 'delta_num_reemb_var17_1y3',
 'delta_num_reemb_var33_1y3',
 'delta_num_trasp_var17_in_1y3',
 'delta_num_trasp_var17_out_1y3',
 'delta_num_trasp_var33_in_1y3',
 'delta_num_trasp_var33_out_1y3',
 'imp_amort_var18_hace3',
 'imp_amort_var18_ult1',
 'imp_amort_var34_hace3',
 'imp_amort_var34_ult1',
 'imp_var7_emit_ult1',
 'imp_reemb_var13_hace3',
 'imp_reemb_var17_hace3',
 'imp_reemb_var33_hace3',
 'imp_reemb_var33_ult1',
 'imp_trasp_var17_out_hace3',
 'imp_trasp_var17_out_ult1',
 'imp_trasp_var33_in_hace3',
 'imp_trasp_var33_out_hace3',
 'ind_var7_emit_ult1',
 'num_var2_0_ult1',
 'num_var2_ult1',
 'num_var7_emit_ult1',
 'num_reemb_var13_hace3',
 'num_reemb_var17_hace3',
 'num_reemb_var33_hace3',
 'num_reemb_var33_ult1',
 'num_trasp_var17_out_hace3',
 'num_trasp_var17_out_ult1',
 'num_trasp_var33_in_hace3',
 'num_trasp_var33_out_hace3',
 'saldo_var2_ult1',
 'saldo_medio_var13_medio_hace3',
 'saldo_medio_var13_medio_ult1',
 'saldo_medio_var29_hace3']

Удаление Коррелированных Объектов

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

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

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

Набор данных, который мы будем использовать для этого раздела, – это набор данных BNP Paribas Cardif Claims Management , который можно загрузить с сайта Kaggle. Выполните следующие действия, чтобы найти и удалить коррелированные объекты из набора данных.

Импорт необходимых библиотек и наборов данных

Выполните следующий сценарий для импорта набора данных и нужных библиотек:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

paribas_data = pd.read_csv(r"E:\Datasets\paribas_data.csv", nrows=20000)
paribas_data.shape

В приведенном выше сценарии я импортировал набор данных вместе с необходимыми библиотеками. Затем мы напечатали форму нашего фрейма данных. В выходных данных вы должны увидеть (20000, 133), что означает, что наш набор данных содержит 20 тысяч строк и 133 объекта.

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

Предварительная обработка данных

Выполните следующий сценарий, чтобы удалить нечисловые объекты из набора данных.

num_colums = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
numerical_columns = list(paribas_data.select_dtypes(include=num_colums).columns)
paribas_data = paribas_data[numerical_columns]

В первой строке приведенного выше сценария мы определяем список, содержащий типы данных столбцов, которые мы хотим сохранить в нашем наборе данных. Затем мы вызываем метод select_types() в нашем наборе данных и передаем ему список num_columns , содержащий тип столбцов, которые мы хотим сохранить. Метод select_types() вернет имена указанных числовых столбцов, которые мы храним в списке numeric_columns . Далее мы отфильтровываем столбцы из фрейма данных paribas_data с помощью списка numerical_columns . Давайте напечатаем форму фрейма данных paribas_data чтобы увидеть, сколько числовых столбцов у нас есть, выполните следующий скрипт:

paribas_data.shape

В выходных данных вы должны увидеть (20000, 114), что означает, что теперь наш набор данных содержит 20 тысяч записей и 114 объектов. Помните, раньше у нас было 133 функции.

Разделение Данных На Обучающие и Тестовые Наборы

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

train_features, test_features, train_labels, test_labels = train_test_split(
    paribas_data.drop(labels=['target', 'ID'], axis=1),
    paribas_data['target'],
    test_size=0.2,
    random_state=41)

В приведенном выше сценарии мы делим наши данные на 80% обучающих и 20% тестовых наборов.

Удаление коррелированных объектов с помощью метода corr()

Чтобы удалить коррелированные функции, мы можем использовать метод corr() фрейма данных pandas. Метод corr() возвращает корреляционную матрицу, содержащую корреляцию между всеми столбцами фрейма данных. Затем мы можем перебрать корреляционную матрицу и посмотреть, если корреляция между двумя столбцами больше пороговой корреляции, добавить этот столбец к набору коррелированных столбцов. Мы можем удалить этот набор столбцов из фактического набора данных.

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

correlated_features = set()
correlation_matrix = paribas_data.corr()

В приведенном выше скрипте мы создаем корреляционную матрицу correlation_matrix для всех столбцов нашего набора данных. Мы также создали набор correlated_features , который будет содержать имена всех коррелированных объектов.

Затем мы пройдемся по всем столбцам в correlation_matrix и добавим столбцы со значением корреляции 0,8 в набор correlated_features , как показано ниже. Вы можете установить любое пороговое значение для корреляции.

for i in range(len(correlation_matrix .columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc[i, j]) > 0.8:
            colname = correlation_matrix.columns[i]
            correlated_features.add(colname)

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

len(correlated_features)

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

print(correlated_features)

Вывод выглядит следующим образом:

{'v55', 'v105', 'v130', 'v12', 'v60', 'v67', 'v63', 'v46', 'v53', 'v43', 'v68', 'v123', 'v95', 'v103', 'v44', 'v108', 'v89', 'v104', 'v109', 'v83', 'v115', 'v21', 'v101', 'v93', 'v40', 'v78', 'v54', 'v118', 'v124', 'v73', 'v96', 'v121', 'v77', 'v114', 'v48', 'v116', 'v87', 'v86', 'v65', 'v122', 'v64', 'v81', 'v128', 'v49', 'v37', 'v84', 'v98', 'v111', 'v41', 'v25', 'v106', 'v32', 'v126', 'v76', 'v100'}

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

Следующий сценарий удаляет эти столбцы из набора данных:

train_features.drop(labels=correlated_features, axis=1, inplace=True)
test_features.drop(labels=correlated_features, axis=1, inplace=True)

Вывод

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

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

В следующей статье мы рассмотрим некоторые другие типы методов выбора объектов. А до тех пор счастливого кодирования!