首页 > 解决方案 > 无法使用 StackingCVClassifier 拟合元分类器

问题描述

我正在尝试使用堆叠执行文本分类。我是 ML 的新手,如果这是一个愚蠢的问题,我深表歉意。我正在尝试在不同的文本特征上训练相同的算法 LogisticRegression 以创建不同的分类器,然后使用元分类器(也是 LogisticRegression)将它们全部加入。我使用的功能是文本中的单词和相应的词性标签。

使用单词作为特征的分类器使用以下管道定义:

lr =LogisticRegression()

words = make_pipeline(ColumnSelector(column='text'), 
                      CountVectorizer(analyzer='word', token_pattern=r'\w{1,}', max_features=5000),                     
                      lr)

使用 POS 作为特征的分类器使用以下管道定义:

pos = make_pipeline(ColumnSelector(column='pos'),
                                    CountVectorizer(binary=True, ngram_range=(2,3), 
                                    max_features=5000),
                                    lr)

最后,元分类器是这样定义的:

sclf = StackingCVClassifier(classifiers=[words, pos], 
                            meta_classifier=lr)

当我尝试训练分类器时,问题就来了:

classifiers = {"Words": words,
               "POS": pos,
               "Stack": sclf}
for key in classifiers:
       classifier = classifiers[key]
       classifier.fit(X_train, Y_train)

单词和 POS 已安装,但 Stack 分类器未安装,我收到以下错误:

IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices

X_train 包含一个数据框,其中包含一个包含原始文本的列“text”和一个包含原始 POS 标签的列“pos”,这就是我通过管道应用所需转换的原因。

当我尝试使用 StackingClassifier 方法时,我没有这个问题。知道出了什么问题吗?

谢谢!

标签: pythonmachine-learningensemble-learningmlxtend

解决方案


推荐阅读