【机器学习|学习笔记】详解决策树CART算法,并对比ID3 C4.5和CART算法
【机器学习|学习笔记】详解决策树CART算法,并对比ID3 C4.5和CART算法
【机器学习|学习笔记】详解决策树CART算法,并对比ID3 C4.5和CART算法
文章目录
- 【机器学习|学习笔记】详解决策树CART算法,并对比ID3 C4.5和CART算法
- 一、决策树算法发展简述
- 二、CART算法核心
- 三、Python示例:用 sklearn 训练和展示CART分类树
- 四、ID3 和 C4.5 的Python近似实现
- 五、三种算法对比总结
- 六、完整示例代码整合
- 七、小结
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147196847
一、决策树算法发展简述
- ID3(1986):基于信息增益(Entropy)选择特征,偏向多值特征;只能处理离散特征,不支持剪枝。
- C4.5(1993):ID3的改进,使用信息增益比(Gain Ratio)选择特征,支持连续特征和剪枝,实用性更强。
- CART(Classification and Regression Tree, 1984):采用基尼指数(Gini Index)选择特征,生成二叉树,支持分类和回归任务,具备更广泛的应用。
二、CART算法核心
- 基尼指数(Gini Index) 衡量数据集纯度,值越小越纯。
- 二叉树结构:每个节点二分裂,适合连续变量。
- 支持分类树和回归树。
- 内置剪枝策略,避免过拟合。
三、Python示例:用 sklearn 训练和展示CART分类树
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_text
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 载入数据
data = load_iris()
X, y = data.data, data.target# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 训练CART分类树,criterion='gini'表示使用基尼指数
clf_cart = DecisionTreeClassifier(criterion='gini', random_state=42)
clf_cart.fit(X_train, y_train)# 预测
y_pred = clf_cart.predict(X_test)
print(f"Accuracy (CART, Gini): {accuracy_score(y_test, y_pred):.4f}")# 输出决策树规则文本展示
tree_rules = export_text(clf_cart, feature_names=data.feature_names)
print("CART 决策树规则:\n", tree_rules)
四、ID3 和 C4.5 的Python近似实现
sklearn 自带的 DecisionTreeClassifier
不直接实现ID3和C4.5,但:
- ID3 可以用
criterion='entropy'
近似实现(用信息熵作为划分标准) - C4.5 没有直接实现,但信息增益比是其核心,需自己实现或用第三方库
简单训练ID3近似:
clf_id3 = DecisionTreeClassifier(criterion='entropy', random_state=42)
clf_id3.fit(X_train, y_train)
y_pred_id3 = clf_id3.predict(X_test)
print(f"Accuracy (ID3 approx, Entropy): {accuracy_score(y_test, y_pred_id3):.4f}")
五、三种算法对比总结
算法 | 划分标准 | 支持特征类型 | 树结构 | 支持剪枝 | 备注 |
---|---|---|---|---|---|
ID3 | 信息增益 (Entropy) | 离散 | 多叉树 | 否 | 易偏向多值特征 |
C4.5 | 信息增益比 (Gain Ratio) | 离散+连续 | 多叉树 | 是 | 解决ID3偏向,多数实际应用算法 |
CART | 基尼指数 (Gini Index) | 离散+连续 | 二叉树 | 是 | 同时支持分类与回归,应用广泛 |
六、完整示例代码整合
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_text
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_scoredata = load_iris()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# CART - 基尼指数
clf_cart = DecisionTreeClassifier(criterion='gini', random_state=42)
clf_cart.fit(X_train, y_train)
y_pred_cart = clf_cart.predict(X_test)
print(f"Accuracy (CART, Gini): {accuracy_score(y_test, y_pred_cart):.4f}")# ID3近似 - 信息熵
clf_id3 = DecisionTreeClassifier(criterion='entropy', random_state=42)
clf_id3.fit(X_train, y_train)
y_pred_id3 = clf_id3.predict(X_test)
print(f"Accuracy (ID3 approx, Entropy): {accuracy_score(y_test, y_pred_id3):.4f}")print("\nCART 决策树规则:")
print(export_text(clf_cart, feature_names=data.feature_names))print("\nID3 近似决策树规则:")
print(export_text(clf_id3, feature_names=data.feature_names))
七、小结
- CART算法是目前机器学习中最常用的决策树算法,适用范围广。
- ID3和C4.5奠定了决策树发展基础,C4.5更贴合实际需求。
- sklearn 的
DecisionTreeClassifier
默认CART,支持基尼和熵划分,但无信息增益比。