Scikit-learn管道错误:zip参数#2必须支持迭代

8

我正在尝试为sklearn管道创建自定义转换器,该转换器将提取特定文本的平均单词长度,然后对其应用标准缩放器以标准化数据集。 我将一系列文本传递到管道中。

class AverageWordLengthExtractor(BaseEstimator, TransformerMixin):

    def __init__(self):
        pass
    def average_word_length(self, text):
        return np.mean([len(word) for word in text.split( )])
    def fit(self, x, y=None):
        return self
    def transform(self, x , y=None):
        return pd.DataFrame(pd.Series(x).apply(self.average_word_length))

然后我创建了这样一个流水线。

pipeline = Pipeline(['text_length', AverageWordLengthExtractor(), 
                         'scale', StandardScaler()])

当我在这个管道上执行fit_transform时,我遇到了以下错误:
 File "custom_transformer.py", line 48, in <module>
    main()
  File "custom_transformer.py", line 43, in main
    'scale', StandardScaler()])
  File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 114, in __init__
    self._validate_steps()
  File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 146, in _validate_steps
    names, estimators = zip(*self.steps)
TypeError: zip argument #2 must support iteration

请提供Series的结构和执行流程。 - sentence
@sentence,我正在传递一个带有一列的Pandas系列,例如消息(列名) 天气更新-来自古巴的冷锋可能会经过海地 飓风结束了还是没有结束? 寻找某人但没有名字 联合国报告勒高讷80-90被摧毁。只有圣克罗伊医院在运作。急需物资。 说:今天和今晚是海地西部,全国其他地区。 关于国家宫的信息- 请给我们帐篷和水。我们在Silo,谢谢!
现在,我只是试图将其传递到不起作用的管道中。
- anidev711
@anidev711,您需要额外的帮助吗? - Jan K
是的,@JanK你的回答确实帮我解决了那个问题,但现在我又遇到了另一个错误。 File "custom_transformer.py", line 48, in <module> main() File "custom_transformer.py", line 43, in main 'scale', StandardScaler())]) File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 114, in __init__ self._validate_steps() File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 146, in _validate_steps names, estimators = zip(*self.steps) ValueError: too many values to unpack (expected 2) - anidev711
如果您认为新错误与此问题无关,请考虑创建一个新问题并将此问题标记为已解决。 - Jan K
好的,谢谢你的帮助 :) @JanK - anidev711
1个回答

11
Pipeline 构造函数需要一个 steps 参数,它是元组列表。
pipeline = Pipeline([('text_length', AverageWordLengthExtractor()), 
                     ('scale', StandardScaler())])

在官方文档中查找更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接