文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

python决策树算法怎么实现

2023-06-15 01:52

关注

这篇文章将为大家详细讲解有关python决策树算法怎么实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1、步骤

计算数据集S中的每个属性的熵 H(xi)

选取数据集S中熵值最小(或者信息增益最大,两者等价)的属性

在决策树上生成该属性节点

使用剩余结点重复以上步骤生成决策树的属性节点

2、实例

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

python有哪些常用库

python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

关于“python决策树算法怎么实现”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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