为什么AdaBoost无法与DecisionTree一起使用?

时间:2019-01-14 14:09:35

标签: python machine-learning scikit-learn decision-tree adaboost

我将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的信息,我也不知道自己在做什么错。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在给定ORA-20999: Oracle ERROR:: ORA-29478: Implicit result cannot be returned through this statement ORA-06512: at 'XXXX.UTILS", line 2019 ORA-06512: at "XXXX.OFFICE_HIERARCHY", line 39 形状的情况下,您似乎正在尝试执行Multi-Output classification problem,否则,将y和n维y馈给{{ 1}}。

因此,假设是这样,问题是Scikit-Learn的DecisionTreeClassifier确实支持多输出问题,即adaclf.fit(train_pdf_x, train_pdf_y)的形状为y的输入。但是,AdaBoostClassifier并非如此,因为从文档中,标签必须为:

  

y :形状类似数组,形状为[n_samples]