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


40

我是R语言程序员。我也是一群被认为是数据科学家,但来自CS以外的学科的人。

在我作为数据科学家的角色中,这表现得很好,但是,由于我的职业生涯开始R并且仅对其他脚本/网络语言有基本了解,所以我在两个关键领域感到不足:

  1. 缺乏扎实的编程理论知识。
  2. 缺乏技术人员在像更快和更广泛使用的语言有竞争力的水平的CC++并且Java,它可以被利用以提高管道和大数据计算的速度以及创建其中可以更容易地发展成快速DS /数据产品后端脚本或独立应用程序。

解决方案当然很简单-继续学习编程,这是我通过注册某些类(当前为C编程)所做的事情。

但是,既然我现在开始解决上述问题#1和#2,我CC++问自己“ 数据科学这样的语言以及对于数据科学来说,这些语言的可行性如何 ”。

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

所以。可以C完成这项工作-哪些工具可用于高级统计,ML,AI和其他数据科学领域?还是我必须放弃C通过调用R脚本或其他语言进行编程而获得的大多数效率?

迄今为止,用C,我发现最好的资源是一个叫库鲨鱼,这使C/ C++使用支持向量机,线性回归(未非线性等先进的回归就像多项概率等)以及其他的短名单的能力(很棒)统计功能。


5
这个问题似乎主要基于意见。请考虑改写。也许会问哪些数据科学工具可用于C / C ++,或者哪些类型的应用程序使用这些语言。
sheldonkreger

1
@sheldonkreger这就是我要问的问题,我会说得更清楚,谢谢
Hack-R

1
我已经使用了Waffles(C ++)将机器学习整合到现有的C ++引擎中。
皮特2015年

@Pete,如果您可以将其纳入答案,我可能会将其标记为解决方案
Hack-R

1
元工具包可在C ++中获得:meta-toolkit.github.io/meta。Coursera上有一门使用它的课程,它仍然在第1周,因此您可能需要看看。该课程称为“文本检索和搜索引擎”。
LauriK 2015年

Answers:


35

还是我必须通过调用R脚本或其他语言来放弃使用C编程所获得的大部分效率?

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

如果您想超越R,我建议您学习python。有很多可用的库如scikit学习的机器学习算法或PyBrain建立神经网络等。(和使用pylab / matplotlib的绘图和IPython的笔记本电脑来发展你的分析)。同样,C / C ++对于将时间关键型算法实现为python扩展很有用。


1
谢谢,安德烈。我确实经常使用Pybrain;对我来说,Python是介于R和C之间的中间人,但是我仍然想学习C以提高代码的速度和更广泛的应用。我之所以选择它作为解决方案,是因为我没有想到要使用C / C ++编写R扩展,这是我绝对要做的一个非常好的主意。谢谢!!
Hack-R

1
我赞同学习Python的观点。我与大型数据集以及利用R分析这些数据集的数据科学家合作。尽管我很小的时候就学过C,但是Python是真正为我带来价值的程序员和协助这些数据科学家的一种语言。因此,要称赞团队而不是自己。
Glen Swan 2015年

1
类似地,通过用cython(基本上也是C)编写来加快python的运行速度。我不得不说我还没有自己使用它。使用现有的库几乎是无法完成的(例如scikit-learn,python中的pandas [它们是用cython编写的,因此您不必这样做!])。
seanv507 2015年

其他一些有用的python库包括:pandas,numpy,scipy等。将其添加以支持学习python :)
Shagun Sodhani 2015年

这是现场。我要指出的是,如果您没有CS的背景知识,那么比python的底层函数或R的软件包更有效地编写代码的机会就很少。我用C ++编程了13年,但仍然认为内存管理和性能优化的某些方面我做得不好。另外,python&R具有非常聪明的计算机科学家来优化分发问题,因此C语言实际上将被降级为极低延迟的系统。
jagartner

10

正如Andre Holzner所说的那样,用C / C ++扩展来扩展R是一种利用双方最佳优势的好方法。您还可以尝试使用C ++进行逆运算,并使用RInside包o 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/


9

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

但是,如果您希望使用C / C ++,则可能需要看看 Dlib

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

在此处输入图片说明


另一个非常有用的答案。您是否知道我们是否可以自由复制该图像(以防我想将其放入演示文稿或博客等)?另外,当它说“> 2万个样本”时,“我想知道它的意思是“样本”还是“样本中的观测值”?
Hack-R

2
我是dlib的作者。随时随地将图像发布到:)。此外,> 20k样本意味着您有20k个向量或其他任何向量。每个样本中有多少个变量是一个单独的问题。
戴维斯·金

@ Hack-R“样本”是统计/机器学习中那些重载的术语之一,有时它表示从总体中提取的一组实例(如“样本大小”,“样本均值”等),有时它是表示单个实例(如“在10K样本上训练分类器”中所述)。
Tim Goodman

6

在我看来,理想的情况是,要成为一个更加全面的专业人士,很高兴知道至少一种用于最流行的编程范例过程面向对象功能)的编程语言。当然,我将RPython视为数据科学以及主要数据科学工具的两种最受欢迎​​的编程语言和环境。

朱莉娅在某些方面给人留下深刻的印象,但它试图追赶这两个方面,并将自己确立为主要的数据科学工具。但是,由于R / Python普及,非常庞大的社区以及现有和新开发的软件包/库的巨大生态系统(涵盖了广泛的领域/领域),我认为这不会很快发生。研究。

话虽这么说,但许多专注于数据科学,ML和AI领域的软件包和库都是用R或Python以外的语言实现和/或提供API的(为证明起见,请参见此策划列表本策划列表,两者优秀,并为该领域的多样性提供了扎实的见解)。对于面向性能的专用的软件尤其如此。对于该软件,我看过的项目中大多数具有Java,C和C ++的实现和/或API(由于Java 与Hadoop及其生态系统非常接近,因此Java在数据科学的大数据领域特别受欢迎)以及NLP中细分),但其他选项也可以使用,尽管在很大程度上是基于域的。这两种语言都不会浪费时间,但是您必须根据当前的工作状况,项目和兴趣来优先掌握其中的任何一种或全部。因此,要回答您有关C / C ++(和Java)的可行性的问题,我想说它们都是可行的,但是不是作为主要的数据科学工具,而是作为辅助的工具。

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

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


5

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

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

您可以将Python或Matlab添加到要学习的东西中,并继续添加。最好的学习方法是使用您不熟悉的其他工具来进行工作项目。如果您是我,我会在C之前学习Python。在社区中比C使用更多的Python。但是学习C不会浪费您的时间。


我知道您对大量工具的意思!我告诉我的实习生不要分散注意力,只专注于一两件事,但是很难接受我自己的建议。
Hack-R

5

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

Waffles既是维护良好的C ++类库又是命令行分析包。它具有监督和无监督的学习,大量的数据处理工具,稀疏的数据工具以及诸如音频处理之类的其他功能。由于它也是一个类库,因此您可以根据需要扩展它。即使您不是开发C ++引擎的人(也不一定会),这也将使您能够进行原型设计,测试并将某些东西移交给开发人员。

最重要的是,我相信我对C ++和Java的了解确实有助于我理解Python和R的工作方式。仅当您对底层情况有所了解后,才能正确使用任何语言。通过学习语言之间的差异,您可以学习利用主要语言的优势。

更新资料

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


2

如果您的目标是“但高级回归,机器学习,文本挖掘和其他更高级的统计操作呢?”,我将很想理解为什么您需要另一种语言(除Python外)。
对于这种事情,C是浪费时间。它是一个很好的工具,但是自Java出现以来大约20年以来,我很少编写C代码。
如果您更喜欢R的函数编程方面,请在开始使用C进行过多程序性不良习惯编程之前先学习Scala。 。
最后学会用哈德利韦翰的图书馆-他们会为您节省大量的时间做数据操作。


因为与C这样的语言相比,R和Python这样的语言非常慢/效率低。因此,在处理大量数据和计算时,如果您可以用C做某事,它的速度要比R中做得快。我喜欢并使用哈德利的套餐!
Hack-R


1

不确定是否已经提到它,但是也有vowpal wabbit,但是它可能仅特定于某些类型的问题。


1
看起来很有趣。我只看了一下链接,但是提到的模型类型将非常有用。但是,它是可以在程序中使用的常规C库吗?我将不得不进一步调查。
Hack-R

0

看一看正在进行中的英特尔DAAL。它针对Intel CPU架构进行了高度优化,并支持分布式计算。


0

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

我将添加$ .02,因为在以前的所有文章中似乎都没有涉及到一个关键领域- 大数据的机器学习

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

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

我们还在专有数据库产品中的任何地方都使用C和C ++。我们所有的高级内容都是用C ++和MPI处理的,但是涉及数据的低级内容都是long和C样式字符数组,以使产品保持非常快的速度。标准字符串的便利性根本不值得计算成本。

提供可用的,可扩展的机器学习功能的C ++库-MLPACK很少

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

Apache Spark具有一个可扩展的机器学习库,称为MLib,您可以与该库进行交互。

而且Tensorflow现在已经分发了tensorflow并具有C ++ api

希望这可以帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.