一、决策树定义
决策树(Decision Tree)是一种基本的分类与回归方法。在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。
二、决策树特征选择
特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的准则是信息增益或信息增益比。
三、信息增益
信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:
g(D,A) = H(D) - H(D|A)
四、决策树的生成
决策树的生成算法主要有ID3和C4.5。
1. ID3算法:ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。
2. C4.5算法:C4.5算法与ID3算法相似,但它对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征。信息增益比定义为信息增益与训练数据集关于特征的值的熵之比。此外,C4.5还能处理特征值为连续的情况,以及具有缺失值的情况。
五、决策树剪枝
决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化,这个过程称为剪枝。
剪枝从已生成的树上裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶节点,从而简化分类树模型。决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。
六、小结
决策树是一种简单直观、易于理解的机器学习算法,广泛应用于各种分类场景。通过特征选择、决策树生成和剪枝等步骤,我们可以得到一个既能拟合训练数据,又不过于复杂的决策树模型。在实际应用中,我们还需要根据具体问题和数据特点,选择合适的特征选择准则和剪枝策略,以获得更好的分类性能。
Python代码示例
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 加载Iris数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建决策树分类器
clf = DecisionTreeClassifier(criterion='entropy') # 使用信息增益作为划分准则
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
结果展示
Accuracy: 0.9666666666666667
请注意,由于数据集的随机划分和决策树的不稳定性,每次运行的结果可能会有所不同。在实际应用中,你可能还需要调整决策树的参数,如设置最大深度、最小样本数等,以防止过拟合。