我是一个 R 语言程序员。我也是被认为是数据科学家的人之一,但他们来自计算机科学以外的学科。

然而,这对于我作为数据科学家的角色来说效果很好,因为我的职业生涯始于 R 由于只有其他脚本/网络语言的基本知识,我觉得在两个关键领域有些不足:

  1. 缺乏扎实的编程理论知识。
  2. 在更快、更广泛使用的语言(如 C, C++Java, ,它可以用来提高管道和大数据计算的速度,以及创建可以更容易开发成快速后端脚本或独立应用程序的 DS/数据产品。

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

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

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

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

迄今为止我在 C 中找到的最好的资源是一个名为 鲨鱼, , 这使 C/C++ 使用支持向量机、线性回归(不是非线性和其他高级回归,如多项式概率等)以及其他(很棒但)统计函数的候选列表的能力。

有帮助吗?

解决方案

还是我必须通过调用r脚本或其他语言在C中编程而获得的大部分效率?

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

如果您想超越R,我建议您学习Python。有许多可用的图书馆 Scikit-Learn 用于机器学习算法或 pybrain 用于构建神经网络等(并使用Pylab/matplotlib 用于绘图和 ipython笔记本 进行分析)。同样,C/C ++对于实现时间关键算法作为Python扩展很有用。

其他提示

正如安德烈·霍尔茨纳(Andre Holzner)所说的那样,用C/C ++扩展扩展R是利用双方最好的好方法。另外,您可以尝试与Rinside软件包的c ++一起使用c ++和ocationally呼叫功能。

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/

我同意当前的趋势是使用Python/R并将其与某些C/C ++扩展绑定到计算昂贵的任务。

但是,如果您想留在C/C ++,您可能想看看Dlib:

DLIB是使用合同编程和现代C ++技术设计的通用跨平台C ++库。它是开源软件,并根据Boost软件许可获得许可。

enter image description here

在我看来,理想的情况是,成为一个更 全面发展 专业,很高兴知道 至少 最流行的一种编程语言 编程范式 (程序, 面向对象, 功能性的)。当然,我认为 Python 作为两种最流行的编程语言和环境 数据科学 因此, 基本的 数据科学工具。

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

话虽如此,许多专注于数据科学、机器学习和人工智能领域的软件包和库都 实施的 和/或提供 蜜蜂 使用 R 或 Python 以外的语言(有关证明,请参阅 这个精选清单这个精选清单, ,两者都非常出色,并且为该领域的多样性提供了坚实的视角)。对于以下情况尤其如此 绩效导向 或者 专门 软件。对于该软件,我见过大多数使用 Java、C 和 C++ 实现和/或 API 的项目(Java 在 大数据 数据科学的一部分 - 由于它接近 Hadoop 及其生态系统 - 并且在 自然语言处理 段),但其他选项也是可用的,尽管其范围更加有限,基于域。这些语言都不是浪费时间,但是您必须 优先考虑 根据您当前的工作情况、项目和兴趣掌握其中的任何一个或全部。因此,为了回答您关于 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 进行高性能和并行计算”.

谈到 数据科学, ,我认为提及其重要性是非常有意义的 可重复的研究 方法以及各种可用性 工具, ,支持这个概念(更多细节,请参见 我的相关答案)。希望我的回答对您有所帮助。

R是数据科学家的关键工具之一,无论您做什么都不会停止使用它。

现在谈论C,C ++甚至Java。他们是好的流行语言。您是否需要它们,或者需要它们取决于您所拥有的工作类型。从个人经验来看,有很多用于数据科学家的工具,您总是会觉得自己不断学习。

您可以将Python或Matlab添加到可以学习并继续添加的内容中。最好的学习方法是使用您不满意的其他工具进行工作项目。如果我是您,我会在C之前学习Python。它在社区中比C更具使用。但是学习C并不是您的时间。

作为数据科学家,当您需要将机器学习纳入现有生产引擎中时,其他语言(C ++/Java)就派上用场。

威化饼 是维护良好的C ++类库和命令行分析软件包。它有监督和无监督的学习,大量的数据操纵工具,稀疏的数据工具以及其他内容,例如音频处理。由于它也是班级库,因此您可以根据需要扩展它。即使您不是开发C ++引擎的人(您不会发生),这也可以使您对开发人员进行原型,测试和交付一些东西。

最重要的是,我相信我对C ++和Java的了解确实可以帮助我了解Python和R的工作方式。只有在您了解下面发生的事情时,任何语言才能正确使用。通过学习语言之间的差异,您可以学会利用主语言的优势。

更新

对于具有大数据集的商业应用程序,Apache Spark -MLLIB很重要。在这里,您可以使用Scala,Java或Python。

如果您的目标是“但是,高级回归,机器学习,文本挖掘和其他更高级的统计操作”,我将渴望理解为什么您需要另一种语言(与Python形成python)。
对于这种事情,C是浪费时间。这是一个很好的工具,但是在Java出来的大约20年中,我很少编码C。
如果您更喜欢R的功能性编程方面,请在与C进行太多程序性不良习惯编码之前先学习Scala。
最后,学会使用Hadley Wickham的图书馆 - 它们将为您节省大量时间进行数据操纵。

有一些C ++工具用于统计和数据科学,例如root https://root.cern.ch/drupal/ ,蝙蝠 https://www.mppmu.mpg.de/bat/ ,Boost或OpenCV

不确定是否已经提到过,但是也有 Vowpal Wabbit 但这可能仅针对某些问题。

看一眼 英特尔·达尔 正在进行。它对英特尔CPU体系结构进行了高度优化,并支持分布式计算。

大数据可扩展的机器学习解决方案:

我会添加我的$ .02,因为在以前的所有帖子中似乎都没有解决过关键领域 - 大数据的机器学习!

对于大数据,可伸缩性是关键,R不足。此外,Python和R之类的语言仅适用于通常用其他语言编写的可扩展解决方案的接口。我之所以如此区分,不是因为我想贬低使用它们的人,而是因为它对数据科学界的成员非常重要,以了解真正可扩展的机器学习解决方案的样子。

我大部分工作 关于分布式内存群集的大数据. 。也就是说,我不仅使用一台16个核心机器(单个主板上共享该主板内存的4个四核处理器),我还使用了一个小型群集64 16个核心机器。这些分布式内存簇的要求与共享内存环境大不相同,大数据机器学习需要在许多情况下分布式内存环境中可扩展的解决方案。

我们还在专有数据库产品中使用C和C ++。我们所有的高级内容均在C ++和MPI中处理,但是触及数据的低水平内容都是所有寿命和C样式的角色阵列,以使产品非常快地保持。 STD字符串的便利根本不值得计算成本。

可提供分布式可扩展机器学习功能的C ++库 - mlpack.

但是,API还有其他可扩展的解决方案:

Apache Spark有一个可扩展的机器学习库 mlib 您可以与之接口。

TensorFlow 现在有 分布式TensorFlow 并有一个 C ++ API.

希望这可以帮助!

许可以下: CC-BY-SA归因
scroll top