数据科学家必会的10个统计分析方法
↑↑↑点击上方蓝字,回复资料,10个G的惊喜
来源:THU数据派 转载:经济结构与周期
导读:本文站在统计学家的角度对数据科学常用的一些技术方法进行总结,帮助读者建立直观印象。内容对应的R代码可以在作者的GitHub上找到。
无论你在数据科学中是何种立场,你都无法忽视数据的重要性,数据科学家的职责就是分析、组织和应用这些数据。
著名求职网站Glassdoor根据庞大的就业数据和员工反馈信息,将数据科学家排名为美国最佳的25个工作之首。虽然名头不小,但毫无疑问,数据科学家所做的具体工作是不断发展变化的。随着机器学习等技术越来越普及,像深度学习这样的新兴领域在研究人员、工程师以及聘用他们的公司中成为新宠,数据科学家们将继续在创新浪潮和技术进步中崭露头角。
尽管具有强大的编程能力很重要,但数据科学家不需要都是软件工程师(实际上会用Python你就可以上路了)。数据科学家处于编程、统计学和批判性思维的交叉区域。正如Josh Wills所说:“数据科学家是这样一种人,他比任何程序员都更懂统计,并且他比任何统计学家都更懂编程”。
我认识很多想转行数据科学家的软件工程师,他们盲目地使用TensorFlow或者Apache Spark等机器学习框架去处理数据,却没有深入理解背后的统计理论。因此本文要谈一谈统计学习(statistical learning),它是源于统计学和泛函分析的一个机器学习理论框架。
00 为什么要学习统计学习?
首先,为了知道如何以及何时使用各种分析方法,理解各种分析方法背后的思想很重要。要想掌握更精巧复杂的方法,你必须先理解较简单的方法;其次,当你想准确地评估一种分析方法的效果时,你得知道其运行的多好或者多么不好;第三,这是一个令人兴奋的研究领域,在科学、业界和金融领域有重要的应用。最后,统计学习也是一名现代数据科学家的重要素养。一些统计学习的代表性问题包括:
找出前列腺癌的高危因素
根据对数周期图对一个音位进行分类
根据人口统计学资料、饮食和临床测量数据预测某人是否会得心脏病
自定义一个垃圾邮件检测系统
识别手写的邮政编码数字
确定一个组织样本属于哪一类癌症
建立人口调查数据中工资和人口统计学变量之间的关系
在大学的最后一个学期,我完成了一门数据挖掘的独立学习课程。该课程涵盖了来自3本书的大量材料:《Intro to Statistical Learning》(Hastie, Tibshirani, Witten, James), 《Doing Bayesian Data Analysis》 (Kruschke),和《Time Series Analysis and Applications》 (Shumway, Stoffer)。我们在贝叶斯分析、马尔科夫链、蒙特卡洛、层次建模、监督学习和非监督学习方面做了大量的练习。
这些经历加深了我对数据挖掘的兴趣,并使我确信要在此领域进一步专注。最近我完成了Stanford Lagunita的统计学习在线课程,它涵盖了我在独立学习课程中读过的《Intro to Statistical Learning》的全部内容。在接触了这本书两次之后,我想分享这本书中的10个统计分析方法,我相信任何数据科学家,若想更有效的处理大数据集,都应该学习这些方法。
在介绍这10个分析方法之前,我想先对统计学习和机器学习做一个区分。我曾经写过一篇关于机器学习的很受欢迎的文章,所以我相信我有专业能力来区分二者:
机器学习是人工智能的一个子领域,统计学习是统计学的一个子领域;
机器学习强调大规模应用和预测准确性,统计学习强调模型及其可解释性(interpretability),精度(precision)和不确定性(uncertainty)。
但是这种区别已经越来越模糊,并且存在大量交叉。此外,机器学习的市场营销做的更好。
01 线性回归
在统计学中,线性回归是一种通过拟合因变量(dependent)和自变量(independent variable)之间最佳线性关系来预测目标变量的方法。最佳拟合是通过确保每个实际观察点到拟合形状的距离之和尽可能小而完成的。最佳拟合指的是没有其他形状可以产生更小的误差了。线性回归的两种主要类型是:简单线性回归(Simple Linear Regression)和多元线性回归(Multiple Linear Regression)。简单线性回归使用单一的自变量,通过拟合出最佳的线性关系来预测因变量。而多元线性回归使用多个自变量,拟合出最佳的线性关系来预测因变量。
选择任意两个你日常生活中使用的相关的东西。比如,我有过去3年中自己每月开支、每月收入、每月旅行次数的数据,现在我想回答下列问题:
明年我每月的开支会是多少?
哪个因素(每月收入还是每月旅行次数)在决定我的每月开支时更重要?
每月收入、每月旅行次数是如何与每月支出相关的?
02 分类
分类是一种数据挖掘技术,通过确定一组数据所属的类别以实现更准确的预测和分析。分类有时候也称为决策树,是对大型数据集进行分析的利器之一。常用的分类方法有两种:逻辑回归和判别分析(Discriminant Analysis)。
逻辑回归适合于因变量为二元变量时。像所有的回归分析一样,逻辑回归是一种预测性分析。逻辑回归用于描述数据并解释一个二元因变量与一个或多个名义、序列、时间间隔或比率独立变量之间的关系。逻辑回归可以回答的问题有:
每增加一磅体重和每天吸烟的包数如何影响患肺癌的概率?
卡路里摄入、脂肪摄入和年龄是否对心脏病发作有影响?
在判别分析中,先验知道两个或多个分组或类别(clusters),然后基于已测量的特征将1个或多个新观测对象分类到一个已知类别中去。判别分析在每个类别下分别对预测变量X的分布进行建模,然后使用贝叶斯定理将这些变量转换为给定X值的对应类别的概率估计。这些模型可以是线性的或者二次方的:
线性判别分析(Linear Discriminant Analysis)为每个观测值计算“判别分数”来判断它应该属于哪个类别。判别分数是通过寻找自变量的线性组合得到的。它假设每个类别中的观测值都来自于多元高斯分布,并且预测变量的协方差在响应变量Y的所有k个水平上都相同。
二次判别分析(Quadratic Discriminant Analysis)提供了一个替代方法。与线性判别分析一样,二次判别分析假设每个Y类别的观察值都来自于高斯分布。然后,与线性判别分析不同的是,二次判别分析假设每个类都有自己的协方差矩阵。换句话说,预测变量并未假设在Y中的所有k个水平上都具有共同的方差。
03 重采样方法(Resampling Methods)
重采样是从原始数据中重复采集样本的方法。这是一种非参数统计推断方法。换句话说,重采样方法不涉及使用通用分布表来计算近似的p概率值。
重采样根据实际数据生成一个唯一的采样分布。它使用实验方法而不是分析方法来生成唯一的样本分布。它产生的是无偏估计,因为它是基于研究人员研究的数据的所有可能结果生成的无偏样本。为了理解重采样的概念,你需要理解术语Bootstrapping和交叉验证(Cross-Validation)。
Bootstrapping 在很多情况下是一种有用的方法,比如评估模型性能、模型集成(ensemble methods)、估计模型的偏差和方差等。它的工作机制是对原始数据进行有放回的采样,并将“没被选上”的数据点作为测试用例。我们可以这样操作多次,并计算平均得分作为模型性能的估计。
交叉验证是评估模型性能的一种方法,它通过将训练数据分成k份,使用k-1份作为训练集,使用保留的那份作为测试集。以不同的方式重复整个过程k次。最终取k个得分的平均值作为模型性能的估计。
对于线性模型而言,普通最小二乘法是拟合数据的主要标准。不过,接下来的3种方法可以为线性模型提供更好的预测准确性和模型可解释性。
04 子集选择(Subset Selection)
这种方法先确定与因变量相关的p个自变量的一个子集,然后使用子集特征的最小二乘拟合模型。
最优子集法(Best-Subset Selection)对p个自变量的所有可能组合分别做最小二乘法回归,查看最终的模型拟合效果。该算法分为2个阶段:
拟合所有包含k个自变量的模型,其中k是模型的最大长度;
使用交叉验证误差来选出最佳模型。
使用测试误差或者验证误差而不是训练误差来评估模型很重要,因为RSS和R2会随着变量的增加而单调增加。最好的方式是交叉验证并选择测试误差上R2最高而RSS最低的模型。
向前逐步选择(Forward Stepwise Selection)使用一个更小的自变量子集。它从一个不包含任何自变量的模型开始,将自变量逐个加入模型中,一次一个,直到所有自变量都进入模型。每次只将能够最大限度提升模型性能的变量加入模型中,直到交叉验证误差找不到更多的变量可以改进模型为止。
向后逐步选择(Backward Stepwise Selection)在开始时包含全部p个自变量,然后逐个移除最没用的自变量。
混合方法(Hybrid Methods)遵循向前逐步选择原则,但是在每次添加新变量之后,该方法也可能移除对模型拟合没有贡献的变量。
05 特征缩减(Shrinkage)
这种方法使用所有p个自变量拟合模型,但相对于最小二乘估计,该方法会让一些自变量的估计系数向着0衰减。这种衰减又称正则化(Regularization),具有减少方差的作用。根据所使用的缩减方法,一些系数可能被估计为0。因此这个方法也用于变量选择。最常用的两种缩减系数方法是岭回归(Ridge regression)和L1正则化(Lasso)。
岭回归(Ridge regression)与最小二乘类似,但在原有项的基础上增加了一个正则项。和最小二乘法一样,岭回归也寻求使RSS最小化的参数估计,但当待估参数接近于0时,它会有一个收缩惩罚。这个惩罚会促使缩减待估参数接近于0。您无需深入数学海洋,仅需要知道岭回归通过减小模型方差来缩减特征就可以了。就像主成分分析一样,岭回归将数据投影到d维空间,然后对比低方差(最小主成分)和高方差(最大主成分)的系数进行剔除和筛选。
岭回归至少有一个缺点:它的最终模型中包含全部p个自变量。惩罚项会让许多系数接近于0但永远不为0。这一点通常对预测准确性而言并不是问题,但它可能会使模型更难解释。正则化克服了这个缺点,只要s足够小,它能强迫某些系数为0。S=1就是常规的最小二乘法回归,当s接近于0时,系数朝着0缩减。因此正则化也相当于进行了变量选择。
06 降维(Dimension Reduction)
降维将估计p+1个系数减少为M+1个系数,其中M<p。这是通过计算变量的M个不同的线性组合或投影来实现的。然后,这M个投影被用作预测变量,使用最小二乘来拟合线性回归模型。常用的两种降维方法分别是主成分回归(Principal component regression)和偏最小二乘法(Partial least squares)。
可以将主成分回归描述为从大量变量中导出低维特征集的方法。数据的第一主成分方向是观测值变化最大的方向。换句话说,第一主成分是一条尽可能拟合数据的直线。可以拟合p个不同的主成分。第二主成分是与第一主成分不相关的变量的线性组合,且方差最大。主成分分析的思想是使用正交方向的数据的线性组合来捕获数据中的最大方差。通过这种方式可以组合相关变量的影响,从可用数据中提取更多信息,而在常规最小二乘中我们必须丢弃其中一个相关变量。
主成分分析法识别最能代表预测变量X的线性组合。这些组合(方向)以无监督的方式被识别,响应变量Y并未用于帮助确定主成分方向,因此不能保证最能解释预测变量的方向在预测上也是最好的(尽管通常都这样假定)。偏最小二乘法是主成分分析法的一种监督学习替代方式。它也是一种降维方法,首先识别一个新的较小的特征集,这些特征是原始特征的线性组合,然后通过对新的M个特征最小二乘拟合成线性模型。与主成分分析法不同的是,偏最小二乘法会利用响应变量来识别新特征。
07 非线性模型(Nonlinear Models)
在统计学中,非线性回归是回归分析的一种形式,观测数据是通过一个或多个自变量的非线性组合函数来建模。数据用逐次逼近的方法进行拟合,下面是一些处理非线性模型的重要方法:
如果一个实数域上的函数可以用半开区间上的指示函数的有限次线性组合来表示,则它被称为阶跃函数(step function)。换一种不太正式的说法就是,阶跃函数是有限段分段常数函数的组合。
分段函数是由多个子函数定义的函数,每个子函数应用于主函数域的某一个区间上。分段实际上是表达函数的一种方式,而不是函数本身的特性,但是加上额外的限定条件,它也可以描述函数的性质。例如,分段多项式函数是这样一个函数,它是每个子域上的多项式,但每个子域上可能是不同的函数。
样条曲线(spline)是由多项式分段定义的特殊函数。在计算机图形学中,样条是指分段多项式参数曲线。因为它们的结构简单,拟合简易而准确,可以近似曲线拟合和交互式曲线设计中的复杂形状,样条曲线是很流行的曲线。
广义可加模型(Generalized additive model)是一种广义线性模型,其中线性预测变量依赖于某些预测变量的未知光滑函数,侧重于这些光滑函数的推理。
08 树形方法(Tree-Based Methods)
树形方法可以用于回归和分类问题。这涉及到将预测空间分层或分割成若干简单区域。由于用于分割预测空间的分裂规则集可以概括成树形,因此这类方法被称为决策树方法。下面的方法都是先生成多棵树,然后将这些树组合在一起以产生单个共识预测。
Bagging是一种通过从原始数据生成额外的训练数据从而减少预测方差的方法,它通过使用重复的组合来生成与原始数据相同的多样性。通过增加训练集的大小,虽然不能提高模型的预测力,但可以减小方差,将预测调整到预期结果。
Boosting是一种使用多个不同模型计算输出的方法,然后使用加权平均法对结果进行平均。通过改变加权公式,结合这些模型的优点和缺陷,使用不同的微调模型,可以为更广泛的输入数据提供良好的预测力。
随机森林算法非常类似于Bagging。先采集训练集的随机bootstrap样本,然后采集特征的随机子集来训练单棵树;而在bagging时是给每一棵树全部特征。由于随机特征选择,与常规bagging相比,树彼此之间更加独立,这通常会导致更好的预测性能(因为更好的方差偏差权衡),而且训练速度更快,因为每棵树只从特征的一个子集学习。
09 支持向量机
支持向量机是一种分类技术,属于机器学习中的监督学习模型。通俗地说,它通过寻找超平面(二维中的线,三维中的平面和更高维中的超平面,更正式地,超平面是n维空间的n-1维子空间)以及最大边界(margin)来划分两类点。从本质上讲,它是一个约束优化问题,因为其边界最大化受到数据点分布的约束(硬边界)。
“支持”这个超平面的数据点被称为“支持向量”。在上图中,填充的蓝色圆圈和两个实心方块是支持向量。对于两类数据不能线性分离的情况,这些点将被投影到一个更高维的的空间中,在这个空间里可能会线性可分。多分类问题可以分解为多个一对一或者一对其余类的二分类问题。
10 无监督学习
到目前为止,我们只讨论了监督学习,即数据类别是已知的,算法的目标是找出实际数据与它们所属的类别之间的关系。当类别未知时,我们使用另一种方法,叫做无监督学习,因为它让学习算法自己去找出数据中的模式。聚类是无监督学习的一个例子,其中不同的数据被聚类为密切相关的分组。下面是最广泛使用的无监督学习算法的列表:
主成分分析:通过识别一组具有最大方差和相互不相关的特征的线性组合来生成低维表示的数据集。这种方法有助于理解变量在无监督环境下的潜在的相互作用。
k-Means聚类:根据聚类中心点的距离将数据分为k个不同的聚蔟。
层次聚类:通过创建一棵聚类树来构建多级分层结构。
以上是一些基本的统计技术概要,可以帮助数据科学项目经理/执行人员更好地理解他们的数据科学团队运作的内容背后隐藏着什么。事实上,一些数据科学团队纯粹通过python和R库运行算法。他们中的大多数甚至不必考虑背后的数学原理。但是,理解统计分析的基础知识可以为你的团队提供更好的方法。深入了解一小部分就可以更轻松地进行操作和抽象。我希望这篇基础的数据科学统计指南能给你一个不错的理解!
推荐阅读
(点击标题可跳转阅读)
老铁,三连支持一下,好吗?↓↓↓