高效的决策树修剪

数据挖掘 Python scikit-学习 决策树 修剪
2022-02-19 02:21:27

有没有一种有效的方法来使用 Python 处理决策树中的修剪?

目前我正在这样做:

def do_best_tree(Xtrain, ytrain, Xtest, ytest):
    clf = DecisionTreeClassifier()
    clf.fit(Xtrain, ytrain)
    path = clf.cost_complexity_pruning_path(Xtrain, ytrain)
    ccp_alphas = path.ccp_alphas
    clfs = []
    for ccp_alpha in tqdm(ccp_alphas):
        clf = DecisionTreeClassifier(ccp_alpha=ccp_alpha)
        clf.fit(Xtrain, ytrain)
        clfs.append(clf)
    return max(clfs, key=lambda x:x.score(Xtest, ytest))

但它超级慢(因为我创建并适应了很多树)。

使用 scikit-learn 或其他处理此问题的库是否有更有效的方法?

1个回答

您可能会受益于随机森林,它旨在实现您所追求的相同目标,即通过修剪来更好地泛化以消除过度拟合。

scikit learn 的随机森林算法将允许您指定要自动删除的变量的数量或比例,这些变量的结果将被平均以获得更好的泛化性能。