信息论基础
熵(entropy):在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
则随机变量X的熵定义为
熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H§,即
熵取值最大,随机变量不确定性最大。
条件熵:
设有随机变量(X,Y),其联合概率分布为
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望
信息增益:
特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
联合熵:
两个变量X和Y的联合信息熵定义为:
基尼不纯度:将来自集合的某种结果随机应用于某一数据项的预期误差率。
(1)基尼不纯度可以作为 衡量系统混乱程度的 标准;
(2)基尼不纯度越小,纯度越高,集合的有序程度越高,分类的效果越好;
(3)基尼不纯度为 0 时,表示集合类别一致;
(4)在决策树中,比较基尼不纯度的大小可以选择更好的决策条件(子节点)。
熵和基尼不纯度之间的主要区别在于,熵达到峰值的过程要相对慢一些。
因此,熵对于混乱集合的判罚要更重一些。
决策树的不同分类算法:
-
ID3算法:ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。
-
C4.5的生成算法:C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征。特征A对训练数据集D的信息增益比g R (D,A)定义为其信息增益g(D,A)与训练数据集D的经验熵H(D)之比:
-
CART算法:CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
CART算法由以下两步组成:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
适用于分类和回归两种决策树
回归树的原理
假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集
一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元,并且在每个单元上有一个固定的输出值,于是回归树模型可表示为
当输入空间的划分确定时,可以用平方误差
来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。
在进行空间划分时采用启发式方法,定义两个区域:
然后寻找切分变量j和最优切分点s,求解:
对固定输入变量j可以找到最优切分点s。
遍历所有输入变量,找到最优的切分变量j,构成一个对(j,s)。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成一棵回归树。这样的回归树通常称为最小二乘回归树(least squares regression tree)
决策树防止过拟合手段
CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。
- 预剪枝:在生成决策树之前,针对每个叶结点计算比较验证集精度,选择精度较大的进行划分
- 后剪枝:先从训练集生成一棵完整的决策树,然后自底而上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树的泛化性能提升,则将该子树替换为叶节点
- 比较:后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情况下后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但后剪枝决策树训练时间比未剪枝决策树和预剪枝决策树多。
模型评估
分类树模型:采用通用的分类模型评估指标
- Accuracy
- Precision
- Recall
- F1-score
- ROC曲线和AUC
- PR曲线
回归树模型:采用通用的回归模型评估指标
- MSE
- MAE
- R^2
Sklearn参数详解及代码实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from collections import Counter
import math
from math import log
import pprint
# data
def create_data():
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
data = np.array(df.iloc[:100, [0, 1, -1]])
# print(data)
return data[:,:2], data[:,-1]
X, y = create_data()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
import graphviz
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train,)
clf.score(X_test, y_test)
tree_pic = export_graphviz(clf, out_file="mytree.pdf")
with open('mytree.pdf') as f:
dot_graph = f.read()
graphviz.Source(dot_graph)