рдЬрдм рдореИрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдХреЙрд▓рдо (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ, рд╢реНрд░реЗрдгреА, рдЯреЗрдХреНрд╕реНрдЯ рд╢рд╛рдорд┐рд▓) рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЕрдВрддрд┐рдо рд░реВрдкрд╛рдВрддрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдлреАрдЪрд░ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИред
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
titanic_url = ('https://raw.githubusercontent.com/amueller/'
'scipy-2017-sklearn/091d371/notebooks/datasets/titanic3.csv')
data = pd.read_csv(titanic_url)
target = data.pop('survived')
numeric_columns = ['age','sibsp','parch']
category_columns = ['pclass','sex','embarked']
text_columns = ['name','home.dest']
numeric_transformer = Pipeline(steps=[
('impute',SimpleImputer(strategy='median')),
('scaler',StandardScaler()
)
])
category_transformer = Pipeline(steps=[
('impute',SimpleImputer(strategy='constant',fill_value='missing')),
('ohe',OneHotEncoder(handle_unknown='ignore'))
])
text_transformer = Pipeline(steps=[
('cntvec',CountVectorizer())
])
preprocesser = ColumnTransformer(transformers=[
('numeric',numeric_transformer,numeric_columns),
('category',category_transformer,category_columns),
('text',text_transformer,text_columns[0])
])
preprocesser.fit_transform(data)
preprocesser.get_feature_names()
рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА:AttributeError: Transformer numeric (type Pipeline) does not provide get_feature_names.
ColumnTransformer
я╝М text_transformer
рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЬреИрд╕реЗ 'рд╕реЗрдХреНрд╕') рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди text_columns
рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕реВрдЪреА рдирд╣реАрдВрдпрд╣ рдХреЙрд▓рдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
eli5
рдПрдХ рдлреАрдЪрд░ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред2 рд░реБрдкрдпреЗред рд╢рд╛рдпрдж рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдорд┐рддреНрд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдл рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд╛рдЙрдВрдЯрд╡реЗрдХреНрдЯрд░ рдЖрджрд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рдХрдИ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗред
рдпрд╣ рдХреЙрд▓рдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
eli5
рдПрдХ рдлреАрдЪрд░ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред2 рд░реБрдкрдпреЗред рд╢рд╛рдпрдж рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдорд┐рддреНрд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдл рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд╛рдЙрдВрдЯрд╡реЗрдХреНрдЯрд░ рдЖрджрд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рдХрдИ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗред
рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдорд▓реНрдЯреА-рдХреЙрд▓рдо рдЬреИрд╕реЗ OneHotEncoder
, CountVectorizer
, рддреЛ рдореИрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рдирдП рдбреЗрдЯрд╛ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди get_feature_names
, рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬреЛ рдирдП рдХреЙрд▓рдо рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХрдЪреНрдЪреЗ рдХреЙрд▓рдо рдирд╛рдо рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
def get_column_names_from_ColumnTransformer(column_transformer):
col_name = []
for transformer_in_columns in column_transformer.transformers_[:-1]:#the last transformer is ColumnTransformer's 'remainder'
raw_col_name = transformer_in_columns[2]
if isinstance(transformer_in_columns[1],Pipeline):
transformer = transformer_in_columns[1].steps[-1][1]
else:
transformer = transformer_in_columns[1]
try:
names = transformer.get_feature_names()
except AttributeError: # if no 'get_feature_names' function, use raw column name
names = raw_col_name
if isinstance(names,np.ndarray): # eg.
col_name += names.tolist()
elif isinstance(names,list):
col_name += names
elif isinstance(names,str):
col_name.append(names)
return col_name
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ рдЕрдкрдиреЗ preprocesser
рдХреЗ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдпреЗ рдХреЛрдб рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ?
eli5 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ eli5 рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ?
eli5 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, transform_feature_names рджреЗрдЦреЗрдВ (explain_weights рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреБрдХреНрдд)
1 #6425 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ, рд╣реИ рдирд╛? рдореИрдВ рдЙрд╕ рдкрд░ рдПрдХ рдиреАрдВрдж рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ColumnTransformer
рд╕рд╛рде рдПрдХрд╛рдзрд┐рдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рдЙрдВрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдЖрдкрдХрд╛ рд╕реНрдирд┐рдкреЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд╣реАрдВ get_feature_names
рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
1 #6425 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ, рд╣реИ рдирд╛? рдореИрдВ рдЙрд╕ рдкрд░ рдПрдХ рдиреАрдВрдж рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ColumnTransformer
рд╕рд╛рде рдПрдХрд╛рдзрд┐рдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рдЙрдВрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВредрдФрд░ рдЖрдкрдХрд╛ рд╕реНрдирд┐рдкреЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд╣реАрдВ
get_feature_names
рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдБ, рдПрдХ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдлрд╝реАрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлреАрдЪрд░ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рд╕реЗ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛ред
рдареАрдХ рд╣реИ, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдХреЙрд▓рдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
eli5
рдПрдХ рдлреАрдЪрд░ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред2 рд░реБрдкрдпреЗред рд╢рд╛рдпрдж рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдорд┐рддреНрд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдл рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд╛рдЙрдВрдЯрд╡реЗрдХреНрдЯрд░ рдЖрджрд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рдХрдИ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗред
рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдорд▓реНрдЯреА-рдХреЙрд▓рдо рдЬреИрд╕реЗOneHotEncoder
,CountVectorizer
, рддреЛ рдореИрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рдирдП рдбреЗрдЯрд╛ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рдиget_feature_names
, рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬреЛ рдирдП рдХреЙрд▓рдо рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХрдЪреНрдЪреЗ рдХреЙрд▓рдо рдирд╛рдо рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредdef get_column_names_from_ColumnTransformer(column_transformer): col_name = [] for transformer_in_columns in column_transformer.transformers_[:-1]:#the last transformer is ColumnTransformer's 'remainder' raw_col_name = transformer_in_columns[2] if isinstance(transformer_in_columns[1],Pipeline): transformer = transformer_in_columns[1].steps[-1][1] else: transformer = transformer_in_columns[1] try: names = transformer.get_feature_names() except AttributeError: # if no 'get_feature_names' function, use raw column name names = raw_col_name if isinstance(names,np.ndarray): # eg. col_name += names.tolist() elif isinstance(names,list): col_name += names elif isinstance(names,str): col_name.append(names) return col_name
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ рдЕрдкрдиреЗ
preprocesser
рдХреЗ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдпреЗ рдХреЛрдб рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ?
eli5 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ eli5 рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ?
рдореИрдВрдиреЗ onehot рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП rawname_value рдЬреИрд╕реЗ рдирд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡реГрджреНрдзрд┐ рдХреА рд╣реИ:
def get_column_names_from_ColumnTransformer(column_transformer):
col_name = []
for transformer_in_columns in column_transformer.transformers_[:-1]:#the last transformer is ColumnTransformer's 'remainder'
raw_col_name = transformer_in_columns[2]
raw_col_name_reverse = raw_col_name[::-1]
if isinstance(transformer_in_columns[1],Pipeline):
transformer = transformer_in_columns[1].steps[-1][1]
else:
transformer = transformer_in_columns[1]
try:
names = transformer.get_feature_names()
exchange_name = [(_.split("_")) for _ in preprocessor.transformers_[:-1][0][1].steps[-1][1].get_feature_names()]
last_pre_name = ""
last_raw_name = ""
for pre_name,value in exchange_name:
if pre_name==last_pre_name:
col_name.append(last_raw_name+"_"+value)
if pre_name!=last_pre_name:
last_pre_name=pre_name
last_raw_name=raw_col_name_reverse.pop()
col_name.append(last_raw_name+"_"+value)
except AttributeError: # if no 'get_feature_names' function, use raw column name
names = raw_col_name
if isinstance(names,np.ndarray): # eg.
col_name += names.tolist()
elif isinstance(names,list):
col_name += names
elif isinstance(names,str):
col_name.append(names)
return col_name
рдпрд╣ рдХреЙрд▓рдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
eli5
рдПрдХ рдлреАрдЪрд░ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред2 рд░реБрдкрдпреЗред рд╢рд╛рдпрдж рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдорд┐рддреНрд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдл рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд╛рдЙрдВрдЯрд╡реЗрдХреНрдЯрд░ рдЖрджрд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рдХрдИ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗред
рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдорд▓реНрдЯреА-рдХреЙрд▓рдо рдЬреИрд╕реЗOneHotEncoder
,CountVectorizer
, рддреЛ рдореИрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рдирдП рдбреЗрдЯрд╛ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рдиget_feature_names
, рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬреЛ рдирдП рдХреЙрд▓рдо рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХрдЪреНрдЪреЗ рдХреЙрд▓рдо рдирд╛рдо рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредdef get_column_names_from_ColumnTransformer(column_transformer): col_name = [] for transformer_in_columns in column_transformer.transformers_[:-1]:#the last transformer is ColumnTransformer's 'remainder' raw_col_name = transformer_in_columns[2] if isinstance(transformer_in_columns[1],Pipeline): transformer = transformer_in_columns[1].steps[-1][1] else: transformer = transformer_in_columns[1] try: names = transformer.get_feature_names() except AttributeError: # if no 'get_feature_names' function, use raw column name names = raw_col_name if isinstance(names,np.ndarray): # eg. col_name += names.tolist() elif isinstance(names,list): col_name += names elif isinstance(names,str): col_name.append(names) return col_name
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ рдЕрдкрдиреЗ
preprocesser
рдХреЗ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдпреЗ рдХреЛрдб рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ?
eli5 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ eli5 рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ?
рдпрджрд┐ рдЖрдк рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ add_indicator рдХреЗ рд╕рд╛рде simpleimputer рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рддрд░реАрдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ add_indicator рдХреЗ рд╕рд╛рде simpleimputer рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рддрд░реАрдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП get_feature_names рд╡рд┐рдзрд┐ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ add_indicator рдХреЗ рд╕рд╛рде simpleimputer рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рддрд░реАрдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрд╣рд╛рдБ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдореЗрд░рд╛ рдпреЛрдЧрджрд╛рди рд╣реИред рдпрд╣ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ SimpleImputer(add_indicate=True) рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд░реНрдмреЛрдЬрд╝ рднреА рд╣реИред
def get_column_names_from_ColumnTransformer(column_transformer):
col_name = []
for transformer_in_columns in column_transformer.transformers_[:-1]: #the last transformer is ColumnTransformer's 'remainder'
print('\n\ntransformer: ', transformer_in_columns[0])
raw_col_name = list(transformer_in_columns[2])
if isinstance(transformer_in_columns[1], Pipeline):
# if pipeline, get the last transformer
transformer = transformer_in_columns[1].steps[-1][1]
else:
transformer = transformer_in_columns[1]
try:
if isinstance(transformer, OneHotEncoder):
names = list(transformer.get_feature_names(raw_col_name))
elif isinstance(transformer, SimpleImputer) and transformer.add_indicator:
missing_indicator_indices = transformer.indicator_.features_
missing_indicators = [raw_col_name[idx] + '_missing_flag' for idx in missing_indicator_indices]
names = raw_col_name + missing_indicators
else:
names = list(transformer.get_feature_names())
except AttributeError as error:
names = raw_col_name
print(names)
col_name.extend(names)
return col_name
рдПрдлрд╡рд╛рдИрдЖрдИ, рдореИрдВрдиреЗ рдЬрдЯрд┐рд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдФрд░ рдХреЙрд▓рдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░реНрд╕ рд╕реЗ рдлреАрдЪрд░ рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХреЛрдб рдФрд░ рдмреНрд▓реЙрдЧ рд▓рд┐рдЦрд╛ рдерд╛ред рдХреЛрдб рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдкрд░ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реИред https://towardsdatascience.com/extracting-plotting-feature-names-importance-from-scikit-learn-pipelines-eb5bfa6a31f4
@kylegilde рдорд╣рд╛рди рд▓реЗрдЦ рдФрд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓рд╢реИрдк рдФрд░ рдРрд▓рд┐рдмреА рдХреЗ рд╕рд╛рде рдХреБрд╢реНрддреА рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╡рдирд╣реЙрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ handle_unkown='ignore'
рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛
рдпрд╣рд╛рдВ @pjgao рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдорд╛рдЗрдВрдбрд░ рдХреЗ рдХреЙрд▓рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
def get_columns_from_transformer(column_transformer, input_colums):
col_name = []
for transformer_in_columns in column_transformer.transformers_[:-1]: #the last transformer is ColumnTransformer's 'remainder'
raw_col_name = transformer_in_columns[2]
if isinstance(transformer_in_columns[1],Pipeline):
transformer = transformer_in_columns[1].steps[-1][1]
else:
transformer = transformer_in_columns[1]
try:
names = transformer.get_feature_names(raw_col_name)
except AttributeError: # if no 'get_feature_names' function, use raw column name
names = raw_col_name
if isinstance(names,np.ndarray): # eg.
col_name += names.tolist()
elif isinstance(names,list):
col_name += names
elif isinstance(names,str):
col_name.append(names)
[_, _, reminder_columns] = column_transformer.transformers_[-1]
for col_idx in reminder_columns:
col_name.append(input_colums[col_idx])
return col_name
рдХреЛрд░ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдХреЙрд▓рдо рдХреЛ рдорд▓реНрдЯреА-рдХреЙрд▓рдо рдЬреИрд╕реЗ
OneHotEncoder
,CountVectorizer
, рддреЛ рдореИрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рдирдП рдбреЗрдЯрд╛ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рдиget_feature_names
, рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬреЛ рдирдП рдХреЙрд▓рдо рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХрдЪреНрдЪреЗ рдХреЙрд▓рдо рдирд╛рдо рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ рдЕрдкрдиреЗ
preprocesser
рдХреЗ рдХреЙрд▓рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВредрдХреНрдпрд╛ рдпреЗ рдХреЛрдб рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ?
eli5 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ eli5 рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ?