在上一篇文章中,介绍了Sklearn使用决策树训练分类模型,但在模型构建过程中,出现了拟合的问题。本文主要介绍两种剪枝方式,并使用GridSearchCV网格搜索方式,找到最优参数。

剪枝方法

max_deep:树的最大深度

min_samples_leaf:叶子节点所需的最小样本数,可以是数字也可以是比例

代码示例

classifier1 = DecisionTreeClassifier(max_depth=6)
classifier2 = DecisionTreeClassifier(min_samples_leaf=6)
classifier3 = DecisionTreeClassifier(max_depth=6, min_samples_leaf=6)

OUTPUT

score_train: 0.9378571428571428
score_test: 0.8933333333333333

score_train: 0.9428571428571428
score_test: 0.9066666666666666

score_train: 0.9185714285714286
score_test: 0.9

GridSearchCV

GridSearchCV可以拆分为两个部分,GridSearch(网格搜索)和CV(交叉验证)。网格搜索即在指定的参数范围内,按步长依次调整参数,在所有参数组合中,找到验证精度最高的参数。K折CV验证,即将训练数据分成K份,取其中一份作为验证集,其余K-1份作为训练集,重复k次。

代码示例

from sklearn.model_selection import GridSearchCV

classifier = DecisionTreeClassifier()

params = {
    'max_depth': range(1, 10), 
    'min_samples_leaf': range(1, 20)
}

grid_search = GridSearchCV(
    classifier,
    param_grid = params,
    scoring = 'accuracy',
    cv=5
)

grid_search.fit(data, target)
print(grid_search.best_params_)

# OUTPUT
# {'max_depth': 7, 'min_samples_leaf': 12}

本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/255