如何解决建立用于功能工程,目标提取和预测的scikit学习管道
假设我有一个要转换的数据源,我要从中提取预测目标并最后训练一个预测模型。例如,假设我的数据是:
import pandas as pd
from sklearn.base import BaseEstimator,TransformerMixin
raw_data = pd.DataFrame({"foo": range(10)})
首先,我想创建一个新功能,它是foo
的缩放版本。由于比例因子是模型的超参数,因此我将其写为转换器:
class FeatEng1(BaseEstimator,TransformerMixin):
def __init__(self,factor):
self.factor = factor
def fit(self,X,y=None,**fit_params):
return self
def transform(self,**transform_params):
X["eng_foo"] = self.factor * X["foo"]
return X
接下来,我要提取我的预测目标(从数据中是)。因此,我编写了以下转换器:
class GetTarget(BaseEstimator,n_trim):
self.n_trim = n_trim
def fit(self,**fit_params):
return self
def transform(self,**transform_params):
X = X[self.n_trim:-self.n_trim]
return X,X["foo"].sample(frac=1)
请注意,目标提取也在行使某种逻辑并定义了另一个超参数。 现在,我可以建立一个管道:
pipeline = Pipeline(
(
("feat_eng",FeatEng1(3.14)),("target",GetTarget(n_trim=2))
)
)
X,y = pipeline.transform(raw_data)
其中X
是:
foo eng_foo
2 2 6.28
3 3 9.42
4 4 12.56
5 5 15.70
6 6 18.84
7 7 21.98
和y
是:
3
2
6
7
5
4
现在是时候进行预测了。我可以轻松地训练像这样的模型:
reg = DummyRegressor()
reg.fit(X,y)
我的问题是如何将两个部分缝合到一个管道中?尝试定义:
full_pipeline= Pipeline(
(
("feat_eng",GetTarget(n_trim=2)),("pred",DummyRegressor())
)
)
不起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。