《精通数据科学:从线性回归到深度学习》

—— Harrytsz


文章目录

* 第 1 章 数据科学概述
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_1____font_4>
* 1.1 挑战
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorblue11_font_14>
* 1.1.1 工程实现的挑战
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_111__font_17>
* 1.1.2 模型搭建的挑战
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_112__font_31>
* 1.2 机器学习
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorblue12_font_50>
* 1.2.1 机器学习与传统编程
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_121__font_51>
* 1.2.2 监督式学习和非监督式学习
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_122__font_54>
* 1.3 统计模型
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorblue13_font_60>
* 第 3 章 数学基础:恼人但又不可或缺的知识
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_3____font_66>
* 3.1 矩阵和向量空间
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorblue31_font_79>
* 3.1.1 标量、向量与矩阵
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_311__font_81>
* 3.1.2 特殊矩阵
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_312__font_87>
* 3.1.3 矩阵运算
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_313__font_88>
* 3.1.4 向量空间
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_314__font_89>
* 3.2 概率:量化随机
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorblue32_font_92>
* 3.2.1 定义概率:事件和概率空间
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_321__font_93>
* 3.2.2 条件概率:信息的价值
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_322__font_94>
* 3.2.3 随机变量:两种不同的随机
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_323__font_95>
* 3.2.4 正态分布:殊途同归
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorgreen_324__font_96>
* 3.3 微积分
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorblue33_font_98>
* 第 4 章 线性回归:模型之母
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_4____font_100>
* 第 5 章 逻辑回归:隐藏因子
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_5____font_102>
* 第 6 章 工程实现:计算机是怎么算的
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_6____font_104>
* 第 7 章 计量经济学的启示:他山之石
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_7____font_106>
* 第 8 章 监督式学习:目标明确
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_8____font_108>
* 第 9 章 生成式模型:量化信息的价值
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_9____font_110>
* 第 10 章 非监督式学习:聚类与降维
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_10____font_112>
* 第 11 章 分布式机器学习:集体力量
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_11____font_114>
* 第 12 章 神经网络:模拟人的大脑
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_12____font_116>
* 第 13 章 深度学习:继续探索
<https://blog.csdn.net/Harrytsz/article/details/83035683#font_colorred_13____font_118>


<>第 1 章 数据科学概述

The purpose of computing is insight, not numbers. —— Richard Hamming
(计算的目的不在于数字,而在于洞察事物。)

数据驱动(Data Driven)、大数据(Big Data)、分布式计算(Parallel
Computing)等,这些概念虽然各有侧重点,但它们都毫无争议地围绕着同一个主题:如何从实际的生活中提取出数据,然后利用计算机的运算能力和模型算法从这些数据中找出一些有价值的内容,为商业决策提供支持。这正是数据科学的核心内涵。

传统的数据分析手段是所谓的商业智能(Business
Intelligent,BI)。这种方法通常将数据按不同的维度交叉分组,并在此基础上,利用统计方法分析每个组别里的信息。比如商业智能中最常见的问题是:“过去3个月,通过搜索引擎进入网站并成功完成注册的新用户里,年龄分布情况如何?若将上面的用户群体按照年龄段分组,各组中有多大比例的用户在完成注册后,完成了至少一次消费?”


传统的数据分析虽然非常有用,能揭示一些数据的直观信息。但这样的方法犹如盲人摸象,只能告诉我们数据在某个局部的情况,而不能给出数据的全貌。而且对于某些问题,这样的结果显得有些不够用。比如用户注册之后完成消费的比例与哪些因素相关?又比如对于某个客户,应该向他推荐什么样的商品?在这些场景下,我们需要更加精细的数据分析工具——机器学习和统计模型。在我看来,这些内容是数据科学的核心内容。

<>1.1 挑战

在数据科学实践中,我们使用较为复杂的机器学习的统计模型对数据进行精细化的分析和预测。这在工程实现和模型搭建方面都提出了挑战。

<> 1.1.1 工程实现的挑战

数据科学在工程上的挑战可以大致分为3类:特征提取、矩阵运算和分布式机器学习。

*
一个建模项目是否能够成功在很大程度上取决于建模前的 特征提取
。特征提取包含数据清洗、数据整合、变量归一化等。经过处理后,原本搅作一团的原始数据将被转换为能被模型使用的特征。这些工作需要大量的自动化程序来处理,特别是面对大数据时,因为这些大数据无法靠“人工”来检查。在一个典型的建模项目中,这部分花费的时间远远大于选择和编写模型算法的时间。

*

对于复杂的数学模型,计算机通常无法给出模型参数的解析解,需要使用类似随机梯度下降法等最优化算法来估算模型参数的近似解。使用最优化算法求解的过程通常需要大量的循环迭代计算,才能使参数到达收敛值附近。因此即使是在处理很小规模的数据集时,求解复杂的模型参数所需要的时间也是相当长的。而且模型在结构上越复杂,需要求解的参数也就越多。对这些大量的模型参数同时做更新,在数学上对应着矩阵运算。
但传统的CPU架构并不擅长这样的运算,这就导致模型训练需要耗费大量的时间。为了提高模型的训练速度,需要将相应的矩阵运算(模型参数的估算过程)移植到GPU或者特制的计算芯片上,比如TPU。

*
近年来,随着分布式系统的流行和普及,存储海量数据成为了业界的标配。
为了能在海量的数据上使用复杂模型,需要将原本在一台机器上运行的模型算法改写成能够在多台机器上并行运行。



<> 1.1.2 模型搭建的挑战

数据科学对模型搭建的要求也可以总结为3点:模型预测效果好、模型参数是稳定且“正确的”、模型结果容易解释。

*
模型的预测效果好:这是数据科学的关键。而一个模型的预测效果取决于它的假设是否被满足。
从数学上来看,任何一个模型除去假设部分,它的其他推导都是严谨的数学演算,是无懈可击的。因此模型假设就像模型的阿喀琉斯之踵,是它唯一的薄弱环节。
当问题的场景或数据满足模型假设时,模型的效果一定不会差,反之,则预测效果就无法保证了。
但是在实际生产中,针对一个具体的问题,几乎不可能找到一个模型,它的假设被百分之百地满足。这时就需要避重就轻,通过特征提取等手段,尽量避免违反那些对结果影响很大的假设。
这就是为什么说“所有的模型都是错的,但是,其中有一些是有用的”。

*
除了被用来对未知数据做预测之外,模型的另一个重要的功能就是对已有数据做分析,
比如哪个变量对结果的影响最大或者某个变量除了被用来对未知数据做预测之外,模型的另一个重要的功能就是对已有数据做分析,比如哪个变量对结果的影响最大或者某个变量对结果到底是正向影响还是负向影响等。
这些分析结果在很大程度上依赖于模型参数的估计值,后者的准确与否直接决定了分析结果的质量。但问题是,模型参数的估计值是不太“可靠”的。例如从训练数据中随机抽取两个不完全一样的数据子集
AAA 和 BBB,然后用这两个数据集分别训练同一个模型。得到的参数估计值几乎不可能完全一样。
从数学角度来看,这说明模型参数的估计值其实一个随机变量,具体的取值取决于训练模型时使用的数据。于是我们要求这些估计值是“正确”的:围绕参数的真实值上下波动(也就是说它们的期望等于参数的真实值)。我们还要求这些估计值是稳定的:波动的幅度不能太大(也就是说它们的方差比较小)。这样就可以把参数估计值的“不可靠性”控制在可接受的范围内。

*

数据科学家将模型搭建好,并不是一个数据科学项目的终点。为了充分发挥数据的价值,需要将模型结果应用到实际的生产中,比如为手机银行APP架设实时反欺诈系统,或者将利用新搭建的车祸风险模型为汽车保险定价等。参与这个过程的不仅有懂模型的数据科学家,还有更多非技术的业务人员。而后者往往是使用模型的主力,比如根据反欺诈系统的结果,对可疑用户进行人工审核,又或者向客户解释为什么他的车险比别人贵。为了帮助他们更好地理解模型结果,需要将复杂深奥的模型翻译成直观的普通语言。
这要求模型是能被解释的,而且是容易被解释的。

在对数据搭建模型时,有两种截然不同的思路,如图所示:



一种是所谓的数据模型(Data Model)
,也就是传统的统计模型。这种思路假设数据的产生过程是已知的(或者是可以假设的),可以通过模型去理解整个过程。因此,这类模型通常具有很好的可解释性,分析其稳定性的数学工具也很多,但是在实际生产中,这些模型的预测效果并不好,或者更准确地说,单独使用时,预测效果并不理想。

另一种是所谓的算法模型(Algorithm Model)
,也就是机器学习。这类模型是人工智能的核心内容,它们假设数据的产生过程是复杂且未知的。建模的目的是尽可能地从结构上“模仿”数据的产生过程,从而达到较好的预测效果。但代价是模型的可解释性很差,而且模型稳定的分析方法也不多。


正如上面的分析,统计学和机器学习在某些方面具有极好的互补性。因此在实际的生产中,为了将一个数据科学项目做得尽可能完美,我们需要将这两种思路结合起来使用。比如使用机器学习的模型对数据建模,然后借鉴数据模型的分析工具,分析模型的稳定性和给出模型结果的直观解释。

<>1.2 机器学习

<> 1.2.1 机器学习与传统编程

传统的编程方式是人类自己积累经验,并将这些经验转换为规则或者数学公式,然后就是用编程语言去表示这些规则和公式。而机器学习可以被看作一种全新的编程方式。
在进行机器学习时,人类不需要总结具体的规则或公式,只需要制定学习的步骤,然后将大量的数据输入给计算机。后者可以根据数据和人类提供的学习步骤自己总结经验,自动升级。
计算机“学习”完成之后得到一个模型程序,而这个有程序生成的程序可以达到甚至超过人类自身的水平。

<> 1.2.2 监督式学习和非监督式学习

机器学习根据所用的训练数据可以分为两类。一类是监督式学习,这类模型的特点是训练数据里有标注。监督式学习按照标注的类型又可以细分为两类:分类和回归
。如果数据里的标注表示事物的类别,也就是说标注是离散的,那么相应的模型就属于分类。如果标注表示具体的数量,也就是说标注是连续的,那么相应的模型就属于回归。

另一类是非监督式学习,这类模型所用的训练数据里并没有标注,只有自变量x。非监督式学习根据用途又可以分为两类:聚类和降维
。把“距离”相近的点归于一类叫作聚类,而将高维空间里的数据映射到低维度空间叫作降维。具体内容见下图:


<>1.3 统计模型

模型幻觉:
表面上找到了数据变动的规律,但其实只是由随机扰动引起的数字巧合。因此在对搭建模型时,必须时刻保持警惕,不然很容易掉进数据的“陷阱”里,被数据给骗了,这正是统计学的研究重点。这门学科会“小心翼翼”地处理它的各种模型,以确保模型能摆脱数据中随机因素的干扰,得到稳定且正确的结论,正好弥补机器学习在方面的不足。



<>第 3 章 数学基础:恼人但又不可或缺的知识

IfIfIf peoplepeoplepeople dododo notnotnot believebelievebelieve thatthatthat m
athematicsmathematicsmathematics isisis simple,simple,simple, ititit isisis only
onlyonly becausebecausebecause theytheythey dododo notnotnot realizerealizereali
ze howhowhow complicatedcomplicatedcomplicated lifelifelife is.is.is.
——JohnvonNeumann——John von Neumann——JohnvonNeumann

我们并不理解数学,只是越来越习惯它。
——冯⋅诺依曼—— 冯·诺依曼——冯⋅诺依曼

毫无疑问,数学是数据科学的灵魂。不管是机器学习或是统计学模型,从本质上讲都是数学模型。

* 矩阵和向量空间:矩阵是数据的基本表示形式。
* 概率:概率作为量化随机性的工具,是统计学和贝叶斯框架的核心内容。
* 微积分:是计算机解决最优化问题的理论基础。


<>3.1 矩阵和向量空间

<> 3.1.1 标量、向量与矩阵


从数学上来讲,标量和向量其实是比较特殊的矩阵。标量可以被看作一个 1×11 \times 11×1 的矩阵 ,而 kkk 维行向量可以看作一个 1×k1
\times k1×k 的矩阵,kkk 维列向量可以看作一个 k×1k \times 1k×1 的矩阵。
在数学上,通常使用 xi,jx_{i,j}xi,j​

<> 3.1.2 特殊矩阵

<> 3.1.3 矩阵运算

<> 3.1.4 向量空间

<>3.2 概率:量化随机

<> 3.2.1 定义概率:事件和概率空间

<> 3.2.2 条件概率:信息的价值

<> 3.2.3 随机变量:两种不同的随机

<> 3.2.4 正态分布:殊途同归

<>3.3 微积分

<>第 4 章 线性回归:模型之母

<>第 5 章 逻辑回归:隐藏因子

<>第 6 章 工程实现:计算机是怎么算的

<>第 7 章 计量经济学的启示:他山之石

<>第 8 章 监督式学习:目标明确

<>第 9 章 生成式模型:量化信息的价值

<>第 10 章 非监督式学习:聚类与降维

<>第 11 章 分布式机器学习:集体力量

<>第 12 章 神经网络:模拟人的大脑

<>第 13 章 深度学习:继续探索