- 前言
- 一、pandas是什么?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
前言
本实验计算连续性数据的基尼系数,用来生成决策树。
对于连续型数据生成决策树时,将连续型数据进行等分,拆解成离散的数据。
一、基尼系数
以技能为例计算其基尼系数
C++ :G1 = 1 - ()*()-() *()
Java : G2 = 1 - () * () - () * ()
G = 0.4*G1 + 0.6*G2
基尼系数与信息熵比较基尼系数的计算公式比较简单不需要log,计算速度会优于信息熵。
二、使用步骤 1.引入库代码如下(示例):
import numpy as np from collections import Counter from math import log2 from sklearn.datasets import load_iris import matplotlib.pyplot as plt2.计算基尼系数
代码如下(示例):
#计算基尼系数函数
def gini(y_label):
counter = Counter(y_label) # 计数
g = 0.0
for num in counter.values():
p = num / len(y_label)
g += p ** 2
g = 1 - g
return g
3.计算分割点的基尼系数
#选取X的其中一个特征,比如花瓣长,设置100个分割点,然后计算每个分割点的基尼系数
def caloneGini(X,y,n=100):
ents = np.zeros(n)
X1 = X[:, 3]
cuts = np.linspace(X1.min(), X1.max(), n)
# 开始计算
for i in range(len(cuts)):
y_less = y[X1 <= cuts[i]] # 取出小于等于分割点的数据
y_greater = y[X1 > cuts[i]] # 取出大于分割点的数据
G_less = gini(y_less) # 小于等于分割点的基尼系数
G_greater = gini(y_greater) # 大于分割点的基尼系数
G = G_less * len(y_less) / len(y) + G_greater * len(y_greater) / len(y)
ents[i] = G
return cuts, ents
iris = load_iris()
X = iris['data']
y = iris['target']
cuts_Gini,ents_Gini = caloneGini(X,y)
plt.plot(cuts_Gini,ents_Gini)
plt.show()
代码说明
1.利用莺尾花花瓣长作为数据。
2.将莺尾花花瓣长等分成100份,分别计算每一个分割点的基尼系数。
3.计算每个分割点的基尼系数时,将大于该分割点的数据看成一类,小于该 分割点的看成另外一类,所以计算基尼系数与计算技能的基尼系数相同。
总结
本实验利用Python手动实现了如何利用连续型数据构建决策树。
本实验计算了每个分割点的基尼系数。



