我试图在最后一个线性回归估计器拟合之前,使用列“y”中的值来转换列“X”(这是一个玩具示例,只是为了演示如何使用y
进行转换)。但是为什么df['y']
没有传递给MyTransformer
?在
from sklearn.base import TransformerMixin
class MyTransformer(TransformerMixin):
def __init__(self):
pass
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
print(y)
return X + np.sum(y)
df = pd.DataFrame(np.array([[2, 3], [1, 5], [1, 1], [5, 6], [1, 2]]), columns=['X', 'y'])
pip = Pipeline([('my_transformer', MyTransformer()),
('sqrt', FunctionTransformer(np.sqrt, validate=False)),
('lr', LinearRegression())])
pip.fit(df[['X']], df['y'])
运行此脚本将在return X + np.sum(y)
行引发一个错误,看起来y是None
。在
如前所述,fit_变换方法不会将y传递给变换。我之前所做的是实现我自己的fit_转换。不是你的代码,但下面是我最近写的一个例子:
还有其他方法。可以将y作为类参数,并在transform方法中访问它。在
编辑:我要注意的是,你可以把y传递给你的转换版本。所以:
^{pr2}$transformerMini中的以下语句将执行,我们可以看到transform函数只需要X参数
相关问题 更多 >
编程相关推荐