C(或 C++)中的数据科学

数据挖掘 机器学习 大数据 统计数据 编程 C
2021-10-13 20:38:14

我是一名R语言程序员。我也属于数据科学家,但他们来自 CS 以外的其他学科。

这在我作为数据科学家的角色中很有效,但是,由于我的职业生涯开始于R其他脚本/网络语言的基本知识,我觉得在两个关键领域有些不足:

  1. 缺乏扎实的编程理论知识。
  2. 在更快和更广泛使用的语言(如和)方面缺乏具有竞争力的技能水平C这些语言可用于提高管道和大数据计算的速度,以及创建更容易开发成快速的 DS/数据产品后端脚本或独立应用程序。C++Java

解决方案当然很简单——去学习编程,这是我通过参加一些课程(目前是 C 编程)一直在做的事情。

然而,既然我开始解决上面的问题 #1 和 #2,我就会问自己“数据科学这样的语言到底有多可行?CC++

例如,我可以非常快速地移动数据并与用户进行很好的交互,但是高级回归、机器学习、文本挖掘和其他更高级的统计操作呢?

所以。C胜任这项工作——有哪些工具可用于高级统计、机器学习、人工智能和数据科学的其他领域?C或者我是否必须失去通过调用R脚本或其他语言进行编程所获得的大部分效率?

到目前为止,我在 C 中找到的最好的资源是一个名为Shark的库,它提供C/C++能够使用支持向量机、线性回归(不是非线性和其他高级回归,如多项概率等)和其他候选名单(很棒但是)统计功能。

4个回答

或者我必须通过调用 R 脚本或其他语言来降低 C 编程所获得的大部分效率吗?

做相反的事情:学习 C/C++ 来编写 R 扩展。仅将 C/C++ 用于新算法的性能关键部分,使用 R 构建分析、导入数据、制作绘图等。

如果您想超越 R,我建议您学习 python。有许多可用的库,例如用于机器学习算法的scikit-learn或用于构建神经网络的PyBrain等(并使用 pylab/ matplotlib进行绘图,使用iPython 笔记本来开发分析)。同样,C/C++ 对于将时间关键算法实现为 python 扩展很有用。

我同意当前的趋势是使用 Python/R 并将其绑定到一些 C/C++ 扩展以执行计算量大的任务。

但是,如果你想留在 C/C++ 中,你可能想看看 Dlib

Dlib 是一个通用的跨平台 C++ 库,使用契约编程和现代 C++ 技术设计。它是开源软件,并根据 Boost 软件许可证获得许可。

在此处输入图像描述

正如 Andre Holzner 所说,使用 C/C++ 扩展来扩展 R 是一种充分利用双方优势的好方法。您也可以尝试逆向,使用 C++ 并偶尔使用 RInside 包或 R 调用 R 的函数。在这里您可以找到如何

http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html

一旦你在 C++ 中工作,你就会拥有许多库,其中许多是为特定问题而构建的,还有一些更通用的

http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html

http://mlpack.org/

在我看来,理想情况下,要成为一个更全面的专业人士,最好至少了解一种最流行的编程范式过程式、面向对象函数式)的编程语言。当然,我认为RPython是数据科学领域最流行的两种编程语言和环境,因此也是主要的数据科学工具。

Julia在某些方面令人印象深刻,但它试图赶上这两者,并将自己确立为主要的数据科学工具。但是,我认为这种情况不会很快发生,这仅仅是因为R/Python流行、非常大的社区以及现有和新开发的包/库的庞大生态系统,涵盖了非常广泛的领域/领域学习。

话虽如此,许多专注于数据科学、ML 和 AI 领域的包和库都以 R 或 Python 以外的语言实现和/或提供API (有关证据,请参阅此精选列表此精选列表,两者都是非常出色,并对该领域的多样性提供了坚实的视角)。对于以性能为导向专业化的软件来说尤其如此。对于该软件,我看到的项目主要使用 Java、C 和 C++ 实现和/或 API(Java 在数据科学的大数据领域特别受欢迎——因为它与Hadoop及其生态系统很接近——以及在NLP中)段),但其他选项可用,尽管范围更有限,基于域。这两种语言都不是浪费时间,但是您必须根据当前的工作情况、项目和兴趣优先掌握其中的任何一种或全部。所以,为了回答你关于 C/C++(和 Java)可行性的问题,我想说它们都是可行的,但不是作为主要的数据科学工具,而是作为次要工具。

回答你关于 1) C作为潜在的数据科学工具和 2) 它的效率的问题,我想说:1) 虽然可以将C用于数据科学,但我建议不要这样做,因为你会有一个非常很难找到相应的库,或者更难的是自己尝试实现相应的算法;2)您不必担心效率,因为许多对性能至关重要的代码段都是用 C 等低级语言实现的,此外,还有一些选项可以将流行的数据科学语言与 C 接口(例如,Rcpp用于将 R 与 C/C++ 集成: http: //dirk.eddelbuettel.com/code/rcpp.html)。这是对性能更简单但通常相当有效的方法的补充,例如在 R 中一致使用矢量化以及使用各种并行编程框架、包和库。有关 R 生态系统示例,请参阅CRAN 任务视图“使用 R 进行高性能和并行计算”

谈到数据科学,我认为提及可重复研究方法的重要性以及支持这一概念的各种工具的可用性是很有意义的(有关更多详细信息,请参阅我的相关答案)。我希望我的回答是有帮助的。