python - Python Typeerror:所有中间步骤都应该是转换器并实现拟合和转换
问题描述
我目前正在阅读 Aurélien Géron 的“Hands-On Machine Learning with Scikit-Learn and TensorFlow”一书。当我运行以下代码(我复制的)时,我收到一条错误消息。错误信息似乎很清楚,但老实说我还是不明白。显然,我缺乏理解,但即使经过大量审查,我也找不到问题所在。有人可以帮忙吗?
from sklearn.base import BaseEstimator, TransformerMixin
rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6
class CombinedAttributesAdder(BaseEstimator, TransformerMixin):
def __init__( self, add_bedrooms_per_room = True): # no *args or ** kargs
self.add_bedrooms_per_room = add_bedrooms_per_room
def fit(self, X, y = None):
return self # nothing else to do
def transform(self, X):
rooms_per_household = X[:, rooms_ix] / X[:, households_ix]
population_per_household = X[:, population_ix] / X[:, households_ix]
if self.add_bedrooms_per_room:
bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]
return np.c_[X, rooms_per_household, population_per_household, bedrooms_per_room]
else:
return np.c_[X, rooms_per_household, population_per_household]
attr_adder = CombinedAttributesAdder(add_bedrooms_per_room = False)
housing_extra_attribs = attr_adder.transform(housing.values)
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
num_pipeline = Pipeline([('imputer', SimpleImputer(strategy ="median")), ('attribs_adder', CombinedAttributesAdder()), ('std_scaler', StandardScaler()),])
housing_num_tr = num_pipeline.fit_transform(housing_num)
错误信息:
-------------------------------------------------- ------------------------- TypeError Traceback (last last call last) in 20 from sklearn.pipeline import Pipeline 21 from sklearn.preprocessing import StandardScaler -- -> 22 num_pipeline = Pipeline([('imputer', SimpleImputer(strategy ="median")), ('attribs_adder', CombinedAttributesAdder()), ('std_scaler', StandardScaler()),]) 23 Housing_num_tr = num_pipeline。 fit_transform(housing_num)
~\Miniconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs) 70 FutureWarning) 71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 72 返回 f(**kwargs) 73 返回 inner_f 74
~\Miniconda3\lib\site-packages\sklearn\pipeline.py in init (self, steps, memory, verbose) 112 self.memory = memory 113 self.verbose = verbose --> 114 self._validate_steps() 115 116 def get_params(自我,深=真):
~\Miniconda3\lib\site-packages\sklearn\pipeline.py in _validate_steps(self) 157 if (not (hasattr(t, "fit") or hasattr(t, "fit_transform")) 或 not 158 hasattr(t, "transform")): --> 159 raise TypeError("所有中间步骤应该是" 160 "转换器并实现fit和transform " 161 "或者是字符串'passthrough' "
TypeError:所有中间步骤都应该是转换器并实现拟合和转换,或者是字符串'passthrough''CombinedAttributesAdder()'(类型< class'main .CombinedAttributesAdder'>)不
提前谢谢了!
解决方案
对我来说,问题可能出在你的缩进错误(除非它只是一个错误的输入)。方法fit()
和transform()
没有正确缩进(attr_adder
和housing_extra_attribs
赋值也是如此)。这样CombinedAttributesAdder
,您在管道中使用的类的实例不是导致错误的转换器。
推荐阅读
- android - 尝试运行命令“flutter run”时出错
- java - 在二维数组中添加行、列、对角线(java)
- wpf - 为什么这个 WPF 动画只触发一次?
- azure - 通过 Azure AD 和 APIM 使用身份验证和 RBAC 保护 APIM API 和 Azure Functions 应用
- firebase - 如何每天通过某些 Firebase 谷歌云功能检查计算时间使用情况,即(GB-Seconds 和 GHz-Seconds)?
- json - 如何使用 xidel 从 json 文件中提取精确值?
- beautifulsoup - 如何从 URL 获取 JSON 文件的正确路径?
- powershell - Powershell:在 Azure Pipeline 中调用 Get-AzureRMKeyVault 时引发“InvalidOperation”错误
- reactjs - 添加项目时无限滚动滚动闪烁
- amazon-web-services - 如何查看 AWS Cloudwatch 应用程序日志的全部内容?