您的位置:首页 > 其它

数据科学常用问题集锦及解答

2017-09-07 09:44 246 查看
最近在学习数据科学,遇到了很多相关的问题,在网上也搜索了了很多答案,感觉受益匪浅,现在想在自己的博客中把我遇到的精华问题和答案整理在自己的博客中,供自己以后参考,也方便大家查阅。

 

1. 【求职转行】想往数据分析,偏statistic方向转行,有什么推荐的在线网络课程(MOOC),平台和相关书籍呢?

希望可以把这个贴子推广给所有想学习或者想从事数据科学方向的朋友,楼上的朋友已经说的比较详细了,我作为偏统计方向的分析师也在这里说一下自己的一些学习方向和方法,希望对大家有帮助。
我认为从事Data Analytics或Data Science需要具备以下技能:
Programming (Hack)
这个方面比较广泛,并不是纯粹指编程技能,要不然对于非CS的同学会觉得遥不可及。几个点说一下:
1.    Linux, Bash,
后台相关的命令
一个成熟的数据从业者应该懂得灵活的运用数据寻找,获取,安装,Debug,分享,团队合作,Linux是知名的开源系统,在这个系统下环境的配置将变得非常容易和透明。各种包的安装也会事半功倍,建议是用虚拟机建一个Ubuntu系统来处理自己的数据,再利用pip,conda,git等命令来安装包,链接github,clone优秀的案例并push自己的发现。这里推荐两个学习资源,当然你也可以参考网上的各种博客和官方教程。

Linux:
https://www.linkedin.com/learning/linux-bash-shell-and-scripts
Github:
https://www.linkedin.com/learning/learning-git-and-github
2.    SQL和数据库相关的技能
数据库是另外一个比较重要的部分,想象一下你不可能一直使用Excel去处理数据,毕竟超过十万行的数据用Excel就比较吃力了。这个时候SQL就是必须要用的,可以说这个是一个核心技能。有的人可能会说SQL非常简单,但是当你实际应用的时候你会发现你在学校学的那些简单Query完全就跟不上需求了。下面说一些基本的Query,大家看看掌握的情况:
·      
 
o  where, group by, order by, having, like, count, sum, min, max,distinct, if, join, left join, limit, and, or, cast, row_number, substr,convert, contact
除了基本的SQL,这里我指相关的relational数据库(MySQL,
PostgreSQ等),如果你想分析一些unstructured的数据,比如文字或者image等等,你可以学习一下NoSQL,本人只用过MongoDB和Cassandra,也是主流的两个数据库。感兴趣的可以自己学习一下,这里我觉得两个学习资源不错,一个是codecademy的课程,可以互动式的学习SQL的code,一个是老牌的w3schools的SQL教程,非常的全面。另外MongoDB有自己的线上University,大家有兴趣也可以关注一下。

codecademy:
https://www.codecademy.com/learn/learn-sql
w3schools:
https://www.w3schools.com/sql
MongoDB Univeristy:
https://university.mongodb.com
3.    Python/R语言
是否具备code的能力是数据分析的一个分水岭,senior的数据分析师会至少精通一种数据分析语言,并且如果想做数据挖掘,网络爬虫,交互可视化等等都是需要一定的代码处理和理解能力的。这里主要说Python和R,两者在数据分析领域可以说是各有千秋。
先说一下Python,就我理解Python是一种万能的语言,适用性非常强,除了数据分析还能够做很多的事情,比如编写程序,网站开发,深度学习等等。如果你决定使用Python,那么你需要了解的点主要是各种包的搜索和调用,函数的编写和嵌套,数据类型的把握(list,
tuple, series,  dict),条件判断,循环迭代等等。最好的开发环境我推荐Anaconda。
其次说一下R,它是一个统计学家编写的语言,所以对于各类统计函数的调用,绘图,模型验证,R有着先天的优势。很多参数都可以通过summary直接导出,有的时候在做模型选择优化的时候会觉得得心应手。如果你在使用R,那么了解数据结构(matrix,
array,data.frame, list),数据读取,画图(ggplot2),统计函数(mean, median, sd, var, scale)等就是你的重点了解方向。开发环境建议使用Rstudio。
当然除了我上述的很多功能,两种语言都非常强大,从小的数学计算到大型的deep learning模型,都可以实现。只是两者有明显的使用习惯的区别,建议初学者先选择一种入手,等熟悉之后再双管齐下,最后做到灵活的运用不同的语言到不同的project中去。
现在说一下素材推荐,其实这两种语言最好都是结合我后面将要说的统计知识来一起学习,这样可以更加深入的理解代码和实际问题之间的关系。当然,这里先介绍一下我认为不错的素材,后面说统计方面的时候会更深入的推荐一下。我们上面说了很多线上课程,这里我想先说一下书,个人比较喜欢看书LOL。第一本推荐学习python的宝典:ORELLY的《Learning
Python》,相当全面,但是也很厚。另外两本《Python Cookbook》和《Python for Data Analysis》也是重点推荐的。我个人的方法是,分析主要看《Python
for Data Analysis》,数据结构看《Python Codebook》,《Learning Python》作为你的字典一样的存在,所有的问题都可以回去找。这样一个组合可以让你在学习Python和数据分析过程中事半功倍。
《Learning Python》:
http://shop.oreilly.com/product/0636920028154.do
《Python Codebook》:
http://shop.oreilly.com/product/0636920027072.do
《Python for Data Analysis》:
http://shop.oreilly.com/product/0636920023784.do
除了上述书籍我在说一下线上课程,首先是codecademy和DataCamp都有交互式的课程可以让你瞬间上手编程,其次LinkednInLearning也有相关的Essential
Training课程,如果你已经有了LinkedIn的Premium,那么这些课程都是免费的,学习之后还可以获得LinkedIn的certificate,对于找工作来说是非常棒的。除了上述的当然还有Coursera,Udemy,
Udacity和edX,大家可以根据自己的感觉来学习,当然还是要注意自己的学习成本,不要贪多不厌。

codecademy:
https://www.codecademy.com/learn/learn-python
DataCamp:
https://www.datacamp.com/courses/tech:python
LinkedIn:
http://www.linkedin.com/learning/python-3-essential-training
edX:
https://www.edx.org/course/analytics-python-columbiax-bamm-101x
Ok, Python的素材就先说到这里,后面的统计和机器学习部分还会介绍一些python相关的教程。下面我们来说一下R,首先不得不提的就是非常著名的《R
in action》一书,它可以算是R语言大数据的101教材了。如果你没有任何编程背景,那么通过这本书入门的时候可以搭配R
CRAN的官方文档和数问dataquestion等线上问题集。不管怎么说,我觉得这是一本入门R语言分析的好书。其实还有一本R与统计相关的实战书,我放在后面推荐给大家。线上教程方面就更多了,还是首推DataCamp的交互式课程,然后其他的主流MOOC上也有很多,大家自己可以根据之前介绍python的网址自行搜索。
《R in action》:
http://kek.ksu.ru/eos/DataMining/1379968983.pdf
DataCamp:
https://www.datacamp.com/courses/free-introduction-to-r
Statistics(Foundation)

Ok,总算写完了Programming的部分,感觉还是有很多没有涉及到,但是这个话题就是非常复杂的,有的时候code参杂着统计,统计擦杂着machinelearning,还有visualization和各种domain信息的乱入,导致想分的特别细去介绍数据科学是非常的困难。但是我还是希望用这种逻辑让你明白,这是一个复合型的事业,你想要走的更远就必须不断的学习,让我们一起努力吧,我会在后面的部分尽量补充好相关的教材推荐。
统计部分是我最喜欢的部分,因为我认为这一块是你做数据分析的基础,所以大家不要小瞧统计哦!从最简单的均值,中位数,标准差,方差,概率,假设检验,显著性,抽样等概念到比较深入的模型构建,参数选择,虚拟量化,dummy变量,时间序列,forecasting等,你需要有统计来帮你去得到相应的选择。上文说的代码,编程语言将会是你的工具,而统计将会是你的主导思想。你需要将这种思想结合到你的domain知识里,然后才能够解决相应的project。
就个人经验推荐一些书籍和课程,第一本叫做《NakedStatistics》,这是我最喜欢的统计入门书,作者的语言相当的生动,利用自己学习统计的经历来阐述一些复杂的问题,由于语言比较通俗易懂,所以很多书中的例子可以用在日后工作中来给非统计背景的人来举例,非常的有用。第二本是我最推荐的进阶书,不仅仅只是统计,包括machine
learning我也推荐这本,叫做《The Element ofStatistical Learning》,结构相当的完整而且前瞻性非常强。主要是用R语言做了很多模型和算法,我觉得这是很关键的。有的时候我们总是觉得导入了几个库用了几个包,什么模型啊机器学习啊都做的出来,可是当你带入数据发现结果往往都不好。但是如果你透彻地理解了模型和算法本身,你再去调整模型的时候效果往往会好很多。
另外Freedman的经典中的经典《Statistics》永远是所有喜欢统计的人的必读书目之一。《AIntroduction
to Statistical Learning with Applications in R》也是一本实战的书籍,系统的讲解了如何利用R语言来解决市场调研中的数据问题,相信对于从事市场方向的同学有一定的帮助。《Regression
Analysis by Example》也是一本非常不错的讲解回归模型的书,里面详细介绍了做回归模型需要的相关知识,比如transformation of variables, weighted least squares, correlatederrors, collinear data, variable selection, logistic regression,
GLM, PRM,robust regression等。由于可能回归是我们最常用的统计模型,所以这本书也是强烈建议细读的。
《Naked Statistics》:
https://www.amazon.com/Naked-Statistics-Stripping-Dread-Data/dp/B00CH7FWWU
《The Element of Statistical Learning》:
https://web.stanford.edu/~hastie/Papers/ESLII.pdf
《A Introduction to StatisticalLearning with Applications in R》:
http://www-bcf.usc.edu/~gareth/ISL/ISLR First Printing.pdf
《Regression Analysis by Example》:
https://www.amazon.com/Regression-Analysis-Example-Samprit-Chatterjee/dp/0470905840
《Reading and Understanding MultivariateStatistics》:
https://www.amazon.com/Reading-Understanding-Multivariate-Statistics-Laurence/dp/1557982732
《Reading and Understanding MoreMultivariate Statistics》:
https://www.amazon.com/Reading-Understanding-More-Multivariate-Statistics/dp/1557986983
除了这些书籍之外,还有一些网络课程在这里推荐给大家。edX的ColumbiaX系列里面又统计和机器学习相关的tracking,叫做Statistical
Thinking for Data Science and Analytics,我觉得是一个不错的选择,但是需要耐下心来看。另外还有更全面的一个是Penn State University的网络课程,它其实是一个online的applied
statistics degree,但是所有的教材都是公开的,我个人是从中学到了非常多的知识。

edX:
https://courses.edx.org/courses/course-v1:ColumbiaX+DS101X+1T2016/course/
Penn State University:
https://onlinecourses.science.psu.edu/statprogram/
Machine Learning (DataScience)
说完了programming和statistics,现在来说一下machine learning。我上文提到的《The
Element ofStatistical Learning》在这里我再提一遍,因为其内容也涉及了很多machinelearning的部分,是一本综合性很好的书。三位作者,Trevor,Robert和Jerome也是Stanford的大牛。对于线上课程我推荐Coursera上Andrew的machine
learning课程作为入门,因为吴恩达的风格就是通过精挑细选的课程,长短合适的视屏与精准设置的信息块共同呈现,让你从最基本的理论来了解机器学习。他的新课deep learning也在上周在Coursera上线了,以神经网络原理为主要课程体系,不仅讲了很多machine
learning中遗漏的信息,还能让你学会构建复杂神经网络的所有核心知识。除了吴恩达,Coursera上还有一门叫做Applied Data Sciencewith Python的课程,来自于University
of Michigan,大家也知道这又是一统计强校,其内容从实践的角度上来告诉你如何使用python来进行machine learning,text
mining等,其内容都使用线上jupyter notebook,让你的学习效率更佳。当你学习到以上一些内容了之后,估计你已经对机器学习的基本算法有了一定的了解,但是可能没有一种大局观,对实际问题和数据insight上的把握可能有待提高,这里我推荐一本中文书,是李航老师的《统计学习方法》,其中深入浅出的介绍了很多机器学习的概念,作为系统地把握machine
learning的大局观有很大的帮助。

Coursera-Machine Learning:
https://www.coursera.org/learn/machine-learning
Coursera-Deep Learning:
https://www.coursera.org/specializations/deep-learning   
Coursera-Applied DataScience with Python:
https://www.coursera.org/specializations/data-science-python
《统计学习方法》:
https://goo.gl/wt5V9K
由于楼上已经介绍了Udacity的课程,个人认为也是非常有帮助的,大家可以根据自己的需要来选择。
Visualization
最后一个点简单的提一下,画图可以由简单的Excel Chart到非常复杂的D3.js交互式动态配置,可以说是一个非常不一样的tracking,个人建议如果是focus在分析方面的小伙伴可以不需要投入过多的精力,因为这个东西学习成本太大了,你只需要会用python的matplotlib,seaborn,R的ggplot2,还有现在比较流行的plotly,tableau什么的就够了。如果想进阶的去学习visualization的话,那你就得专攻一下java之类的去写D3和reactjs之类的了。这里介绍一个权威的网站和我认识的一个大牛的作品(给Google做的)供大家参考。

ThePudding:
https://pudding.cool/
An InteractiveVisualization of Every Line in Hamilton:
https://pudding.cool/2017/03/hamilton/
总结,上述了四个方面,希望对大家有所帮助,如果四个方面你都有所涉猎,那么未来还有很多的tracking在等着你,比如大数据spark,Hadoop等计算框架,比如图像处理,深度学习,再比如NLP自然语言处理,语音识别等。如果大家对这些领域也有兴趣,我们可以一起来探讨一下,希望大家都能够不断学习,共同进步
 

问题及答案原出处:
https://dataquestion.com/question/4461-2
2. 机器学习(Machine Learning)对于产品经理有什么帮助?

作为DataScience & Engineering的PM,对于这个问题有最直观的感受。现在ML发展迅速,已经慢慢成为product中必不可少的一个部分。我记得我刚开始做PM的时候,ML还是处于很多企业POC的一个阶段。那个时候我还要和各种stakeholders去解释这个concept,花进力气frontend的PM才会愿意偶尔作为testing加入到product里面。可是一转眼,现在已经成为productdevelopment一个必不可少的环境,无论是前端和后台的engineers,PM,还是businessowner,都是开始拥抱ML成为自己环境的一部分,包括后台的database,pipeline&ETL,
production system,前端的product design,user flow,都要在各自的sprint留下一部分给data
scienceteam去做integration。

生活中有各种的产品经理,了解机器学习从大的方向上来能确保自己的productdevelopment跟上时代发展的潮流,从小的意义来说,正如楼上所说,各种method,包括A/Btesting,还有用户交互的部分,都可以帮助自己的product的更新迭代。

问题及答案原出处:

https://dataquestion.com/question/5127

 

3. 随机森林(RandomForest)和迭代决策树(Gradient Boosting Desicion Tree, GBDT)本后的运算逻辑有什么区别呢?

这两种算法本质上都属于集成学习方法(Ensemble Method),简单说,就是训练多个模型,根据每个模型的投票做预测
优点:
提高预测性能,直接级联不同模型,容易实现,参数较少
不足:多个模型混合在一起是预测结果不可理解,黑盒系统
随机森林(Random Forest, RF)和迭代决策树(GradientBoosting Decision Tree, GBDT)都是通过构建多个决策树来组成集成模型,他们分别属于Bagging和Boosting两大类算法。
在介绍这两类算法前,先说下误差(Error):
误差(Error
)= 偏差(Bias)+
方差(Variance)
对于决策树而言,浅的树(Shallow decision trees)有较大的偏差和较小的方差(high bias and low variance),比较容易造成underfitting; 深的树(Deep
decision trees)则正好想反,有较小的偏差和较高的方差(low bias and high variance),容易造成overfitting.
RF & Bagging:
在讨论RF之前,咱们先来说下Bagging (Bootstrap Aggregation)算法:

1.  用重置抽样(sample with replacement)在原有的训练数据集(training set)
创造新的抽样训练数据集,新的训练数据集和原训练数据集的数量相同,所以其中会有重复的数据,这个过程称为Bootstrapping;

2.重复上一步,例如500次,每一次都会训练出一个决策树;

3.用这500个决策树去进行预测,对于回归问题(Regression),
可以取平均数,对于分类问题(Classification),
用投票产生的大多数来决定。

RF作为Bagging的一种关于决策树的具体算法,通常会产生长的很深的树(fully grown decision trees
),通过减小方差来减小误差,而且在产生树的方式上也是平行的,同时产生的。
Boosting:
有很多Boosting的算法,例如AdaBoost和Gradient Boosting.
但是在大方向上的大致的步骤如下:

1.总的预测值是所有模型的加权平均值;

2.在最初的训练数据集上训练第一个模型,然后把总的预测值建立在着第一个单一模型上;

3.评估总预测值的误差,通过重点关注高误差的模型来调整训练的数据集;

4.利用调整后的训练集来训练新的模型,并把它加到总的预测值中;

5.重复3&4

Boosting产生的一般是比较浅的树,通过减小偏差来减小误差,在产生树的方式上是一个一个产生的,有序列的。
问题及答案原出处:

https://dataquestion.com/question/5710

 

4. 测试数据集(Test Set) 和验证数据集(Validation Set) 之间有何区别呢?

在回答你的问题前,我们先来弄清楚几个概念:
训练数据集(Training Set):
是一些我们已经知道输入和输出的数据集训练机器去学习,通过拟合去寻找模型的初始参数。例如在神经网络(Neural Networks)中,我们用训练数据集和反向传播算法(Backpropagation)去每个神经元找到最优的比重(Weights)。
验证数据集(Validation Set):也是一些我们已经知道输入和输出的数据集,通过让机器学习去优化调整模型的参数,在神经网络中,我们用验证数据集去寻找最优的网络深度(number
of hidden layers),或者决定反向传播算法的停止点;在普通的机器学习中常用的交叉验证(Cross Validation)
就是把训练数据集本身再细分成不同的验证数据集去训练模型。
测试数据集(Test Set):用户测试模型表现的数据集,根据误差(一般为预测输出与实际输出的不同)来判断一个模型的好坏。
为什么验证数据集和测试数据集两者都需要?
因为验证数据集(Validation Set)用来调整模型参数从而选择最优模型,模型本身已经同时知道了输入和输出,所以从验证数据集上得出的误差(Error)会有偏差(Bias)。
但是我们只用测试数据集(Test Set)
去评估模型的表现,并不会去调整优化模型。
在传统的机器学习中,这三者一般的比例为training/validation/test =50/25/25,
但是有些时候如果模型不需要很多调整只要拟合就可时,或者training本身就是training+validation(比如cross
validation)时,也可以training/test=7/3.
但是在深度学习中,由于数据量本身很大,而且训练神经网络需要的数据很多,可以把更多的数据分给training,而相应减少validation和test
问题及答案原出处:
https://dataquestion.com/question/5837-2
 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: