决策树算法:计算熵、信息增益、信息增益率、基尼系数、误分类率
假设有一个数据集,其中包含以下信息:/n/n| 编号 | 性别 | 年龄 | 是否有工作 | 是否有房子 | 是否有车 | 是否结婚 | 是否贷款 | 是否违约 | /n| ---- | ---- | ---- | ---------- | ---------- | -------- | -------- | -------- | -------- | /n| 1 | 男 | 25 | 是 | 否 | 否 | 否 | 否 | 否 | /n| 2 | 男 | 35 | 否 | 是 | 否 | 是 | 否 | 否 | /n| 3 | 女 | 28 | 是 | 是 | 是 | 是 | 是 | 是 | /n| 4 | 女 | 45 | 否 | 是 | 是 | 是 | 是 | 是 | /n| 5 | 男 | 30 | 是 | 否 | 是 | 否 | 否 | 否 | /n/n现在我们要根据这些数据来预测一个人是否会违约,我们可以使用决策树算法来进行分类。现在我们要选择一个特征作为根节点,来构造决策树。/n/n首先,我们可以选择'性别'这个特征,它有两个取值:'男'和'女'。我们可以计算出它的熵:/n/n$Entropy(S) = -/frac{3}{5} /log_2 /frac{3}{5} -/frac{2}{5} /log_2 /frac{2}{5} = 0.971$/n/n其中,$S$是整个数据集。/n/n接下来,我们可以计算出每个特征的信息增益,来选择最好的特征作为根节点。以'是否有车'为例,它有两个取值:'是'和'否'。我们可以计算出它的信息增益:/n/n$Gain(S, 是否有车) = Entropy(S) - /frac{2}{5}Entropy(S_{有车}) - /frac{3}{5}Entropy(S_{无车}) = 0.019$/n/n其中,$S_{有车}$表示有车的样本集,$S_{无车}$表示无车的样本集。/n/n接下来,我们可以计算出每个特征的信息增益率,来避免选择取值数目较多的特征作为根节点。以'是否有工作'为例,它有两个取值:'是'和'否'。我们可以计算出它的信息增益率:/n/n$Gain/_ratio(S, 是否有工作) = /frac{Gain(S, 是否有工作)}{Split/_info(S, 是否有工作)} = /frac{0.019}{-0.4 /log_2 0.4 -0.6 /log_2 0.6} = 0.045$/n/n其中,$Split/info(S, 是否有工作)$表示样本集$S$在特征'是否有工作'上的分裂信息,它的计算公式为:/n/n$Split/info(S, 是否有工作) = -/sum{i=1}^{k} /frac{|S_i|}{|S|} /log_2 /frac{|S_i|}{|S|}$/n/n其中,$k$是特征'是否有工作'上的取值数目,$|S_i|$表示样本集$S$中特征'是否有工作'取值为$i$的样本数目。/n/n接下来,我们可以计算出每个特征的基尼系数,来选择最好的特征作为根节点。以'是否有房子'为例,它有两个取值:'是'和'否'。我们可以计算出它的基尼系数:/n/n$Gini(S, 是否有房子) = 1 - /sum{i=1}^{k} p_i^2 = 1 - (/frac{2}{5})^2 - (/frac{3}{5})^2 = 0.48$/n/n其中,$k$是特征'是否有房子'上的取值数目,$p_i$表示样本集$S$中特征'是否有房子'取值为$i$的样本占比。/n/n最后,我们可以计算出每个特征的误分类率,来选择最好的特征作为根节点。以'是否结婚'为例,它有两个取值:'是'和'否'。我们可以计算出它的误分类率:/n/n$Error(S, 是否结婚) = 1 - /max/{p_1, p_2/} = 1 - /max/{/frac{2}{5}, /frac{3}{5}/} = 0.4$/n/n其中,$p_1$表示样本集$S$中特征'是否结婚'取值为'是'的样本占比,$p_2$表示样本集$S$中特征'是否结婚'取值为'否'的样本占比。/n/n综上所述,我们可以选择信息增益最大的特征作为根节点,即'是否有车'。然后,我们可以把数据集按照'是否有车'分成两个子集,继续选择子集中的最好特征作为子节点,构造决策树。
原文地址: https://www.cveoy.top/t/topic/fYNf 著作权归作者所有。请勿转载和采集!