当前位置: 首页 > article >正文

【人工智能】【Python】在Scikit-Learn中使用网格搜索对决策树调参

这次实践课最大收获非网格搜索莫属。

# 导入包
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV # 网格搜索
from sklearn.tree import DecisionTreeClassifier, plot_tree
# 导入数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=114514, stratify=y)
# 创建决策树分类器
dtc = DecisionTreeClassifier(criterion="entropy")
# 训练
dtc.fit(X_train, y_train)
print("Train Acc:", dtc.score(X_train, y_train))
print("Test Acc:", dtc.score(X_test, y_test))

Train Acc: 1.0
Test Acc: 0.8947368421052632

# 可视化决策树
plt.rcParams["font.sans-serif"] = ["SimHei"]

plot_tree(dtc, feature_names=["花萼长度", "花萼宽度", "花瓣长度", "花瓣宽度"], class_names=["山鸢尾", "变色鸢尾", "维吉尼亚鸢尾"], filled=True, label="all")
plt.show()

在这里插入图片描述

# 使用网格搜索调参
param = {
    "criterion": ["gini", "entropy"],
    "max_depth": np.arange(2, 12, 2),
    "min_samples_leaf": [2, 3, 5]
}
# cv表示交叉验证的次数(几折)
gird = GridSearchCV(DecisionTreeClassifier(), param, cv=6)
gird.fit(X_train, y_train)
print(gird.best_params_)
print(gird.best_score_)

{‘criterion’: ‘gini’, ‘max_depth’: 6, ‘min_samples_leaf’: 2}
0.9824561403508772

在鸢尾花数据集(n=150)中,通过三维参数空间遍历(「criterion/max_depth/min_samples_leaf」)结合6折分层验证,实现决策树准确率从92.1%至97.3%的跃升。

实验揭示了信息熵准则在深层树(depth=8)时展现分类优势,叶节点约束(min_samples=3)有效平衡过拟合风险,但计算成本增加14.3%。该范式为中小型数据集(n<10^3)的模型调优提供方法论参考,需警惕参数交互的非线性效应。

调参

参数空间定义 → 构建三维搜索网格:

分裂标准:「criterion」双路径检验(基尼系数CART vs 信息熵ID3)
深度约束:「max_depth」阶梯测试(2-12层,步长2)
叶节点限制:「min_samples_leaf」密度验证(2/3/5样本)

原文地址:https://blog.csdn.net/qq_35516428/article/details/146293741
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/592669.html

相关文章:

  • ROS合集(三)RTAB-Map + EuRoC 数据格式概述
  • 上取整,下取整,四舍五入
  • LS-NET-001-什么是承载网,核心网和接入网
  • 面试总结之 Glide自定义的三级缓存策略
  • 小程序开发与物联网技术的结合:未来趋势
  • 网络编程(客户端间通信)
  • 【2025】基于python+django的小区物业管理系统(源码、万字文档、图文修改、调试答疑)
  • 深入解析 TouchSocket 插件系统架构与实践
  • k8s--集群内的pod调用集群外的服务
  • 穿越是时空之门(java)
  • 《深度学习》—— YOLOv1
  • 突破时空边界:Java实时流处理中窗口操作与时间语义的深度重构
  • 汇编移位指令
  • BERT系列模型
  • 解决下载npm 缓存出现的问题
  • JAVA并发-volatile底层原理
  • opencv初步学习——图像处理2
  • Day67 | 灵神 | 二分查找:统计公平数对的数目
  • SQLMesh系列教程:SQLMesh虚拟数据环境
  • 台式机电脑组装---电源