--决策树--

决策树与随机森林均属于分类算法,所预测的结果应为离散数据(特征值可以为连续的)

信息论基础

信息熵

H(x)=\sum_{x\in X}P(x)logP(x)

信息增益

g(D, A)=H(D)-H(D|A)

信息增益表示得知特征X的信息而使得Y的信息的不确定性减少的程度

信息增益的计算

条件熵 

 

Ck表示属于某个类别的样本数

信息增益是确定决策树优先级的重要指标,信息增益越大,其优先级越高

决策树API

class sklearn.tree.DecisionTreeClassifier(criterion='gini', max_depth=None, random_state=None)

  • 决策树分类器
  • criterion:默认是'gini'系数,也可以选择信息增益的熵'entropy'
  • max_depth:树的深度大小
  • random_state:随机数种子

决策树优点

  • 准确率高
  • 适用于各种数据
  • 可解释性强
  • 不需要归一化

决策树缺点

容易过拟合——树的建立太深

决策树的使用

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = datasets.load_iris()
X = iris['data']
y = iris['target']
feature_names = iris.feature_names
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1024)

# 数据清洗比较花时间
# 特征工程重要
# 使用模型进行训练
# 模型参数调优
# sklearn的所有算法都已经封装好,直接用,使用规则如下
clf = DecisionTreeClassifier(criterion='entropy')
clf.fit(X_train, y_train)
y_ = clf.predict(X_test)
print(accuracy_score(y_test, y_))
# 1.0

# 画出树的结构
plt.figure(figsize=(18, 12))
tree.plot_tree(clf, filled=True, feature_names=feature_names, max_depth=1)
plt.savefig('./tree.jpg')

树结构的解释

分类器的解释

在决策树的API中,有以下参数可以进行改变

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='deprecated',
    ccp_alpha=0.0,
)
  1. criterion中有'gini'(默认)和'entropy',这是两种选择特征进行分类的方法。其中,entropy就是上述的“信息增益的熵”
    1. 树的结构中第一层中的entropy=1.584的计算如下
      -((39/120)*np.log2(39/120) + (42/120)*np.log2(42/120) + (39/120)*np.log2(39/120))
    2. gini算法如下
      39/120*(1 - 39/120)*2 + 42/120*(1 - 42/120)

    3. 这两种算法其实效果类似

  2. max_depth=None,树的最深深度设置,有时不一定越深越好,浅一些的效果也可能相同但效率更高
  3. min_samples_split=2,最小样本数量划分,与上面设置树深度的效果类似,这个设置了每一个分支最少容纳的样本数量,达到此数量,就不再往下分了。此值越大,树的深度越浅
  4. max_features,计算的最多的特征值的数量
  5. class_weight,类别权重,默认都是1,如需指定,输入一个与y相对应的字典列表
    [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}

树结构的解释

  1. entropy,上面已解释
  2. value = [39, 42, 39],是指三种类别的数量,鸢尾花的三种类别在训练集中的数量
    1. 在之后的每次分类中,一部分被分走,剩下的继续划分
  3. petal length(cm)<=2.6,鸢尾花数据集中的特征值有四个,分别是'sepal lenth (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)',在第一个分类中是根据petal length的数值大小进行分类的,<=2.6的直接被分为鸢尾花三类中的其中一类,>2.6的就继续分类
    1. 这个分类的标准有很多,比如像第一级的分类,使用petal length作为分类标准,是因为在petal length中的特征值大小差别较大,方差大,说明数据比较分散,易于分类,选择了相邻数据差距十分明显的1.9和3.3,取二者的平均值2.6作为第一级的分类阈值
    2. 在后面级别的分类标准选择中,在方差相似的情况下,又会有不同的分类标准

决策树模型,不需要对数据进行去量纲化,归一化,标准化

决策树的模型很重要,但不会去使用它,通常使用的都是随机森林(集成算法,决策树的升级版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值