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

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

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

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

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

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

Методы фильтрации

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

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

Методы фильтрации можно в общих чертах разделить на две категории: методы одномерного фильтра и многомерного фильтра.

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

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

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

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

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

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

Давайте посмотрим, как мы можем удалить постоянные функции из набора данных, которые мы собираемся использовать в этом примере, – это набор данных Santandar Customer Satisfaction, его можно загрузить с Kaggle. Воспользуемся файлом train.csv. Однако я переименовал его в «santandar_data.csv» для удобства чтения.

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

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

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)

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

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

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)

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

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% схожие значения для выходных наблюдений.

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

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

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

Выполните следующий скрипт, чтобы импортировать набор данных и нужные библиотеки:

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 тысяч записей из данных об удовлетворенности клиентов santandar, которые мы использовали в этой статье.

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

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, который может удалить повторяющиеся функции. Однако у нас есть метод, который может помочь нам идентифицировать повторяющиеся строки в dataframe pandas. Мы будем использовать этот метод, чтобы сначала транспонировать наш набор данных, как показано ниже:

train_features_T = train_features.T
train_features_T.shape

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

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

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

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

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

Наконец, мы можем удалить повторяющиеся строки с помощью метода drop_duplicates(). Если вы сначала передадите строковое значение параметру 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

В приведенном выше скрипте я импортировал набор данных вместе с необходимыми библиотеками. Затем мы распечатали форму dataframe. В выводе вы должны увидеть (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_dtypes() в нашем наборе данных и передаем ему список num_colums, содержащий тип столбцов, который мы хотим сохранить. Метод select_dtypes() вернет имена указанных числовых столбцов, которые мы храним в списке numeric_columns. Затем мы фильтруем наши столбцы из dataframe paribas_data с помощью списка numerical_colums. Давайте распечатаем форму 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() dataframe pandas. Метод corr() возвращает корреляционную матрицу, содержащую корреляцию между всеми столбцами dataframe. Затем мы можем просмотреть корреляционную матрицу и посмотреть, превышает ли корреляция между двумя столбцами пороговую корреляцию, добавить этот столбец в набор коррелированных столбцов. Мы можем удалить его из фактического набора данных.

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

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 с хотя бы одним другим столбцом. Выполните следующий скрипт:

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.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *