sklearn pipeline-применение Весов выборки после применения полиномиального преобразования признаков в конвейере
Я хочу применить веса выборки и в то же время использовать конвейер из sklearn, который должен сделать преобразование функции, например полином, а затем применить регрессор, например ExtraTrees.
Я использую следующие пакеты в двух примерах ниже:
from sklearn.ensemble import ExtraTreesRegressor
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
все работает хорошо, пока я отдельно трансформирую функции и генерирую и тренирую модель впоследствии:
#Feature generation
X = np.random.rand(200,4)
Y = np.random.rand(200)
#Feature transformation
poly = PolynomialFeatures(degree=2)
poly.fit_transform(X)
#Model generation and fit
clf = ExtraTreesRegressor(n_estimators=5, max_depth = 3)
weights = [1]*100 + [2]*100
clf.fit(X,Y, weights)
но делать это в трубопроводе, не работа:
#Pipeline generation
pipe = Pipeline([('poly2', PolynomialFeatures(degree=2)), ('ExtraTrees', ExtraTreesRegressor(n_estimators=5, max_depth = 3))])
#Feature generation
X = np.random.rand(200,4)
Y = np.random.rand(200)
#Fitting model
clf = pipe
weights = [1]*100 + [2]*100
clf.fit(X,Y, weights)
Я получаю следующую ошибку: TypeError: fit() принимает не более 3 аргументов (4 дано) В этом простом примере нет проблем с изменением кода, но когда я хочу запустить несколько разных тестов на моих реальных данных в моем реальном коде, имея возможность использовать конвейеры и образец веса
1 ответов
есть упоминание о **fit_params
на fit
метод Pipeline
документация. Необходимо указать, к какому шагу конвейера вы хотите применить параметр. Вы можете достичь этого, следуя правилам именования в документах:
для этого он позволяет устанавливать параметры различных шагов, используя их имена и имя параметра, разделенные"__", как в примере ниже.
Итак, все, что было сказано, попробуйте изменить последняя строка:
clf.fit(X,Y, **{'ExtraTrees__sample_weight': weights})
это хороший пример как работать с параметрами в трубопроводах.