文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在Python中实现决策树算法

2023-06-15 01:43

关注

怎么在Python中实现决策树算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.算法概述

决策树算法是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法。

分类算法是利用训练样本集获得分类函数即分类模型(分类器),从而实现将数据集中的样本划分到各个类中。分类模型通过学习训练样本中属性集与类别之间的潜在关系,并以此为依据对新样本属于哪一类进行预测。

怎么在Python中实现决策树算法

决策树算法是直观运用概率分析的一种图解法,是一种十分常用的分类方法,属于有监督学习。

决策树是一种树形结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输出,每个叶子结点代表一种类别。

决策树学习是以实例为基础的归纳学习,它采用自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子结点处的熵值为零,此时每个叶子节点中的实例都属于同一类。

决策树学习算法的最大优点是,它可以自学习,在学习的过程中不需要使用者了解过多的背景知识,只需要对训练实例进行较好的标注,就能够进行学习。

2.算法种类

ID3算法

C4.5算法

C5.0算法

CART算法

怎么在Python中实现决策树算法

3.算法示例

怎么在Python中实现决策树算法

在机器学习中,决策树是一种预测模型,它代表的是对象属性与对象值之间的一种映射关系。

决策树的目的是拟合一个可以通过指定输入值预测最终输出值得模型。

怎么在Python中实现决策树算法

4.决策树构建示例

描述

怎么在Python中实现决策树算法

分析

怎么在Python中实现决策树算法

计算

怎么在Python中实现决策树算法

结论

怎么在Python中实现决策树算法

5.算法实现步骤

选择属性是构建一颗决策树非常关键的一步,被选择的属性会成为决策树的一个节点,并且不断递归地选择最优的属性就可以最终构建决策树。

怎么在Python中实现决策树算法

计算数据集S中的每个属性的熵 H(xi)选取数据集S中熵值最小(或者信息增益最大,两者等价)的属性在决策树上生成该属性节点使用剩余结点重复以上步骤生成决策树的属性节点

 6.算法相关概念

1948年,香农提出了“信息熵”的概念,熵是接收的每条信息中所包含信息的平均量,是不确定性的量度,而不是确定性的量度,因为越随机的信源的熵越大。熵被定义为概率分布的对数的相反数。

信息熵的公式:怎么在Python中实现决策树算法

信息增益

“信息增益”是用来衡量一个属性区分数据样本的能力,当使用某一个属性作为一棵决策树的根节点时,该属性的信息增益量就越大。决策树会选择最大化信息增益来对结点进行划分。

怎么在Python中实现决策树算法

7.算法实现代码

import numpy as npimport mathfrom collections import Counter# 创建数据def create_data():    X1 = np.random.rand(50, 1)*100    X2 = np.random.rand(50, 1)*100    X3 = np.random.rand(50, 1)*100        def f(x):        return 2 if x > 70 else 1 if x > 40 else 0        y = X1 + X2 + X3    Y = y > 150    Y = Y + 0    r = map(f, X1)    X1 = list(r)        r = map(f, X2)    X2 = list(r)        r = map(f, X3)    X3 = list(r)    x = np.c_[X1, X2, X3, Y]    return x, ['courseA', 'courseB', 'courseC']# 计算集合信息熵的函数def calculate_info_entropy(dataset):    n = len(dataset)    # 我们用Counter统计一下Y的数量    labels = Counter(dataset[:, -1])    entropy = 0.0    # 套用信息熵公式    for k, v in labels.items():        prob = v / n        entropy -= prob * math.log(prob, 2)    return entropy# 实现拆分函数def split_dataset(dataset, idx):  # idx是要拆分的特征下标    splitData = defaultdict(list)    for data in dataset:      # 这里删除了idx这个特征的取值,因为用不到了        splitData[data[idx]].append(np.delete(data, idx))    return list(splitData.values()), list(splitData.keys())# 实现特征的选择函数def choose_feature_to_split(dataset):    n = len(dataset[0])-1    m = len(dataset)    # 切分之前的信息熵    entropy = calculate_info_entropy(dataset)    bestGain = 0.0    feature = -1    for i in range(n):      # 根据特征i切分        split_data, _ = split_dataset(dataset, i)        new_entropy = 0.0        # 计算切分后的信息熵        for data in split_data:            prob = len(data) / m            new_entropy += prob * calculate_info_entropy(data)        # 获取信息增益        gain = entropy - new_entropy        if gain > bestGain:            bestGain = gain            feature = i    return feature# 决策树创建函数def create_decision_tree(dataset, feature_names):    dataset = np.array(dataset)    counter = Counter(dataset[:, -1])    # 如果数据集值剩下了一类,直接返回    if len(counter) == 1:        return dataset[0, -1]        # 如果所有特征都已经切分完了,也直接返回    if len(dataset[0]) == 1:        return counter.most_common(1)[0][0]        # 寻找最佳切分的特征    fidx = choose_feature_to_split(dataset)    fname = feature_names[fidx]        node = {fname: {}}    feature_names.remove(fname)        # 递归调用,对每一个切分出来的取值递归建树    split_data, vals = split_dataset(dataset, fidx)    for data, val in zip(split_data, vals):        node[fname][val] = create_decision_tree(data, feature_names[:])    return node# 决策树节点预测函数def classify(node, feature_names, data):  # 获取当前节点判断的特征    key = list(node.keys())[0]    node = node[key]    idx = feature_names.index(key)        # 根据特征进行递归    pred = None    for key in node:      # 找到了对应的分叉        if data[idx] == key:          # 如果再往下依然还有子树,那么则递归,否则返回结果            if isinstance(node[key], dict):                pred = classify(node[key], feature_names, data)            else:                pred = node[key]                    # 如果没有对应的分叉,则找到一个分叉返回    if pred is None:        for key in node:            if not isinstance(node[key], dict):                pred = node[key]                break    return pred

8.算法优缺点

 优点:小规模数据集有效

缺点

9.算法优化

决策树算法是一种非常经典的算法,其训练过程中主要依靠获得数据间的熵及信息增益作为划分依据,分类效果较好。但一般情况下我们训练决策树均是在数据量较小的数据集进行,当训练分类器所用的训练数据足够大时,决策树会出现树身过高、拟合效果差等问题。因此,如何高效准确的构建决策树成为模式识别领域的一项研究热点。

使用增量训练的方式迭代训练决策树
融合Bagging与Boosting技术训练多棵决策树
对于波动不大、方差较小的数据集, 可以探寻一种比较稳定的分裂准则作为解决办法

python的五大特点是什么

python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。

关于怎么在Python中实现决策树算法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯