我将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的信息,我也不知道自己在做什么错。
感谢您的帮助。
答案 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]