Функционализатор для устранения функций

#python #pandas #scikit-learn #feature-selection

#python #панды #scikit-learn #выделение функций

Вопрос:

Я пытаюсь настроить функции, которые удаляют все, кроме первых 10 столбцов моей базы данных. Всего база данных состоит из 76 столбцов. Идея состоит в том, чтобы применить a PolynomialFeatures(1)) к 10 столбцам, которые я хотел бы сохранить, но тогда я не вижу способа разумно устранить оставшиеся 66 столбцов (я думал о чем-то подобном PolynomialFeatures(0)) , но, похоже, это не работает. Идея заключалась в том, чтобы умножить их на константу 0). Проблемы в основном 2: 1) как указать DataFrameMapper , чтобы применить один и тот же функционал к диапазону столбцов (а именно от A_11 до A_76); 2) как указать DataFrameMapper , чтобы применить функционал aa, который устраняет такие столбцы.

(Неполный) код, который я пробовал до сих пор, выглядит следующим образом. Я обозначил A_11-A_76 проблему 1) (т.Е. Диапазон) и как? проблема 2 в коде:

 from dml_iv.utilities import SubsetWrapper, ConstantModel
from econml.sklearn_extensions.linear_model import StatsModelsLinearRegression

col = ["A_" str(k) for k in range(XW.shape[1])]
XW_db = pd.DataFrame(XW, columns=col)

from sklearn_pandas import DataFrameMapper

subset_names = set(['A_0','A_1','A_2','A_3','A_4','A_5','A_6','A_7','A_8','A_9','A_10'])
# list of indices of features X to use in the final model

mapper = DataFrameMapper([
('A_0', PolynomialFeatures(1)),
('A_1', PolynomialFeatures(1)),
('A_2', PolynomialFeatures(1)),
('A_3', PolynomialFeatures(1)),
('A_4', PolynomialFeatures(1)),
('A_5', PolynomialFeatures(1)),
('A_11 - A_66', ?)]) ## PROBLEMATIC PART
 

Ответ №1:

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

 cols_map = [...] # list of columns to map
cols_drop = [...] # list of columns to drop
XW_db = XW_db.drop(cols_drop, axis=1) # you're left with only what to map
mapper = DataFrameMapper(cols_map)
...
 

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

 df2 = df1.drop(cols_drop2,axis=1) # df2 is a subset of df1
df3 = df1.drop(cols_drop3,axis=1) # df3 is a subset of df1
# Alternative is to decide what to keep instead of what to drop
df4 = df1[cols_keep] # df4 is a subset of df1
# df1 remains the full dataframe    
 

Комментарии:

1. спасибо за ответ. На самом деле причина, по которой я их не отбрасываю, заключается в том, что позже я использую метод, который берет весь объект (в данном случае mapper) и использует для него fit_transform . Суть и сложность в том, что я должен использовать featurizer для их удаления.