gpt4 book ai didi

python - sklearn 管道的正确用法

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:04 25 4
gpt4 key购买 nike

我在 python 中有一个数据框,它有一个名为“datetime”的日期时间文件。使用 Pipeline 和 FeatureUnion 我正在尝试提取日、月、工作日和 isBusinessday。为了提取这些功能,我编写了自定义代码。

我正在使用以下代码提取日、月、工作日和 isBusinessday

class itemselector(BaseEstimator, TransformerMixin):
def __init__(self, key):
self.key = key

def transform(self, X):
return X[self.key]

def fit(self, X, y=None):
return self


f_df = Pipeline([

('union', FeatureUnion([
('date', Pipeline([
('sitem', itemselector('pickup_datetime')),
('sday', Extract_date()),
])),
('month', Pipeline([
('sitem', itemselector('pickup_datetime')),
('smonth', Extract_month()),
])),
])),

])

当我运行这段代码时,我得到了一个列表作为输出。比如说:

df = f_df.fit_transform(df_train[:5])

输出:

[14 12 19  6 26  3  6  1  4  3]  // it has both day and month.  it is not expected output 

但我的日期和月份都是独立的功能。我怎样才能做到这一点 ?我的代码出了什么问题?谁能帮我找到它?

更新

总结我的问题,我得到输出形状 (10,) 但我希望我的输出是 (5,2)

更新 1 根据要求我添加了必要的代码

class Extract_date(BaseEstimator, TransformerMixin):
def fit(self, X):
print('one')
return self

def transform(self, X):
return X.apply(lambda y: y.day)


class Extract_month(BaseEstimator, TransformerMixin):
def fit(self, X, **atr):
print('two')
return self

def transform(self, X):
return X.apply(lambda y: y.month)

最佳答案

好的,Extract_monthExtract_date 返回一个系列,它是一维向量,因此 FeatureUnion 没有正确堆叠它们。对于 FeatureUnion,您需要来自每个内部转换器的具有相同行数的二维数据。

为此,您可以使用 reshape(-1,1)

所以像这样改变你的方法:

class Extract_date(BaseEstimator, TransformerMixin):
...
...

def transform(self, X):
return X.apply(lambda y: y.day).values.reshape(-1,1)


class Extract_month(BaseEstimator, TransformerMixin):
...
...

def transform(self, X):
return X.apply(lambda y: y.month).values.reshape(-1,1)

现在输出应该是正确的。如果还有任何问题,请随时询问。

关于python - sklearn 管道的正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45711199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com