python - sklearn 管道的正确用法

标签 python pandas scikit-learn pipeline

我在 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/

相关文章:

python - 将日期时间限制为下一刻钟

python - 如何根据条件合并两个数据集

python - to_excel() 没有索引布局

欧氏距离的python数据帧矩阵

python - 每次运行 RandomForestRegressor 时都会得到不同的结果

machine-learning - 逻辑回归模型 LogisticRegression 中的内核 scikit-learn sklearn

python - 使用 Python 获取 Wikipedia 文章

python - 运行 scrapy Spider 后设置/配置输出文件

python - 如何在 Heroku 上的特定目录 (/app/assets/chromedriver) 中安装 chromedriver?

python - 如何使用 scikit-learn 对大文本数据进行分类?