无法将Metaclassifier与StackingCVClassifier配合使用

时间:2019-10-10 13:37:33

标签: python machine-learning ensemble-learning mlxtend

我正在尝试通过堆叠进行文本分类。我是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都适合,但堆栈分类器不适合,并且出现以下错误:

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

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

当我使用StackingClassifier方法尝试相同操作时,我没有这个问题。 有什么问题的想法吗?

谢谢!

0 个答案:

没有答案