Scikit-learn zip 参数 #1 必须支持迭代

Posted

技术标签:

【中文标题】Scikit-learn zip 参数 #1 必须支持迭代【英文标题】:Scikit-learn zip argument #1 must support iteration 【发布时间】:2016-03-11 14:56:11 【问题描述】:

我有以下管道在语料库上执行机器学习。它首先提取文本,使用TfidfVectorizer 提取 n-gram,然后选择最佳特征。在没有特征选择步骤的情况下,管道工作正常。但是,有了它,我得到了

 Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/sklearn/pipeline.py", line 90, in __init__
    names, estimators = zip(*steps)
TypeError: zip argument #1 must support iteration

SGDClassifier().

pipeline = Pipeline([
    # Use FeatureUnion to combine the features
    ('features', FeatureUnion(
        transformer_list=[
            # N-GRAMS
            ('ngrams', Pipeline([
                ('extractor', TextExtractor(normalized=True)), # returns a list of strings
                ('vectorizer', TfidfVectorizer(analyzer='word', strip_accents='ascii', use_idf=True, norm="l2", min_df=3, max_df=0.90)),
                ('feature_selection', SelectPercentile(score_func=chi2, percentile=70)),
            ])),
        ],,
    )),

    ('clf', Pipeline([
        SGDClassifier(n_jobs=-1, verbose=0)
    ])),
])

【问题讨论】:

【参考方案1】:

您似乎错过了管道中的一个标签

('clf', Pipeline([
    SGDClassifier(n_jobs=-1, verbose=0)
])),

应该是

('clf', Pipeline([
    ('sgd', SGDClassifier(n_jobs=-1, verbose=0))
])),

【讨论】:

以上是关于Scikit-learn zip 参数 #1 必须支持迭代的主要内容,如果未能解决你的问题,请参考以下文章

SciKit-Learn 标签编码器导致错误“参数必须是字符串或数字”

Scikit-learn的kmeans聚类

Scikit-learn 在 DecisionTreeClassifier 上使用 GridSearchCV

GBDT scikit-learn相关参数

scikit-learn 查询数据维度必须匹配训练数据维度

交叉验证:来自 scikit-learn 参数的 cross_val_score 函数