机器学习:决策树(CART 、决策树中的超参数)
- 老师:非参数学习的算法都容易产生过拟合;
一、决策树模型的创建方式、时间复杂度
1)创建方式
- 决策树算法
- 既可以解决分类问题,又可以解决回归问题;
- CART 创建决策树的方式:根据某一维度 d 和某一个 阈值 v 进行二分;(得到的是一个二叉树)
- scikit-learn 中的创建决策树的方式:CART(Classification And Regression Tree),也就是二叉树的方式;
- 创建决策树的方式有多种:ID3、C4.5、C5.0、CART;
2)二叉树的实际复杂度
- 预测样本时的时间复杂度:O(logm)
- m:待预测的样本个数;
- logm:表示“树”的高度,也就是 “树” 一共有 logm 层;
- 可以这样理解:每一次的节点划分,都是对当前实际的对半划分,则“树”的高度是 logm ;当传入一个未知的新的样本时,从根节点处开始一步一步做决策,走到“叶子”节点;
- 训练决策树模型时的时间复杂度:O(n*m*logm)
- X_train 是(m,n);
- “树”是 logm 级别的,如果每一层只划分一个节点,在一个节点上大概都要对数据集做 n*m 次划分,则训练的时间复杂度为 O(n*m*logm);
二、scikit-learn 中决策树算法的参数
1)决策树算法的问题
- 训练决策树模型的时间复杂度比较大:O(n*m*logm);
- 训练决策树模型时容易产生过拟合;(这也是所有非参数学习算法的共同问题)
- 方案:剪枝——可降低复杂度,同时解决过拟合;
2)常用参数
-
参数的功能:防止模型过拟合或欠拟合,降低训练模型的时间复杂度;
-
from sklearn.tree import DecisionTreeClassifier dt_clf = DecisionTreeClassifier(max_depth=2, criterion='entropy', min_samples_split=10, min_samples_leaf=6, max_leaf_nodes=4) dt_clf.fit(X, y)
- max_depth = 2:决策树模型的最高深度为 2;
- criterion = 'entropy':划分节点数据集时,采用信息熵为判断条件;
- criterion = 'gini':划分节点数据集时,采用基尼系数为判断条件;
- min_samples_split = 10:节点数据集中至少要有 10 个样本,才能继续对节点数据集进行划分;否则即使信息熵和基尼系数都比较大,也不在划分数据集;
- min_samples_leaf = 6:一个“叶子”节点,至少要有 6 个样本;
- max_leaf_nodes = 4:模型最多只能有 4 个“叶子”节点;
- scikit-learn 中的决策树算法中还有很多其它参数,可查官方文档;
- 实际应用中,需要将各种参数相互组合,可以用网格搜索的方式找到最佳的一组;
分类:
机器学习算法
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决