原文:http://www.csdn.net/article/2015-10-16/2825926?reload=1

Olivier Grisel(OG)本人在InriaParietal工作,主要研发scikit-learn,使用Python语言编写的最流行的机器学习库之一。OG是机器学习、文本挖掘和自然语言处理领域的专家。大概在几周前,我们的Florian Douetteau (FD)对OG进行了一次访谈,很幸运,我得到这个机会去旁听。

上一篇博文里(CSDN译文:[访谈] Olivier Grisel谈scikit-learn和机器学习技术的未来),我记录了谈话的内容,他们主要探讨了scikit-learn和MLlib,同时OG还对大数据的走向给出了一个自己的观点。访谈中,Olivier讨论了scikit-learn的发展方向,探讨了要如何发展才能足以抗衡新的机器学习库,如原本就设计在分布式数据框中工作的MLlib。期间,他沉醉于比较两个库的优势以及scikit-learn是如何发展到能够对不能在单一服务器上进行处理的数据执行计算。

今天,Olivier深入到技术层面进行探讨,他回答了数据科学初学者提出的所有问题。

不要等待,数据科学从现在开始!

明智地选择大规模

FD:这个问题来自某个机器学习初学者,他不知道该使用哪个框架和算法可以获得更强的扩展能力,你有什么建议呢?

OG:一个很好的规则就是根据你最终必需处理的数据量来抉择,当然还要把未来数据的增量考虑进去。最近,一台配置很好的机器可以有上百G的RAM。当然,原始数据集可能比这更大。一旦你提取了特征并将其转为数值表,你就可以得到更小的数据集,那样你就可以在内存中处理数据并使用scikit-learn运行预测模型。实际上,想要你的系统具有可扩展性,并不意味着你就必须使用MLlib。

大数据基础设施的挑战

FD:人们开始考虑如何管理大量的数据,对于如何得到一个很好的衡量标准,你的建议是什么呢?

OG:在你开始做机器学习之前,从一个基本模型开始很重要。比如,你可以对这些基本模型计算平均值。当你在Spark中做这些基本计算时,你可以看看管道和处理时间,确保在你的模型变得复杂之前,你没有设置一些多余的东西。

我建议他们选择自己数据中的一个子样本,在内存中能装得下,这样就可以使用所有可用的算法来做比较机器学习的分析结果,甚至是那些永远不能部署到整个集群的算法。你要记住,MLlib是通过限制它的算法面板来达到可扩展性功能。这表示它们如今的库并不像R或Python包那样多。子样本总归还是好的,回到小数据世界能确保你遵循正确的方法。

事实上,你也应该这样做,这样你就可以确保当你向你的样本添加更多的数据时,实际上你是在提高你的模型性能。这有利于检查。

将工作分析流程从一种语言(如Python)复制到另一种(如R或Scale),也是个不错的想法。Data Science Studio这种工具,它使得在同一个数据上使用不同的编程语言设计两个管道变得更加容易。有些操作可能在另一些框架上表现的更自然或者更加高效,而且做这种管道转变训练是建立实践直觉的快速方式。一旦你的两个管道产生了一致的输出,那么你可以去请教经验丰富的同事或者专家朋友来帮你快速地检查下代码。他(她)应该知道如何使你的代码更加高效或更加精简并且避免语法错误。

FD:你可以给出一些你或者你的团队使用scikit-learn运行大数据集的例子么?

OG:这真的取决于我们正在研究和试验中的模型。当样本上升到数以万计的时候,一些模型就会失效。我们团队研究的数据集大概有百万兆字节,但是他们做了大量的预处理和降维操作。

对于缺乏经验的用户,这一点真的必须考虑。如果他们研究的数据集真的足够大,他们可能自然而然地选择使用Spark。但这种方法最终可能会以效率较低而失败告终。如果他们多给予一点思考,原本使用Spark需要消耗CPU几个小时来计算的任务,在笔记本上使用scikit-learn可能5分钟就完成了。实际上每种新的技术都是一把双刃剑。

Python VS R

FD:对于数据科学初学者而言,应该如何选择学习哪种语言和框架呢,你有好的建议么?

OG:个人认为,你必须根据你的喜好来选择,如果你身边有这方面的专家,你还可以依据他的情况而定。在数据科学中,交流可以让你学到更多的知识。如果你去参加聚会或者与其他人报名参加Kaggle比赛,那么你一定要抓住与专家互动交流的机会,这真的很重要。与他们相互交流学习的技巧和诀窍是学习数据科学很好的方式。

之后,将分析思路用另一个框架来表达就更加容易了。如果你掌握了一种语言,这种学习语言的方法是一样的。这一点最重要。这对于像Data Science Studio这种工具也是很有用的。你可以用它在一个环境下尝试不同的语言和技术。当你能轻松的比较结果时,将分析思路从一种语言翻译成另一种语言其实很简单,比如Python和R。

Olivier Grisel

最后,让我们再次感谢Olivier!

原文链接:[Interview] Tips for aspiring Data Scientist by Data Master Olivier Grisel (part 2)(编译/刘帝伟 审校/朱正贵、赵屹华 责编/周建丁)

[转][访谈]数据大师Olivier Grisel给志向高远的数据科学家的指引的更多相关文章

  1. [转][访谈] Olivier Grisel谈scikit-learn和机器学习技术的未来

    原文:http://www.csdn.net/article/2015-10-11/2825882 几周前,我们的Florian Douetteau (FD)对Olivier Grisel(OG)进行 ...

  2. 数据降维技术(1)—PCA的数据原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  3. C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  4. EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

    之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...

  5. android 股票数据通过日K获取周K的数据 算法 源码

    目前的数据是从新浪接口获取的, http://biz.finance.sina.com.cn/stock/flash_hq/kline_data.php?symbol=sh600000&end ...

  6. HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

    什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request ...

  7. 本地日志数据实时接入到hadoop集群的数据接入方案

    1. 概述 本手册主要介绍了,一个将传统数据接入到Hadoop集群的数据接入方案和实施方法.供数据接入和集群运维人员参考. 1.1.  整体方案 Flume作为日志收集工具,监控一个文件目录或者一个文 ...

  8. 取A表数据,关联B表任意一条数据

     表A=================== AID, AName 1 jack 2 mary 3 lily 表B================== BID, AID, BName 1 1 aaa ...

  9. DataContext 数据在F5刷新频繁,会出现数据读取错误

    DataContext 数据在F5刷新频繁,会出现数据读取错误 DataContext是 Linq to sql数据模型的底层数据库对象所有LInq数据表对象都是由它派生的, 只要建立一个数据库操作, ...

随机推荐

  1. kafka的相关操作脚本

    总结最近用到的kafka相关命令和脚本. 1.创建Topic./kafka-topics.sh --zookeeper cc13-141:2182 --topic mytopic --replicat ...

  2. weblogic11g重置控制密码

    Reset the AdminServer Password in WebLogic 11g and 12c If you forget the AdminServer password for yo ...

  3. Java之类型的转换

    1.String 类型转化为 int 类型,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. int a = Integer.parseInt(st ...

  4. apache MINA之心跳协议运用

    摘要 心跳协议,对基于CS模式的系统开发来说是一种比较常见与有效的连接检测方式,最近在用MINA框架,原本自己写了一个心跳协议实现,后来突然发现MINA本身带有这样一个心跳实现,感于对框架的小小崇拜, ...

  5. linux系统查看IP地址,不显示IP地址或者只显示127.0.0.1

    在linux系统中输入命令: vi  /etc/sysconfig/network-scripts/ifcfg-eth0 然后显示如下结果 点击I或者是A进入可编辑状态(需要先切换到管理员帐号下,自行 ...

  6. 《转》python学习(9)字典

    转自 http://www.cnblogs.com/BeginMan/p/3156960.html 一.映射类型 我理解中的映射类型是:键值对的关系,键(key)映射值(value),且它们是一对多的 ...

  7. ubuntu下nginx编译安装

    安装依赖库: sudo apt-get install libgd2-xpm sudo apt-get install libgd2-xpm-dev sudo apt-get install libg ...

  8. URLSearchParams 接口定义处理 URL 参数串

    基本使用方法如下 /* * URLSearchParams属性 * @语法:new URLSearchParams(parameter); */ (function(){ var str = &quo ...

  9. Unity3D笔记六 GUI游戏界面

    1.Label:标签控件,可以在游戏中用来展示文本字符串信息,不仅可以写字还可以贴图片. 2.Button:按钮控件,一般分图片按钮和普通的按钮,还有一个连续按钮RepeatButton注意,这个在W ...

  10. git add -A和git add . 的区别

    git add -A和 git add . git add -u在功能上看似很相近,但还是有所差别. git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容 ...