我正在尝试通过堆叠进行文本分类。我是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方法尝试相同操作时,我没有这个问题。 有什么问题的想法吗?
谢谢!