我将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]