数据挖掘与机器学习

机器学习之决策树

2019-10-13  本文已影响0人  清梦载星河

一、什么是决策树

相关名词

1.1 决策树简介

决策树(decision tree)是一类常见的机器学习方法,一个简单的决策树如下图:


简单的决策树

一般的,一棵决策树包含一个根节点,若干个内部结点和若干个叶节点;叶节点对应决策结果,其他节点则对应一个属性测试;每个结点包含样本集合根据属性测试的结果被划分到子结点中;根节点包含样本全集。决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单而直观的“分而治之”的策略。(摘自周志华的《机器学习》)

决策树可分为分类决策树和回归决策树,分类决策树有ID3决策树和C4.5决策树,回归决策树有CART决策树,其中C4.5和CART属于十大数据挖掘算法之二。

1.2 优缺点

二、如何构造一个决策树

在谈如何构造决策树之前,我们需要先简单了解一下信息熵、信息增益和信息增益率。

信息熵指的是信息混乱程度,熵越大,信息混乱程度越高,纯度越低。比如A = [1, 2, 3, 4, 5],B = [1, 1, 1, 1, 2],A的熵就比较高,B的熵就比较低。信息熵的计算公式如下图:


信息熵

对A进行计算,假设每个值的取值概率为0.2,则A的信息熵为5(0.2log2(0.2))=2.3219,而B的信息熵是1.49446。

信息增益指的是经过一个决策结点信息熵的变化量,信息增益越大,纯度提升越大。

不同于ID3使用信息增益,C4.5使用信息增益率,避免了用信息增益选择属性时偏向取值多的属性的问题。信息增益率的公式如下,其中D为信息熵。


信息增益率

构造决策树的一个要点就是如何选择结点,我们需要使用信息增益最大的结点。

使用决策树的基本想法是随着树深度的增加,节点的熵迅速的降低。熵降低速度越快越好,这样我们有望得到一个高度最矮的决策树。

三、剪枝

在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这是就可能因训练样本学得太好了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,我们需要主动去掉一些分支来降低过拟合的风险,而剪枝是决策树学习算法对付过拟合的主要手段。

剪枝分为“预剪枝”和“后剪枝”。预剪枝是指在构造决策树的过程中边构造边剪枝,在决策每个结点之前先估计其对决策树性能的效果,若不能就停止决策该节点并划为叶节点。后剪枝指的是先生成一个决策树,然后从上而下的考察非叶节点并剪枝。

四、Talk is cheap, show me code.

# 运行于Jupyter Notebook
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets
sns.set()

#加载鸢尾花的数据
iris = datasets.load_iris()
data = pd.DataFrame(iris.data,columns=iris.feature_names)
data['target'] = iris.target

tmp = pd.DataFrame({"target":[0,1,2],
                   "target_name":iris.target_names})

data = pd.merge(data,tmp,on='target')
data = data.drop(['target'],axis=1)

sns.pairplot(data.dropna(),hue='target_name')
irisPairplot
# 训练数据和分类
train_data = data.drop(['target_name'],axis=1)
train_class = data['target_name']

#调用sklearn的决策树方法
from sklearn.tree import DecisionTreeClassifier
# 创建决策树模型
decision_tree_classifier = DecisionTreeClassifier()
# 训练决策树
decision_tree_classifier.fit(train_data,train_class)
# 查看决策树的准确率
decision_tree_classifier.score(train_data,train_class)

详解DecisionTreeClassifier

DecisionTreeClassifier(
    criterion='gini',
    splitter='best',
    max_depth=None,
    min_samples_split=2,
    min_samples_leaf=1,
    min_weight_fraction_leaf=0.0,
    max_features=None,
    random_state=None,
    max_leaf_nodes=None,
    min_impurity_decrease=0.0,
    min_impurity_split=None,
    class_weight=None,
    presort=False,
)

主要参数

主要属性

主要方法

五、回归

决策树也可以执行回归任务

from sklearn.tree import DecisionTreeRegressor
tree_reg = DecisionTreeRegressor(max_depth=2)
tree_reg.fit(X,y)

参数max_depth越大,拟合效果越好,但其值过大时会造成过拟合。

六、其他

通过组合多个决策树可以创建随机森林,随机森林可以获得更好的分类结果。sklearn中的相关方法为:

上一篇 下一篇

猜你喜欢

热点阅读