Вступление
Алгоритмы машинного обучения и глубокого обучения учатся на данных, которые состоят из различных типов функций. Время обучения и производительность алгоритма машинного обучения сильно зависят от функций в наборе данных. В идеале мы должны сохранять в наборе данных только те функции, которые действительно помогают нашей модели машинного обучения чему-то научиться.
Ненужные и избыточные функции не только замедляют время обучения алгоритма, но также влияют на его производительность. Процесс выбора наиболее подходящих функций для обучения модели машинного обучения называется «выбором функций».
Выполнение выбора функций перед обучением моделей машинного обучения дает несколько преимуществ, некоторые из которых перечислены ниже:
- Модели с меньшим количеством функций более объяснимы.
- Легче реализовать модели машинного обучения с ограниченными функциями
- Меньшее количество функций приводит к расширенному обобщению, что, в свою очередь, снижает переоснащение
- Выбор функции устраняет избыточность данных
- Время обучения моделей с меньшим количеством функций значительно меньше
- Модели с меньшим количеством функций менее подвержены ошибкам
Было разработано несколько методов для выбора наиболее оптимальных функций алгоритма машинного обучения. Одна категория таких методов называется методами фильтрации. В этой статье мы изучим некоторые из основных методов фильтрации для выбора функции.
Методы фильтрации для выбора функций
Методы фильтров относятся к категории методов выбора функций, которые выбирают функции независимо от модели алгоритма машинного обучения. Это одно из самых больших преимуществ методов фильтрации. Функции, выбранные с помощью методов фильтрации, можно использовать в качестве входных данных для любых моделей машинного обучения. Еще одно преимущество методов фильтрации в том, что они очень быстрые. Методы фильтрации обычно являются первым шагом в любом конвейере выбора функций.
Методы фильтрации можно в общих чертах разделить на две категории: методы одномерного фильтра и методы многомерного фильтра .
Методы одномерного фильтра - это тип методов, в которых отдельные функции ранжируются в соответствии с определенными критериями. Затем выбираются первые N функций. Для методов одномерного фильтра используются различные типы критериев ранжирования, например оценка Фишера , взаимная информация и дисперсия признака.
Одним из основных недостатков методов одномерной фильтрации является то, что они могут выбирать избыточные функции, поскольку взаимосвязь между отдельными функциями не принимается во внимание при принятии решений. Методы одномерного фильтра идеально подходят для удаления из данных постоянных и квазипостоянных функций.
Методы многовариантной фильтрации позволяют удалять из данных избыточные функции, поскольку они учитывают взаимную связь между функциями. Для удаления повторяющихся и коррелированных функций из данных можно использовать методы многомерной фильтрации.
В этой статье мы увидим, как с помощью Python удалить постоянные, квазипостоянные, повторяющиеся и коррелированные функции из нашего набора данных.
Удаление постоянных функций
Постоянные объекты - это типы объектов, которые содержат только одно значение для всех выходных данных в наборе данных. Постоянные признаки не предоставляют информации, которая могла бы помочь в классификации имеющейся записи. Поэтому рекомендуется удалить все постоянные объекты из набора данных.
Давайте посмотрим, как мы можем удалить постоянные функции из набора данных. Набор данных, который мы собираемся использовать в этом примере,
- это набор данных Santandar Customer Satisfaction , который можно загрузить с Kaggle. Воспользуемся файлом train.csv. Однако я переименовал его в «santandar_data.csv» для удобства чтения.
Импорт необходимых библиотек и набора данных
Постоянные объекты имеют значения с нулевой дисперсией, поскольку все
значения одинаковы. Мы можем найти постоянные столбцы с помощью функции
VarianceThreshold
библиотеки 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)
Удаление постоянных объектов с помощью порога отклонения
Пришло время удалить постоянные особенности. Для этого мы будем
использовать VarianceThreshold
которую мы импортировали ранее. Функция
требует значения для своего 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)
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 в качестве
значения для threshold
, мы передадим 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
Наконец, чтобы увидеть, содержат ли наши обучающие и тестовые наборы
только непостоянные и qconstant_filter
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, который может удалить повторяющиеся функции. Однако у нас есть метод, который может помочь нам идентифицировать повторяющиеся строки во фрейме данных 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_dtypes()
для нашего
набора данных и передаем ему num_colums
, содержащий тип столбцов,
который мы хотим сохранить. Метод select_dtypes()
вернет имена
указанных числовых столбцов, которые мы храним в списке
numeric_columns
. Затем мы фильтруем наши столбцы из 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()
фрейма данных 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 с хотя бы одним другим столбцом. Выполните следующий скрипт:
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.
Мы начали наше обсуждение с удаления постоянных и квазипостоянных функций с последующим удалением повторяющихся функций. Наконец, мы изучили, как удалить коррелированные объекты из нашего набора данных.
В следующей статье мы рассмотрим некоторые другие типы методов выбора функций. А пока удачного кодирования!