同为物理PhD,分享自己的经验给你参考
1. 程式语言
Python或R。这两种并不互斥,我们team不少人两种都会。个人觉得重点在:
1. 平行计算(concurrent/multi-threading/processing):根据问题是CPU-bound还是I
/O-bound来选择处理方式
2. iterator/generator:像用deep learning train model时需要的资料都很大,不太
可能全部load到内存,以及做data generator让一笔raw data产生多笔训练资料时都会
需要用到generator
3. profiling tools:要先知道程式的bottleneck在哪才有办法优化
Python 我推荐Micha Gorelick跟Ian Ozsvald写的High performance python这本书
2. 数据库
SQL跟NoSQL基本上都会用到
3. 统计
重中之重。除了不同的machine learning方法,怎么处理空值、极端值、unbalanced dat
a、抽样、假设检定都很重要。特别是假设检定,身为data scientist,不管在哪个产业
,基本上都需要回答“根据现有的资料,哪种情况是最可能的”这种类型的问题。
个人推荐 Garett James, Daniela Witten, Trevor Hastie, Robert Tibshirani 写的 A
n introduction to statistical learning with R 这本书
4. 资料结构跟算法:要有效率的处理软件工程方面的问题,这方面的知识很重要。
我推荐Coursera上面Princeton的Robert Sedgewick跟Kevin Wayne开的Algorithms I & I
I。这门课的精华在programming assignment。每个assignment基本上都会有50-70个test
cases来测试时间跟空间复杂度,还有一些corner cases。不同的情况都要考虑到才能拿
到满分。语言是用Java,但就算没学过应该也不是问题,我那时也是边学边写。题目通常
要你做一个module,里面需要好几个functions 但他只会给你interface,内容都要自己
写。不像吴恩达的machine learning跟deep learning,很多内容都给了,只要把关键的
部份补上。我上了不少online courses,这门课是唯一我认为有难度的。但相对的,通过
的话软工能力可以提升一个层次。
顺便提一下面试的事。我不知道其他公司会怎样准备跟进行,我们会看面试者的博论跟着
作,这都是网络上找的到的资料。我们会问面试者在工作或研究上使用过的工具,例如你
来,那可能会请你解释一下基因算法跟Monte Carlo method,为什么选择这个方法?它
的优点跟缺点?有考虑过其他的方法例如X或Y吗?诸如此类的问题。我们会对面试者当时
做选择背后的思考过程有兴趣,借此了解他工作或研究的广度跟深度。
不确定自己有没有面试过50个人,但30个一定有。结果几乎都是entry level(可能是敝
司太烂强者不想来面)。有些人对自己使用工具背后的原理、假设、限制都不清楚,单纯
call套件下指令。而大部份人选择工具或方法的原因是“因为老师/学长说的”。这并不
能怪他们而是我们的文化就是如此,但很难不令人感到绝望。找个mindsets ok的entry l
evel进来自己训练比较实际。想转data scientist的人不少,但很多都只是想想,真的有
付出行动的不多。往好处想,在台湾你不用付出太多努力就可以赢过不少人。
另一方面,我也去面过十几间公司,不少是想成立资料分析的部门(那些单纯跟风,没算
过成本跟效益的就不提了)。所以面试我的人其实并没有能力评估我究竟适任与否,这也
同样令人绝望。
最后,讲一下资料科学家的工作
1. 资料的清理跟准备
Garbage in garbage out 这可不是说假的。举凡补空值、trimming、处理unbalanced da
taset、de-noise、normalise、feature selection and generation都在这部份。就我自
己的经验,这部分对最终结果的影响是最大的,花费的时间也是最多的。
2. Background research。要唸很多papers,将有机会解决手中问题的方法尽可能找出来
3. 设计实验,包括抽样范围跟方法,实验怎么进行,结果怎么评估
4. 结果的解释跟呈现(资料视觉化)
但在成为资料科学家之前,你必须先是位工程师