基于决策树的分类预测
机器学习算法详解,day2 打卡!
- 决策树概念
- 信息熵
- 基尼系数
- 剪枝
- 总结
1. 决策树的概念
决策树(decision tree)也是机器学习中的一个重要算法,但是我们可能平时在决策的时候就常常用到,比如以下天气和怎么出行的问题:
决策树是一种非参数学习算法,可以解决分类(包括多分类)问题,还可以解决回归问题。
如下的例子,用 iris 简单看一下决策树。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
iris_all = pd.DataFrame(data=iris.data, columns=iris.feature_names).copy()
# target = iris.target
iris_all['target'] = iris.target
# 为了方便可视化,仅使用两个特征
iris = iris_all.iloc[:,2:]
sns.scatterplot(data=iris, x = iris.columns.values[0], y = iris.columns.values[1],hue='target',palette="Set1")
plt.show()
# 决策边界函数
def plot_boundary(model, X, y):
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
h = .02 # step size in the mesh
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure(1, figsize=(4, 3))
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Set3_r)
# Plot also the training points
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Accent)
plt.show()
from sklearn.tree import DecisionTreeClassifier
np.random.seed(2)
iris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.target
dt_clf = DecisionTreeClassifier(max_depth=2, criterion='entropy',) # max_depth 最大深度;criterion选择熵
dt_clf.fit(X, y)
plot_boundary(dt_clf, X, y)
以上其实就是一个决策树,当 x < 2.4 时,被分为黄色的一类;其余再进行判断,如果 y < 1.8 ,则是橘色的一类,y > 1.8 则是青色的一类。
2. 信息熵
在决策树中,每个节点在哪里划分,是如何确定呢?
信息熵(information entropy)是一种判断方法。熵是信息论中衡量随机变量不确定度的,这个值越大则数据的不确定性越高;反之,越小则数据的不确定性越低。信息熵是度量样本集合纯度最常用的一个指标,假如当前样本集合 D 中第 i 类样本所占的比例为 p i p_i pi ,则 D 的信息熵为:
H = − ∑ i = 1 k p k l o g 2 p i H = -\sum_{i=1}^{k}p_klog_2p_i H=−i=1∑kpklog2pi
假如有一个集合,有三类样本,比例分别为