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

我有一个可以正常工作的DecisionTree分类器:

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 in the docs的描述中,我可以了解到,使用数据的实际分类器是DecisionTree:


  AdaBoost 1分类器是一个以拟合开始的元估计器
  原始数据集上的分类器,然后拟合其他副本
  分类器在同一数据集上的权重
  调整了错误分类的实例,以便后续
  分类者更多地关注困难情况


但是我仍然遇到这个错误。

code examples I've found中,即使在sklearn的网站上也有关于如何使用AdaBoost的信息,我无法理解我在做什么错。

任何帮助表示赞赏。

最佳答案

在给定形状为y的情况下,您似乎正在尝试执行Multi-Output classification problem,否则将n维y馈送到adaclf.fit(train_pdf_x, train_pdf_y)并没有意义。

因此,假设是这种情况,问题在于Scikit-Learn的DecisionTreeClassifier确实支持多输出问题,即形状为y[n_samples, n_outputs]输入。但是,AdaBoostClassifier并非如此,因为从文档中,标签必须为:


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

关于python - 为什么AdaBoost无法与DecisionTree一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54183099/

10-11 08:54