为什么AdaBoost不能与DecisionTree一起工作



我将sklearn 0.19.1与DecisionTree和AdaBoost一起使用。

我有一个工作良好的决策树分类器:

clf = tree.DecisionTreeClassifier()
train_split_perc = 10000
test_split_perc = pdf.shape[0] - train_split_perc
train_pdf_x = pdf[:train_split_perc]
train_pdf_y = YY[:train_split_perc]
test_pdf_x = pdf[-test_split_perc:]
test_pdf_y = YY[-test_split_perc:]
clf.fit(train_pdf_x, train_pdf_y)
pred2 = clf.predict(test_pdf_x)

但当试图添加AdaBoost时,它在预测函数上抛出了一个错误:

treeclf = tree.DecisionTreeClassifier(max_depth=3)
adaclf = AdaBoostClassifier(base_estimator=treeclf, n_estimators=500, learning_rate=0.5)
train_split_perc = 10000
test_split_perc = pdf.shape[0] - train_split_perc
train_pdf_x = pdf[:train_split_perc]
train_pdf_y = YY[:train_split_perc]
test_pdf_x = pdf[-test_split_perc:]
test_pdf_y = YY[-test_split_perc:]
adaclf.fit(train_pdf_x, train_pdf_y)
pred2 = adaclf.predict(test_pdf_x)

具体来说,错误显示:

ValueError: bad input shape (236821, 6)

它似乎指向的数据集是train_pdf_y,因为它的形状是(236821, 6),我不明白为什么。

从文档中对AdaBoostClassifier的描述中,我可以理解使用数据的实际分类器是DecisionTree:

AdaBoost 1分类器是一种元估计器,它以拟合开始在原始数据集上使用分类器,然后拟合其他副本的权重对分类错误的实例进行调整,以便分类器更多地关注困难情况

但我还是收到了这个错误。

在我发现的代码示例中,甚至在sklearn的网站上,关于如何使用AdaBoost,我都不明白自己做错了什么。

感谢您的帮助。

在给定y的形状的情况下,您似乎正在尝试执行多输出分类问题,否则,将n维y馈送到adaclf.fit(train_pdf_x, train_pdf_y)是没有意义的。

因此,假设是这样的话,问题是Scikit Learn的DecisionTreeClassifier确实支持多输出问题,即形状为[n_samples, n_outputs]y输入。然而,AdaBoostClassifier的情况并非如此,因为从文档来看,标签必须是:

y:形状类似数组=[n_samples]

相关内容

  • 没有找到相关文章

最新更新