针对构建决策树节点----不纯度度量的指标及可视化

"""
   分类决策树(ID3/ C4.5/ CART)划分方式采用信息增益率,叶子节点的预测结果是采用多数投票
得出;
   回归决策树 (CART树算法) 划分方式采用MSE/MAE(越小越好),叶子节点的预测结果是采用平均
值得出;
"""

"""不纯度指标图像"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# 设置字符级,防止乱码
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = False

### 评判划分节点的函数方式3种:信息熵,基尼系数、错误率
def entropy(p):
    """
    信息熵
    :param p:
    :return:
    """
    return np.sum([-i * np.log2(i) for i in p if i != 0])

def Gini(p):
    """
    基尼系数
    :param p:
    :return:
    """
    return 1 - np.sum([i * i for i in p])

def error(p):
    """
    错误率
    :param p:
    :return:
    """
    return 1 - np.max(p)


## 不纯度呈现;表示0-1之间生成1000个p值(另外的是1-p)
P0 = np.linspace(0.0, 1.0, 1000)  
P1 = 1 - P0
y1 = [entropy([p0, 1 - p0]) * 0.5 for p0 in P0]
y2 = [Gini([p0, 1 - p0]) for p0 in P0]
y3 = [error([p0, 1 - p0]) for p0 in P0]
plt.plot(P0, y1, label=u'熵之半')
plt.plot(P0, y2, label=u'基尼系数')
plt.plot(P0, y3, label=u'错误率')
plt.legend(loc='upper left')
plt.xlabel(u'p', fontsize=18)
plt.ylabel(u'不纯度', fontsize=18)
plt.title(u'不纯度指标', fontsize=20)
plt.show()

针对构建决策树节点----不纯度度量的指标及可视化_第1张图片

你可能感兴趣的:(Python基础语言,机器学习,决策树,python,算法)