决策树算法梳理

信息论基础

熵(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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化python决策树可以通过以下几个方面进行: 1. 修剪树:决策树可能会过度拟合训练数据,导致无法很好地推广到新数据上。为了避免过度拟合,可以通过设置叶节点所需的最小样本数或限制树的最大深度等机制来修剪树。这样可以限制树的复杂度,提高泛化能力。 2. 使用集成算法决策树的一个缺点是它对数据中微小变化非常敏感,可能会导致生成完全不同的树。为了解决这个问题,可以使用集成算法,如随机森林。随机森林通过对特征和样本的随机采样来生成多个决策树,并将它们组合起来进行预测。这种集成方法可以降低决策树的方差,提高稳定性。 3. 平衡数据集:如果数据中某些类占主导地位,决策树可能会偏向于主导类。为了避免这种偏差,建议在拟合决策树之前平衡数据集。可以使用技术如欠采样、过采样或生成合成样本等方法来平衡数据集。 4. 使用适当的剪枝策略:剪枝是优化决策树算法的关键。预剪枝和后剪枝是常用的剪枝策略。预剪枝在决策树生成过程中,在每个节点划分前先估计其划分后的泛化性能,如果不能提升,则停止划分,将当前节点标记为叶节点。后剪枝则是在生成决策树后,自下而上对非叶节点进行考察,如果将该节点标记为叶节点可以提升泛化性能,则进行修剪。 5. 使用合适的参数:在使用Python中的决策树库(如scikit-learn)时,可以根据具体问题调整决策树的参数。例如,可以设置树的最大深度、节点分裂的最小样本数、节点分裂的标准(如基尼系数或信息增益)等参数来优化决策树的性能。 6. 可视化决策树:使用Python可以使用绘图库(如matplotlib)来绘制决策树,这可以帮助我们更好地理解决策树的结构和规则,从而进行进一步的优化。 通过以上方法和策略,可以优化Python决策树,提高其性能和泛化能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [决策树算法梳理以及python实现](https://blog.csdn.net/laojie4124/article/details/90316926)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值