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