文章目录
- 多样性指标
- 基尼杂质指数(Gini Impurity Index)
- 熵(Entropy)
- 决策树的应用
源代码文件请点击此处!
多样性指标
基尼杂质指数(Gini Impurity Index)
若集合中包含 m m m 个元素和 n n n 个类别,其中 a i a_i ai 个元素属于第 i i i 个类别,则:
基尼杂质指数 = 1 − p 1 2 − p 2 2 − . . . − p n 2 其中, p i = a i m (表示选择该元素的概率) 基尼杂质指数 = 1 - p_1^2 - p_2^2 - ... - p_n^2 \\ 其中,p_i = \frac{a_i}{m}(表示选择该元素的概率) 基尼杂质指数=1−p12−p22−...−pn2其中,pi=mai(表示选择该元素的概率)
【案例 1】{红,红,红,红,红,红,红,红,蓝,蓝}(8 个红球,2 个蓝球)
基尼杂质指数 = 1 − ( 8 10 ) 2 − ( 2 10 ) 2 = 0.32 基尼杂质指数 = 1 - \bigg(\frac{8}{10}\bigg)^2 - \bigg(\frac{2}{10}\bigg)^2 = 0.32 基尼杂质指数=1−(108)2−(102)2=0.32
【案例 2】{红,红,红,红,蓝,蓝,蓝,黄,黄,绿}(4 个红球,2 个蓝球,2 个黄球,1 个绿球)
基尼杂质指数 = 1 − ( 4 10 ) 2 − ( 3 10 ) 2 − ( 2 10 ) 2 − ( 1 10 ) 2 = 0.70 基尼杂质指数 = 1 - \bigg(\frac{4}{10}\bigg)^2 - \bigg(\frac{3}{10}\bigg)^2 - \bigg(\frac{2}{10}\bigg)^2 - \bigg(\frac{1}{10}\bigg)^2 = 0.70 基尼杂质指数=1−(104)2−(103)2−(102)2−(101)2=0.70
基尼指数越低,集合中的元素就越相似(数据集多样性越低)。
熵(Entropy)
若集合中包含 m m m 个元素和 n n n 个类别,其中 a i a_i ai 个元素属于第 i i i 个类别,则:
熵 = − p 1 log 2 ( p 1 ) − p 2 log 2 ( p 2 ) − . . . − p n log 2 ( p n ) 其中, p i = a i m (表示选择该元素的概率) 熵 = - p_1 \log_2(p_1) - p_2 \log_2(p_2) - ... - p_n \log_2(p_n) \\ 其中,p_i = \frac{a_i}{m}(表示选择该元素的概率) 熵=−p1log2(p1)−p2log2(p2)−...−pnlog2(pn)其中,pi=mai(表示选择该元素的概率)
【案例 1】{红,红,红,红,红,红,红,红,蓝,蓝}(8 个红球,2 个蓝球)
熵 = − 8 10 log 2 ( 8 10 ) − 2 10 log 2 ( 2 10 ) = 0.722 熵 = - \frac{8}{10}\log_2 \bigg(\frac{8}{10}\bigg) - \frac{2}{10}\log_2 \bigg(\frac{2}{10}\bigg) = 0.722 熵=−108log2(108)−102log2(102)=0.722
【案例 2】{红,红,红,红,蓝,蓝,蓝,黄,黄,绿}(4 个红球,2 个蓝球,2 个黄球,1 个绿球)
熵 = − 4 10 log 2 ( 4 10 ) − 3 10 log 2 ( 3 10 ) − 2 10 log 2 ( 2 10 ) − 1 10 log 2 ( 1 10 ) = 1.846 熵 = - \frac{4}{10}\log_2 \bigg(\frac{4}{10}\bigg) - \frac{3}{10}\log_2 \bigg(\frac{3}{10}\bigg) - \frac{2}{10}\log_2 \bigg(\frac{2}{10}\bigg) - \frac{1}{10}\log_2 \bigg(\frac{1}{10}\bigg) = 1.846 熵=−104log2(104)−103log2(103)−102log2(102)−101log2(101)=1.846
熵越低,集合中的元素就越相似(数据集多样性越低)。
决策树的应用
我们所使用的数据集如下:
dataset = pd.DataFrame({
'x_0': [7, 3, 2, 1, 2, 4, 1, 8, 6, 7, 8, 9],
'x_1': [1, 2, 3, 5, 6, 7, 9, 10, 5, 8, 4, 6],
'y': [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]})
features = dataset[['x_0', 'x_1']]
labels = dataset['y']
使用基尼指数作为划分标准的决策树如下:
decision_tree = DecisionTreeClassifier(criterion='gini')
decision_tree.fit(features, labels)
decision_tree.score(features, labels)
tree.plot_tree(decision_tree, rounded=True, feature_names=['x_0', 'x_1'], class_names=['0', '1'])
使用基尼指数作为划分标准的决策树(划分深度只到第一层)如下:
decision_tree_depth_1 = DecisionTreeClassifier(criterion='gini', max_depth=1)
decision_tree_depth_1.fit(features, labels)
decision_tree_depth_1.score(features, labels)
tree.plot_tree(decision_tree_depth_1, rounded=True, feature_names=['x_0', 'x_1'], class_names=['0', '1'])