返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何使用c++从头开始实现决策树
  • 182
分享到

如何使用c++从头开始实现决策树

2023-06-15 05:06:27 182人浏览 安东尼
摘要

小编给大家分享一下如何使用c++从头开始实现决策树,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python已经成为数据科学的语言之王。大多数新的数据科学家和程序

小编给大家分享一下如何使用c++从头开始实现决策树,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

python已经成为数据科学的语言之王。大多数新的数据科学家和程序员继续学习Python作为他们的第一门语言。这是有充分理由的;Python具有较浅的学习曲线、强大的社区和丰富的数据科学库生态系统。

我用Python开始了我的数据科学之旅,它仍然是我解决数据科学问题最常用的工具。我很想更好地理解Python从您那里抽象出了什么,以及用性能更高的语言编写更快代码的成本与好处。

为了有代表性地介绍c++,我需要一个代表性的应用程序,c++将是一个合适的选择。从头实现一个分类决策树分类器似乎是一个适当的挑战。这已经被证明是一个测试但有益的学习旅程,我想分享一些我在这个过程中的主要经验。

关键经验:

  • c++很少提供代码提示或保护

  • 尽早做出好的架构决策

  • 从长远来看,编写测试将为您节省时间

  • 语言的在线社区非常有价值

  • 可移植性是一个重要的考虑因素

在Python中,你可以做很多事情。您可以创建一个变量,随心所欲地改变它的类型,然后不必担心如何处理它。这能让你在执行过程中改变想法。非常适合动态迭代原型设计。

在c++中,您必须预先决定您希望您的变量是什么类型。您还必须预先决定希望函数返回的类型。如果您声明错误,例如试图从一个已经声明为返回整数的函数返回一个字符串,那么您的进程将会停止。在这种情况下,编译器将阻止您编译程序,通常带有一个令人费解的错误消息。令人沮丧的是,编译器是您的朋友,它会在这个问题导致后续问题之前预先提醒您。在Python中,只有在太晚的时候才发现问题是很常见的,比如在代码投入生产之后。

如何使用c++从头开始实现决策树

在上面的示例中,编译器捕获定义为返回试图返回字符串的整数的函数。

也有编译器不支持您的情况。访问一个被认为存储在特定内存地址的变量时,可能只收到一个垃圾值,因为该变量已经被删除了。在这里,您通常不会在编译时收到错误,而且很容易在代码中留下错误,而您对此却浑然不觉。

如何使用c++从头开始实现决策树

在上面的示例中,即使我们试图访问已被删除的变量的内存地址的值,编译也不会给出错误。

尽早做出好的架构决策

在Python中,很容易在尝试解决问题的早期阶段就开始编写解决方案。由于c++的灵活性和较慢的开发速度,这种方法在使用c++时不能很好地工作。

在这个项目中,我最初使用的是我的python方法,即只编写代码,而不绘制端到端解决方案。最后,我坐下来,想出了一个解决这个问题的总体架构。

下面列出了在实现决策树分类器中开发的关键对象。它们包括一个node类和一个Tree类,以及它们相关的属性和方法,并且大部分可以在编写任何代码之前定义:

Node- Node constructor- Node destuctor- Attributes   - children nodes   - data   - best split feature chosen   - best split cateGory chosen- Methods   - giniImpurity() - metric for scoring quality of split   - bestSplit() - best split feature and categoryTree- Tree constructor- Tree destructor- Attributes   - root node of tree- Methods   - traverse() - traverse nodes of tree   - fit() - fit tree to dataset   - predict() - make predictions classes with unseen data   - CSVReader() - read a csv

决策树项目的核心文件(不包括测试文件)如下所示,以供参考。

. ├── CMakeLists.txt ├── CSVReader.cpp ├── CSVReader.hpp ├── DecisionTree.cpp ├── DecisionTree.hpp ├── Main.cpp ├── Node.cpp ├── Node.hpp └── README.md

一旦该体系结构就位,解决方案自然就会遵循。对类及其成员函数(类和函数参数以及返回的对象)的接口进行前瞻性设计也可以使事情变得更加容易。

从长远来看,编写测试将为您节省时间

由于c++缺乏安全性,所以测试代码的每个部分是否都成功地完成了预期的功能是至关重要的。用于c++的谷歌Test测试框架很适合这个项目,它使用CMake构建。

以可测试的方式编写代码可以更容易地识别和隔离bug。方法是为实现的类编写静态定义的成员函数。静态定义的成员函数可以在没有父类实例化的情况下独立执行。这使得为完成决策树业务逻辑的一个方面的每一个功能编写特定的、独立的测试用例成为可能。

如何使用c++从头开始实现决策树

上面显示了在终端中通过测试的谷歌Test的输出。

语言的在线社区非常有价值

python开发人员有一个开发人员社区,使用像Stack Overflow和博客这样的工具为集体知识做出贡献。此资源是Python数据科学的命脉。c++没有等价的社区。在谷歌上搜索开发c++代码时遇到的许多问题和错误消息,往往会得到没有帮助的结果。一种语言的社区价值很大。

如何使用c++从头开始实现决策树

从上面我们可以看到,现在每个月被回答的与Python相关的问题比c++多4倍。在这里查看这些统计数据的当前状态。

可移植性是一个重要的考虑因素

在Python中,你可以确信任何安装了Python解释器的系统都能够执行你的Python程序。而在c++中,你就没有这种特权了。由于c++是一种编译语言,在运行程序之前必须先编译程序,而且必须针对要运行程序的宿主的体系结构来编译它。

当尝试使用GitHub Actions远程测试代码时,这成为一个重要的问题。由于主机是不同的操作系统和架构,因此需要在虚拟机上测试代码之前编译代码。这是部署代码时需要管理的额外开销。

总结

学习像c++这样的低级语言可以让你接触到许多快速程序所需的核心概念,如内存管理、数据结构和编译语言。它让人们意识到Python中预先实现的数据结构,比如pandas DataFrames,将拥有处理内存管理的系统,这些系统必须做出一系列假设,因此有局限性。

在实践中,不太可能有很多数据科学家会使用c++来解决实验性的数据科学问题,但是Python不再是最好的工具,例如编写快速的数据解析器或实现昂贵的算法。即使在这种情况下,我也将探索现代低级语言,如Go-lang和Rust,而不是c++。c++的语法让人感觉很冗长,而且它缺乏许多可以从这些现代语言中获得的安全特性。

您可以在这里从头看到c++决策树分类器的完整源代码。您还可以在这里找到一个示例jupiter notebook,它直接从Python调用已实现的决策树分类器,并在Titanic数据集上训练决策树。https://github.com/hlamotte/decision-tree

以上是“如何使用c++从头开始实现决策树”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网其他教程频道!

--结束END--

本文标题: 如何使用c++从头开始实现决策树

本文链接: https://lsjlt.com/news/277994.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用c++从头开始实现决策树
    小编给大家分享一下如何使用c++从头开始实现决策树,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python已经成为数据科学的语言之王。大多数新的数据科学家和程序...
    99+
    2023-06-15
  • 教你用c++从头开始实现决策树
    Python已经成为数据科学的语言之王。大多数新的数据科学家和程序员继续学习Python作为他们的第一门语言。这是有充分理由的;Python具有较浅的学习曲线、强大的社区和丰富的数据...
    99+
    2024-04-02
  • 使用Python中从头开始构建决策树算法
    决策树(Decision Tree)是一种常见的机器学习算法,被广泛应用于分类和回归任务中。并且再其之上的随机森林和提升树等算法一直是表格领域的最佳模型,所以本文将介绍理解其数学概念,并在Python...
    99+
    2023-08-31
    算法 python 决策树 机器学习
  • 使用Python从头开始手写回归树
    为了简单起见这里将使用递归来创建树节点,虽然递归不是一个完美的实现,但是对于解释原理他是最直观的。首先导入库import pandas as pd import numpy as np import matplotlib.pyplot as...
    99+
    2023-05-14
    数据 Python 回归树
  • Java如何实现决策树算法
    小编给大家分享一下Java如何实现决策树算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,...
    99+
    2023-05-30
    java
  • 从头开始学习Go教程:如何使用数组
    Go语言是一门新兴的编程语言,它的设计目标是提供一种简单、高效、安全的编程语言。数组是一种常见的数据结构,在Go语言中也有自己的实现方式。在本文中,我们将介绍如何使用数组,包括如何定义、初始化、访问和操作数组。 定义数组 在Go语言中,定...
    99+
    2023-11-04
    教程 数组 django
  • 如何在Python中使用决策树
    这期内容当中小编将会给大家带来有关如何在Python中使用决策树,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语...
    99+
    2023-06-14
  • python如何实现决策树分类算法
    今天小编给大家分享一下python如何实现决策树分类算法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前置信息1、决策树决策...
    99+
    2023-07-02
  • 从头开始:如何在Windows上使用Java IDE进行异步编程?
    在现代应用程序开发中,异步编程已经成为一项必不可少的技能。异步编程可以帮助程序员在处理大量数据和网络请求时提高程序的性能和响应能力。在Java中,异步编程可以使用多线程、回调函数或者使用Java 8中的CompletableFuture等...
    99+
    2023-07-22
    ide windows 异步编程
  • MYSQL如何实现连续签到断签一天从头开始的功能
    小编给大家分享一下MYSQL如何实现连续签到断签一天从头开始的功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1,创建测试表C...
    99+
    2024-04-02
  • 如何在Python中实现一个决策树算法?
    作者:禅与计算机程序设计艺术 1.简介 在机器学习领域,决策树(decision tree)是一种常用的模式分类算法。它能够将输入数据划分成不同类别或不同输出值,并据此做出预测。而对于复杂的数据分析任...
    99+
    2023-10-23
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • Flex2.0如何从零开始实现文件上传
    这篇文章给大家介绍Flex2.0如何从零开始实现文件上传,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Flex2.0 从零开始实现文件上传以前在Flex1.5的时候也做过,不过当初使用的是oreilly的cos.jar...
    99+
    2023-06-17
  • 如何开始使用C++进行Web开发?
    要使用 c++++ 进行 web 开发,需要使用支持 c++ web 应用程序开发的框架,如 boost.asio、beast 和 cpp-netlib。开发环境中,需要安装 c++ 编...
    99+
    2024-05-11
    c++ web开发 git
  • 如何用Python从零开始实现简单遗传算法
    今天就跟大家聊聊有关如何用Python从零开始实现简单遗传算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。遗传算法是一种随机全局优化算法。连同人工神经网络,它可能是最流行和广为人知...
    99+
    2023-06-15
  • 从头开始:如何使用Go、Bash和Django创建自己的二维码生成器?
    二维码(QR Code)是一种二维码码制,可通过扫描二维码来获取信息。它已经成为了现代生活中不可或缺的一部分。在这篇文章中,我们将学习如何使用Go、Bash和Django创建自己的二维码生成器。通过这个项目,你将学习如何使用不同的编程语言和...
    99+
    2023-07-23
    bash django 二维码
  • 如何用C语言实现圣诞树
    这篇文章主要介绍“如何用C语言实现圣诞树”,在日常操作中,相信很多人在如何用C语言实现圣诞树问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用C语言实现圣诞树”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-22
  • 怎么用Python中从头开始的实现完整的异常检测算法
    这篇文章主要介绍“怎么用Python中从头开始的实现完整的异常检测算法”,在日常操作中,相信很多人在怎么用Python中从头开始的实现完整的异常检测算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Py...
    99+
    2023-06-16
  • 如何使用JavaScript实现树结构
    这篇文章主要为大家展示了“如何使用JavaScript实现树结构”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用JavaScript实现树结构”这篇文章吧...
    99+
    2024-04-02
  • 从零开始学习如何导出数据的Golang实现
    从零开始学习如何导出数据的Golang实现 在日常的开发过程中,经常会遇到需要将数据导出到文件中的情况。无论是将数据库中的数据导出为csv文件,还是将日志数据导出为文本文件,我们往往需...
    99+
    2024-02-28
    学习 golang 数据导出 csv文件 golang开发 标准库
  • 从零开始:如何使用命令安装django框架
    从零开始:如何使用命令安装Django框架 Django是一个流行的Python Web框架,它为开发者提供了一个便捷而快速的方式来构建高质量的Web应用程序。在开始使用Django之前,我们首先需要将框架安装在我们的开发环境中...
    99+
    2024-01-19
    从零开始 Django框架 安装命令
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作