如何通过循环测试sklearn决策树多组max_depth参数取值
解答
完全可以通过循环批量测试max_depth的不同取值,不需要手动逐个修改参数重跑。
你只需要遍历目标取值区间,每次实例化对应参数的决策树模型、完成训练、记录验证集上的评估指标,最后对比所有结果就能选出表现最优的参数。
针对你要测试10到15区间取值的需求,参考实现代码如下:
from sklearn import tree from sklearn.metrics import accuracy_score # 存储不同max_depth对应的模型和验证集表现 result_record = {} # range是左闭右开区间,要取到15需要把上界设为16 for depth in range(10, 16): # 初始化对应参数的决策树 clf = tree.DecisionTreeClassifier(max_depth=depth) # 训练模型 clf.fit(X_train, y_train) # 在验证集上计算预测效果 val_pred = clf.predict(X_val) val_acc = accuracy_score(y_val, val_pred) # 保存结果 result_record[depth] = { "model": clf, "val_accuracy": val_acc } # 输出所有参数的效果对比 for d, info in result_record.items(): print(f"max_depth = {d},验证集准确率:{info['val_accuracy']:.4f}")
几个需要注意的点:
- 参数筛选过程不要用测试集做评估,会造成数据泄露,必须使用独立划分的验证集;如果想要结果更稳定,也可以在循环里搭配交叉验证计算平均得分。
- 如果后续需要同时测试多个参数的不同取值,不用自己手写多层循环,可以直接用scikit-learn内置的
GridSearchCV做网格搜索,本质也是遍历参数组合,还自带交叉验证逻辑,使用更方便。如果只是单测max_depth这一个参数,上面的手写循环足够轻量好改。
内容的提问来源于stack exchange,提问作者OccamsSafetyRazor
相关产品推荐
相关产品推荐

