目录
决策树的基本思想
最早的思想来源就是程序设计中的条件分支结构就是if-else结构。决策树本质是一颗有多个判断节点组成的树,每个内部节点表示一个属性上的判断(规则条件),每个分支代表一个判断结果的输出,每个叶节点代表一种分类结果。
熵的概念
系统越有序,熵值越低;系统越混乱或者分散,熵值越高
熵的计算公式:
决策树的划分依据
决策树的划分有三种方法:信息增益法、信息增益率法、基尼指数法。
首先介绍第一种
信息增益法划分决策树
信息增益法又称ID3算法,信息增益是以某特征划分数据集前后的熵的差值来计算的,公式为:
信息增益=H(前)-H(后)。
意思就是:划分前的熵减去条件a确定下的条件熵。
通过不断地重复上述步骤,决策树递归地构建,每个节点都选择信息增益最大的特征进行划分。
例题:
计算信息增益前,需要做两件事情:一个是要计算总体的熵,一个是要选定计算哪个属性的信息增益。步骤如下:
计算总体的熵:
计算选定性别属性之后的信息增益:
计算选定活跃度属性之后的信息增益:
结论:活跃度的信息增益比性别的增益大,也就是说,活跃度对用户流失的影响更大。
信息增益率
在介绍信息增益率之前,解释一下为什么有了信息增益还需要有信息增益率(也称C4.5)这个算法?
信息增益准则对可取值数目较多的属性偏好,为减少折中偏好带来的不利影响,著名的C4.5决策树算法使用“增益率”来选择最优划分属性。也就是说:信息增益法对于某个属性来说,如果这个属性的取值非常多,那么ID3算法就偏好于这个属性,这是不合理的,C4.5算法就是升级版的ID3,是为了消除这个不合理。
增益率:用信息增益Gain(D,a)和属性a对应的固有值的比值来共同定义。
信息增益率用信息增益/内在信息:也就是说,如果这个属性本身不确定性就很大,那我就越不倾向于选取它
可以看到,在计算信息增益率之前,首先要计算信息增益。
基尼指数
基尼指数就是要计算不同属性的基尼值。
基尼值:
在决策树中如何预防过拟合
决策树的代码、API
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载示例数据集
iris = datasets.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)
# 创建ID3决策树模型
id3_model = DecisionTreeClassifier(criterion='entropy')
c45_model = DecisionTreeClassifier(criterion='entropy', splitter='best')
gini_model = DecisionTreeClassifier(criterion='gini')
id3_model.fit(X_train, y_train)
# 预测
id3_predictions = id3_model.predict(X_test)
# 评估准确性
id3_accuracy = accuracy_score(y_test, id3_predictions)
print(f'ID3 Accuracy: {id3_accuracy}')