如何通过步骤名称从列表中删除sklearn Pipeline的预处理步骤
问题原因
Python原生列表的pop()方法仅支持传入整数索引作为参数,你传入的步骤名称是字符串类型,不符合参数要求,因此代码运行时会抛出异常。
解决方案
方法1:操作原始预处理步骤列表删除
遍历列表匹配步骤名称,找到对应索引后执行删除操作:
from sklearn.preprocessing import MaxAbsScaler from sklearn.pipeline import Pipeline preprocessing=[] preprocessing.append(('maxabs_scaler', MaxAbsScaler(copy=1))) pipe=Pipeline(preprocessing) # 通过名称匹配删除列表中的步骤 for index, (step_name, _) in enumerate(preprocessing): if step_name == "maxabs_scaler": preprocessing.pop(index) # 如需删除所有同名步骤可删除下方的break break print(preprocessing)
方法2:直接操作Pipeline对象删除
如果已经初始化Pipeline,不需要操作原始列表,可直接通过Pipeline内置属性删除:
适配所有scikit-learn版本的写法
# 匹配到对应步骤后从steps列表移除 target_step = next(step for step in pipe.steps if step[0] == "maxabs_scaler") pipe.steps.remove(target_step) print(pipe.steps)
scikit-learn 0.23及以上版本简化写法
直接通过named_steps属性用del关键字删除:
del pipe.named_steps["maxabs_scaler"] print(pipe.steps)
内容的提问来源于stack exchange,提问作者Ctrl7
相关产品推荐
相关产品推荐

