为什么树比增强分类器效果更好?

数据挖掘 分类 scikit-学习
2022-02-15 07:37:00

我预测使用 scikit-learn 编码的 10 个类别标签,有 6 个因素,120 万个案例。DecisionTreeClassifier RandomForestClassifier ExtraTreesClassifier 提供 0.9 的准确度(以及精确度和召回率)

AdaBoostClassifier GradientBoostingClassifier 的精度为 0.2

关于巨大差异的任何指示?

(我正在做gridsearchcv)。代码:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

def output_metrics():
    from sklearn.metrics import accuracy_score, precision_score, recall_score
    print("Accuracy:",accuracy_score(y_test, y_pred))
    print('Precision', precision_score(y_test, y_pred, average=None).mean())
    print('Recall', recall_score(y_test, y_pred, average=None).mean())


from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import GridSearchCV

tree_para =  { 'n_estimators': [16, 32] }
clf = GridSearchCV(AdaBoostClassifier(), tree_para, cv=5)
model= clf.fit(X_train, y_train)

y_pred = clf.predict(X_test) 

output_metrics()
1个回答

作为免责声明,我想指出,在这种特定情况下的性能可能仍取决于所使用的特定数据集。

一个可能的解释在于树和提升算法的本质。

正如@akvall 在评论中指出的那样,Boosting 算法通常会过拟合,因为这是它们的设计初衷!提醒一下,无论提升算法如何工作,它都遵循以下逻辑:

  • 在训练集上训练
  • 评估以查看犯了哪些错误
  • 重新训练并更多地关注以前的错误
  • 重复直到满意的结果

树的工作方式不同,因此不太容易过度拟合。随机森林将简单地计算独立树并使用多数投票进行预测。

每个提升算法都会“提升”一定数量的迭代,看看你的算法做了多少次“提升”可能是明智的。