有没有一种方法可以使sklearn管道与返回元组对象的Custom Transformer一起工作?

问题描述

在我的项目中,我使用了一个自定义变压器,该变压器创建了特征和目标。 但是我可能无法建立管道来使用它,可能是因为它返回了一个元组

示例代码

import numpy as np
import pandas as pd
import random
from sklearn.linear_model import LinearRegression
np.random.seed(1)

class CustomTransformer(BaseEstimator,TransformerMixin):

    def fit(self,X,y = None,max_lag = None):
        return self
    
    def transform(self,max_lag = None):
        X = X.resample('1H').sum()
        X['year'] = X.index.year
        X['detrend'] = X.num_orders.shift() - X.num_orders
        
        if max_lag:
            for lag in range(1,max_lag + 1):
                X['lag_{}'.format(lag)] = X['detrend'].shift(lag)

        X = X.dropna()
        
        y = X.num_orders
        X = X.drop('num_orders',1)

        return X.values,y.values
        
rows,cols = 10,1
data = np.random.randint(100,size = (rows,cols))
tidx = pd.date_range('2019-01-01',periods=rows,freq='20min') 
df = pd.DataFrame(data,columns=['num_orders'],index=tidx)

pipe = Pipeline([
                   ('features',MakeFeatures()),('scaler',StandardScaler())    
                  ])

pipe.fit_transform(df,df,features__max_lag = 2 )

出局:

ValueError: Could not broadcast input array from shape (3,1) into shape (3)

我确定管道是功能链的高级构建,我做了一个,它工作正常,但看起来很丑陋(我还添加了LinearRegression):

s = StandardScaler()

model = LinearRegression()

model.fit(s.fit_transform(
                    CustomTransformer().transform(df,max_lag = 2)[0]),CustomTransformer().transform(df,max_lag = 2)[1]) 

model.predict(CustomTransformer().transform(df,max_lag = 2)[0])

退出array([1.])

有没有办法创建这样的管道?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)