问题描述
在我的项目中,我使用了一个自定义变压器,该变压器创建了特征和目标。 但是我可能无法建立管道来使用它,可能是因为它返回了一个元组。
示例代码:
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 (将#修改为@)