前言
决策树是分类与回归问题中常用的方法之一。其实不仅是机器学习领域,在天天的日常决策中,我们都在利用决策树。流程图实际上就是决策树的可视化表现。
一、基本概念
- 决策树原理
- 通过一系列 逻辑规则(特征分割条件) 构建树形结构,用于分类或回归。
- 每个内部节点表现一个特征判定,分支表现判定结果,叶节点表现终极类别或数值。
- 关键术语
- 熵(Entropy):衡量体系不确定性
\( S = -\sum_{i=1}^N p_i \log_2 p_i \)
\( p_i \) 为第 \( i \) 类样本的比例。
- 信息增益(Information Gain):分割后熵的减少量
\( IG(Q) = S_0 - \sum_{i=1}^q \frac{N_i}{N} S_i \)
- 基尼系数(Gini Index):衡量数据不纯度
\( G = 1 - \sum_{k} (p_k)^2 \)
- 分割质量指标对比
指标公式特点信息增益(熵)\( IG = S_0 - \sum \frac{N_i}{N} S_i \)对类别分布敏感基尼系数\( G = 1 - \sum p_k^2 \)盘算更高效,与熵结果相似错分率\( E = 1 - \max p_k \)不推荐利用,对概率变革不敏感
二、决策树构建算法
- 核心思想
- 贪婪算法:每一步选择 信息增益最大(或基尼系数最小)的特征举行分割。
- 递归分裂:重复分割直到满足停止条件(如节点纯度达标、深度限制等)。
- 常用算法
算法特点ID3利用信息增益,仅支持分类,无法处置处罚连续特征和缺失值C4.5改进 ID3,支持连续特征、缺失值处置处罚,引入信息增益率防止过拟合CART利用基尼系数(分类)或均方偏差(回归),支持分类和回归,生成二叉树
- 停止条件
- 节点样本数小于阈值
- 节点纯度达到要求(如熵/基尼系数靠近 0)
- 树达到预设最大深度
三、分类与回归应用
- 分类树
- 目标:猜测离散类别标签。
- 质量指标:熵或基尼系数。
- 示例代码(sklearn):
- from sklearn.tree import DecisionTreeClassifier
- clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
- clf.fit(X_train, y_train)
复制代码
- 回归树
- 目标:猜测连续数值。
- 质量指标:均方偏差(MSE)
\( D = \frac{1}{\ell} \sum_{i=1}^\ell (y_i - \bar{y})^2 \)
\( \bar{y} \) 为叶节点样本均值。
- 示例代码(sklearn):
- from sklearn.tree import DecisionTreeRegressor
- reg = DecisionTreeRegressor(max_depth=3)
- reg.fit(X_train, y_train)
复制代码
四、过拟合与剪枝
- 过拟合体现
- 决策树过深,叶节点样本过少,模子在训练集上完善拟合但在测试集上结果差。
- 解决方法
- 预剪枝(Pre-pruning):提前限制模子复杂度
- max_depth:树的最大深度
- min_samples_leaf:叶节点最少样本数
- max_features:分割时思量的最大特征数
- 后剪枝(Post-pruning):先构建完整树,再自底向上合并节点(如 CCP 方法)。
五、决策树的优缺点
优点缺点可表明性强,规则可视化对噪声敏感,易过拟合支持数值和类别特征边界为轴平行超平面,可能不如其他模子灵活训练和猜测速度快数据微小变革可能导致树结构剧变(不稳定)无需特征标准化无法外推(只能猜测训练集特征范围内的值) 六、实战留意事项
- 参数调优
- 利用交织验证选择最佳 max_depth、min_samples_leaf 等参数。
- 示例代码:
- from sklearn.model_selection import GridSearchCV
- params = {'max_depth': [3, 5, 7], 'min_samples_leaf': [1, 5, 10]}
- grid = GridSearchCV(DecisionTreeClassifier(), params, cv=5)
- grid.fit(X, y)
复制代码
- 可视化决策树
- 利用 sklearn.tree.plot_tree 或第三方库(如 Graphviz)生成树结构图。
- 示例代码:
- from sklearn.tree import plot_tree
- plt.figure(figsize=(20, 10))
- plot_tree(clf, filled=True, feature_names=X.columns)
- plt.show()
复制代码
七、应用
- 分类问题:客户名誉评估、疾病诊断、垃圾邮件辨认。
- 回归问题:房价猜测、销量趋势分析。
- 特征紧张性分析:通过节点分裂次数或信息增益量评估特征紧张性。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |