我在尝试为房屋数据创建转换管道
from sklearn.base import BaseEstimator, TransformerMixinrooms_ix, bedrooms_ix, population_ix, household_ix = 3,4,5,6class CombineAttributesAdder(BaseEstimator, TransformerMixin): def __init__(self, add_bedrooms_per_room = True): self.add_bedrooms_per_room = add_bedrooms_per_room def fit(self, X, y=None): return self def transfrom(self, X, y=None): rooms_per_househond = X[:,rooms_ix]/X[:,household_ix] population_per_household = X[:,population_ix]/ X[:, household_ix] if self.add_bedrooms_per_room: bedrooms_per_room = X[:,bedrooms_ix]/X[:rooms_ix] return np.c_[X, rooms_per_househond, population_per_household, bedrooms_per_room] else: return np.c_[X, rooms_per_househond, population_per_household]
我用于管道的代码如下:
from sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom imblearn.pipeline import make_pipelinenum_pipline = Pipeline([ ('imputer', SimpleImputer(missing_values=np.nan, strategy='median')), ('attribs_adder', CombineAttributesAdder(add_bedrooms_per_room=False)), ('stand_scaler', StandardScaler()),])housing_num_transform = num_pipline.fit_transform(housing_num)
回答:
在你的CombineAttributesAdder
类的主体中,你拼错了单词transform
。方法定义应该如下所示:
class CombineAttributesAdder(BaseEstimator, TransformerMixin): def __init__(self, add_bedrooms_per_room = True): self.add_bedrooms_per_room = add_bedrooms_per_room def fit(self, X, y=None): return self def transform(self, X, y=None): # <-- 不是 'transfrom' ...
对于每个转换器,Pipeline
对象将调用fit_transform
,这反过来将调用fit
和transform
方法。由于这个拼写错误,程序无法找到相应的方法并抛出错误。