热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习和统计学习的区别:10个统计分析方法

来源:THU数据派(ID:datapi)无论你在数据科学中是何种立场,你都无法忽视数据的重要性,

  

来源:THU数据派(ID:datapi)

无论你在数据科学中是何种立场,你都无法忽视数据的重要性,数据科学家的职责就是分析、组织和应用这些数据。

著名求职网站 Glassdoor 根据庞大的就业数据和员工反馈信息,将数据科学家排名为美国最佳的 25 个工作之首。虽然名头不小,但毫无疑问,数据科学家所做的具体工作是不断发展变化的。随着机器学习等技术越来越普及,像深度学习这样的新兴领域在研究人员、工程师以及聘用他们的公司中成为新宠,数据科学家们将继续在创新浪潮和技术进步中崭露头角。

尽管具有强大的编程能力很重要,但数据科学家不需要都是软件工程师(实际上会用 Python 你就可以上路了)。数据科学家处于编程、统计学和批判性思维的交叉区域。正如 Josh Wills 所说:“数据科学家是这样一种人,他比任何程序员都更懂统计,并且他比任何统计学家都更懂编程”。

我认识很多想转行数据科学家的软件工程师,他们盲目地使用 TensorFlow 或者 Apache Spark 等机器学习框架去处理数据,却没有深入理解背后的统计理论。因此本文要谈一谈统计学习( statistical learning ),它是源于统计学和泛函分析的一个机器学习理论框架。

为什么要学习统计学习?

首先,为了知道如何以及何时使用各种分析方法,理解各种分析方法背后的思想很重要。

要想掌握更精巧复杂的方法,你必须先理解较简单的方法;其次,当你想准确地评估一种分析方法的效果时,你得知道其运行的多好或者多么不好;第三,这是一个令人兴奋的研究领域,在科学、业界和金融领域有重要的应用。最后,统计学习也是一名现代数据科学家的重要素养。一些统计学习的代表性问题包括:

  • 找出前列腺癌的高危因素

  • 根据对数周期图对一个音位进行分类

  • 根据人口统计学资料、饮食和临床测量数据预测某人是否会得心脏病

  • 自定义一个垃圾邮件检测系统

  • 识别手写的邮政编码数字

  • 确定一个组织样本属于哪一类癌症

  • 建立人口调查数据中工资和人口统计学变量之间的关系

在大学的最后一个学期,我完成了一门数据挖掘的独立学习课程。该课程涵盖了来自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)。

但是这种区别已经越来越模糊,并且存在大量交叉。此外,机器学习的市场营销做的更好。

1、线性回归

在统计学中,线性回归是一种通过拟合因变量(dependent)和自变量(independent variable)之间最佳线性关系来预测目标变量的方法。最佳拟合是通过确保每个实际观察点到拟合形状的距离之和尽可能小而完成的。最佳拟合指的是没有其他形状可以产生更小的误差了。

线性回归的两种主要类型是:

  • 简单线性回归(Simple Linear Regression):简单线性回归使用单一的自变量,通过拟合出最佳的线性关系来预测因变量。

  • 多元线性回归(Multiple Linear Regression):多元线性回归使用多个自变量,拟合出最佳的线性关系来预测因变量。

 

选择任意两个你日常生活中使用的相关的东西。比如,我有过去 3 年中自己每月开支、每月收入、每月旅行次数的数据,现在我想回答下列问题:

  • 明年我每月的开支会是多少?

  • 哪个因素(每月收入还是每月旅行次数)在决定我的每月开支时更重要?

  • 每月收入、每月旅行次数是如何与每月支出相关的?

2、分类

分类是一种数据挖掘技术,通过确定一组数据所属的类别以实现更准确的预测和分析。分类有时候也称为决策树,是对大型数据集进行分析的利器之一。常用的分类方法有两种:逻辑回归和判别分析(Discriminant Analysis)。

逻辑回归适合于因变量为二元变量时。像所有的回归分析一样,逻辑回归是一种预测性分析。逻辑回归用于描述数据并解释一个二元因变量与一个或多个名义、序列、时间间隔或比率独立变量之间的关系。逻辑回归可以回答的问题有:

  • 每增加一磅体重和每天吸烟的包数如何影响患肺癌的概率?

  • 卡路里摄入、脂肪摄入和年龄是否对心脏病发作有影响?

在判别分析中,先验知道两个或多个分组或类别(clusters),然后基于已测量的特征将 1 个或多个新观测对象分类到一个已知类别中去。判别分析在每个类别下分别对预测变量X的分布进行建模,然后使用贝叶斯定理将这些变量转换为给定X值的对应类别的概率估计。这些模型可以是线性的或者二次方的:

线性判别分析(Linear Discriminant Analysis)为每个观测值计算「判别分数」来判断它应该属于哪个类别。判别分数是通过寻找自变量的线性组合得到的。它假设每个类别中的观测值都来自于多元高斯分布,并且预测变量的协方差在响应变量 Y 的所有 k 个水平上都相同。

二次判别分析(Quadratic Discriminant Analysis)提供了一个替代方法。与线性判别分析一样,二次判别分析假设每个 Y 类别的观察值都来自于高斯分布。然后,与线性判别分析不同的是,二次判别分析假设每个类都有自己的协方差矩阵。换句话说,预测变量并未假设在 Y 中的所有 k 个水平上都具有共同的方差。

3、重采样方法(Resampling Methods)

重采样是从原始数据中重复采集样本的方法。这是一种非参数统计推断方法。换句话说,重采样方法不涉及使用通用分布表来计算近似的 p 概率值。

重采样根据实际数据生成一个唯一的采样分布。它使用实验方法而不是分析方法来生成唯一的样本分布。它产生的是无偏估计,因为它是基于研究人员研究的数据的所有可能结果生成的无偏样本。为了理解重采样的概念,你需要理解术语 Bootstrapping 和交叉验证(Cross-Validation)。

Bootstrapping 在很多情况下是一种有用的方法,比如评估模型性能、模型集成(ensemble methods)、估计模型的偏差和方差等。它的工作机制是对原始数据进行有放回的采样,并将「没被选上」的数据点作为测试用例。我们可以这样操作多次,并计算平均得分作为模型性能的估计。

交叉验证是评估模型性能的一种方法,它通过将训练数据分成 k 份,使用 k-1 份作为训练集,使用保留的那份作为测试集。以不同的方式重复整个过程 k 次。最终取 k 个得分的平均值作为模型性能的估计。

对于线性模型而言,普通最小二乘法是拟合数据的主要标准。不过,接下来的 3 种方法可以为线性模型提供更好的预测准确性和模型可解释性。

4、子集选择(Subset Selection)

这种方法先确定与因变量相关的 p 个自变量的一个子集,然后使用子集特征的最小二乘拟合模型。

  • 最优子集法(Best-Subset Selection)对 p 个自变量的所有可能组合分别做最小二乘法回归,查看最终的模型拟合效果。该算法分为 2 个阶段:

    • 拟合所有包含 k 个自变量的模型,其中 k 是模型的最大长度;

    • 使用交叉验证误差来选出最佳模型。

使用测试误差或者验证误差而不是训练误差来评估模型很重要,因为 RSS 和 R2 会随着变量的增加而单调增加。最好的方式是交叉验证并选择测试误差上 R2 最高而 RSS 最低的模型。

  • 向前逐步选择(Forward Stepwise Selection)使用一个更小的自变量子集。它从一个不包含任何自变量的模型开始,将自变量逐个加入模型中,一次一个,直到所有自变量都进入模型。每次只将能够最大限度提升模型性能的变量加入模型中,直到交叉验证误差找不到更多的变量可以改进模型为止。

  • 向后逐步选择(Backward Stepwise Selection)在开始时包含全部 p 个自变量,然后逐个移除最没用的自变量。

  • 混合方法(Hybrid Methods)遵循向前逐步选择原则,但是在每次添加新变量之后,该方法也可能移除对模型拟合没有贡献的变量。

5、特征缩减(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 缩减。因此正则化也相当于进行了变量选择。

6、降维(Dimension Reduction)

降维将估计 p+1 个系数减少为 M+1 个系数,其中 M

可以将主成分回归描述为从大量变量中导出低维特征集的方法。数据的第一主成分方向是观测值变化最大的方向。换句话说,第一主成分是一条尽可能拟合数据的直线。可以拟合 p 个不同的主成分。第二主成分是与第一主成分不相关的变量的线性组合,且方差最大。主成分分析的思想是使用正交方向的数据的线性组合来捕获数据中的最大方差。通过这种方式可以组合相关变量的影响,从可用数据中提取更多信息,而在常规最小二乘中我们必须丢弃其中一个相关变量。

主成分分析法识别最能代表预测变量 X 的线性组合。这些组合(方向)以无监督的方式被识别,响应变量Y并未用于帮助确定主成分方向,因此不能保证最能解释预测变量的方向在预测上也是最好的(尽管通常都这样假定)。偏最小二乘法是主成分分析法的一种监督学习替代方式。它也是一种降维方法,首先识别一个新的较小的特征集,这些特征是原始特征的线性组合,然后通过对新的 M 个特征最小二乘拟合成线性模型。与主成分分析法不同的是,偏最小二乘法会利用响应变量来识别新特征。

7、非线性模型(Nonlinear Models)

在统计学中,非线性回归是回归分析的一种形式,观测数据是通过一个或多个自变量的非线性组合函数来建模。数据用逐次逼近的方法进行拟合,下面是一些处理非线性模型的重要方法。

如果一个实数域上的函数可以用半开区间上的指示函数的有限次线性组合来表示,则它被称为阶跃函数(step function)。换一种不太正式的说法就是,阶跃函数是有限段分段常数函数的组合。

分段函数是由多个子函数定义的函数,每个子函数应用于主函数域的某一个区间上。分段实际上是表达函数的一种方式,而不是函数本身的特性,但是加上额外的限定条件,它也可以描述函数的性质。例如,分段多项式函数是这样一个函数,它是每个子域上的多项式,但每个子域上可能是不同的函数。

样条曲线(spline)是由多项式分段定义的特殊函数。在计算机图形学中,样条是指分段多项式参数曲线。因为它们的结构简单,拟合简易而准确,可以近似曲线拟合和交互式曲线设计中的复杂形状,样条曲线是很流行的曲线。

广义可加模型(Generalized additive model)是一种广义线性模型,其中线性预测变量依赖于某些预测变量的未知光滑函数,侧重于这些光滑函数的推理。

8、树形方法(Tree-Based Methods)

树形方法可以用于回归和分类问题。这涉及到将预测空间分层或分割成若干简单区域。由于用于分割预测空间的分裂规则集可以概括成树形,因此这类方法被称为决策树方法。下面的方法都是先生成多棵树,然后将这些树组合在一起以产生单个共识预测。


Bagging 是一种通过从原始数据生成额外的训练数据从而减少预测方差的方法,它通过使用重复的组合来生成与原始数据相同的多样性。通过增加训练集的大小,虽然不能提高模型的预测力,但可以减小方差,将预测调整到预期结果。

Boosting 是一种使用多个不同模型计算输出的方法,然后使用加权平均法对结果进行平均。通过改变加权公式,结合这些模型的优点和缺陷,使用不同的微调模型,可以为更广泛的输入数据提供良好的预测力。

随机森林算法非常类似于 Bagging。先采集训练集的随机 bootstrap 样本,然后采集特征的随机子集来训练单棵树;而在 bagging 时是给每一棵树全部特征。由于随机特征选择,与常规 bagging 相比,树彼此之间更加独立,这通常会导致更好的预测性能(因为更好的方差偏差权衡),而且训练速度更快,因为每棵树只从特征的一个子集学习。

9、支持向量机

支持向量机是一种分类技术,属于机器学习中的监督学习模型。通俗地说,它通过寻找超平面(二维中的线,三维中的平面和更高维中的超平面,更正式地,超平面是 n 维空间的 n-1 维子空间)以及最大边界(margin)来划分两类点。从本质上讲,它是一个约束优化问题,因为其边界最大化受到数据点分布的约束(硬边界)。

 

「支持」这个超平面的数据点被称为「支持向量」。在上图中,填充的蓝色圆圈和两个实心方块是支持向量。对于两类数据不能线性分离的情况,这些点将被投影到一个更高维的的空间中,在这个空间里可能会线性可分。多分类问题可以分解为多个一对一或者一对其余类的二分类问题。

10、无监督学习

到目前为止,我们只讨论了监督学习,即数据类别是已知的,算法的目标是找出实际数据与它们所属的类别之间的关系。当类别未知时,我们使用另一种方法,叫做无监督学习,因为它让学习算法自己去找出数据中的模式。聚类是无监督学习的一个例子,其中不同的数据被聚类为密切相关的分组。下面是最广泛使用的无监督学习算法的列表。


  • 主成分分析:通过识别一组具有最大方差和相互不相关的特征的线性组合来生成低维表示的数据集。这种方法有助于理解变量在无监督环境下的潜在的相互作用。

  • k-Means 聚类:根据聚类中心点的距离将数据分为 k 个不同的聚蔟。

  • 层次聚类:通过创建一棵聚类树来构建多级分层结构。

以上是一些基本的统计技术概要,可以帮助数据科学项目经理/执行人员更好地理解他们的数据科学团队运作的内容背后隐藏着什么。事实上,一些数据科学团队纯粹通过 python 和 R 库运行算法。他们中的大多数甚至不必考虑背后的数学原理。但是,理解统计分析的基础知识可以为你的团队提供更好的方法。深入了解一小部分就可以更轻松地进行操作和抽象。我希望这篇基础的数据科学统计指南能给你一个不错的理解!

原文链接:

https://www.codementor.io/james_aka_yale/the-10-statistical-techniques-data-scientists-need-to-master-fvj4dx78a

欢迎三连 在看留言分享至朋友圈 ↓↓↓



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 基于SpringBoot打造在线教育系统(6)– 二级分类模块UI篇
    这一节来做二级分类,为了快速开发,一级分类只做新增,暂时不考虑修改和删除,如果一定要删,就去数据库删吧。我们接下来,需要通过一级分类,获取所有的二级分类。开始 ... [详细]
author-avatar
小白学习
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有