#python #scikit-learn #pipeline
Вопрос:
Я изучал предварительную обработку и конвейеры sklearn и столкнулся с концепцией FunctionTransformer. Я хочу понять, нужно ли интегрировать его в конвейер и передавать аргументы функции, на которую ссылается FunctionTransformer, как бы это было сделано. Рассмотрим пример ниже, для простоты я написал небольшую функцию:
def return_selected_dataset(dataset, columns):
return dataset[columns]
pipe = Pipeline([('Return_Col', FunctionTransformer(return_selected_dataset))])
pipe.fit_transform(dataset, columns = ['Col1', 'Col2'])
Я получаю следующую ошибку:
ValueError: Pipeline.fit does not accept the columns parameter. You can pass parameters to specific steps of your pipeline using the stepname__parameter format, e.g. `Pipeline.fit(X, y, logisticregression__sample_weight=sample_weight)`.
Как я могу передать значение columns
функции? Кроме того, может ли кто-нибудь предложить какую-либо книгу или веб-сайт, где я могу подробно изучить конвейеры и предварительную обработку sklearn и как настроить эти процессы?
Ответ №1:
Пример набора данных:
import numpy as np
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import Pipeline
import pandas as pd
X = pd.DataFrame({'Col1':[1,2],'Col2':[3,4],'Col3':[5,6]})
Ваша функция:
def return_selected_dataset(dataset, columns):
return dataset[columns]
Без трубопровода это было бы похоже на:
FunctionTransformer(return_selected_dataset,
kw_args={'columns':['Col1','Col2']}).transform(X)
Примечание. С помощью конвейера вы можете передавать параметры только для каждого шага подгонки,
см. страницу справки:
**fit_paramsdict параметров строки -> объекта, передаваемых методу fit каждого шага, где имя каждого параметра имеет префикс, так что параметр p для шага s имеет ключ s__p.
Поэтому я думаю, что вы можете сделать вот что:
pipe = Pipeline([
('Return_Col',
FunctionTransformer(return_selected_dataset,
kw_args={'columns':['Col1','Col2']})
)
])
pipe.fit_transform(X)
Col1 Col2
0 1 3
1 2 4