机器学习与数据分析相关数学基础知识总结
基本概念
一些重要的基本概念(来自《白话大数据与机器学习》)
-
数字和符号:等同于大家平时理解的数字和各种符号,它是组成数据的基础条件。
-
数据:承载了信息的数字和符号才能被称为数据。不管是一堆歪歪扭扭的小孩的字迹,还是墙上乱画的涂鸦,只要是这些数字和符号表达了一定的意思,则就可以被称为数据。
-
信息:信息是用来消除随机不确定性的东西。如何理解这句话呢?比如我说我今年38岁,然后又说我明年39岁。如果我是向不了解我的人介绍自己,则第一句话可以算作是信息。而第二句则完全是废话,不能算作是真正的信息,因为我们可以从第一句话推导出来。所以一条数据究竟是不是信息,这个要根据场景来决定,并不是定死的。
-
算法:算法是指"计算的方法和技巧,也是解决问题的方法"。在计算机中,算法大多指的就是一段或者几段程序,告诉计算机用什么样的逻辑和步骤来处理数据和计算,然后得到处理的结果。对于数据分析来说,如果数据和信息是原始的食材,数据分析的结论是菜肴,那么算法就是烹饪过程。
-
数据挖掘:首先是有一定的数据作为研究对象,但由于数据中蕴含的信息并不是一眼就能看明白的,要进行深度的研究、对比和甄别工作,最终从中找到规律或知识。
-
机器学习:通过特定的算法让机器帮助人类做一些大规模的数据识别、分拣、规律总结、趋势预测等人类做起来比较花时间的事情,离真正的"人工智能"差得很远。
排列组合与古典概型
-
排列组合:对于一件事每种情况出来的可能性都是一样的,可以使用排列组合来求出每种情况出现的可能性。比如一次抛一枚硬币出现正面或反面的可能性都是1/2,如果是两枚硬币各抛一次,总共有4种情况,则出现正正、正反、反正和反反的几率各为1/4。所以能够推导出,在这种情况下,如果是三枚硬币抛,总共有 2 3 = 8 2^{3}=8 23=8种可能性,每种结果出现的可能性就是1/8。可以看出,规律底数是可能出现的情况类型,幂是抛的次数。
-
非古典概型:指包含的单位事件不是有限的或者每个单位事件发生的可能性不均等。对于"每个单位事件发生的可能性不均等",典型的例子比如抛两个骰子,每个骰子抛出1-6这6个点的几率都是1/6,两个骰子能够抛出的是2-12点之间的数,虽然每个骰子抛出每个点的机会都是一样的,但2-12这11个点产生的可能性则是不一样的。比如要得到2点,必须每个骰子都是1,那么可能性是1/6 * 1/6 = 1/36,同理12点也是。但如果是3-11点之间的树就不一样了,比如6,可能由1和5,2和4,3和3,4和2,5和1组成,每种情况产生的几率是1/36,则这5种可能性加起来就是5/36。所以在这种非古典概型中,必须拆成两个古典概型分别求解。对于"包含的单位事件不是有限的",典型的例子是每天出门碰到熟人的概率,这种跟时间、地点等各种复杂的情况相关,无法用古典概型来做计算。
-
排列组合的应用:买彩票,从33个红球中选6个,从16个篮球中选1个,中奖几率为:
这里常见的理解误区是,一、多买几种组合。不管怎么买,除非全包套餐,那么每减少一种组合都在降低中奖概率,所以这种方式并没有实际提高彩票的投入产出比。二、只买一种组合,坚持到底。由于每种组合出现的概念一样,所以认为前面出现过的组合后面出现的概率会低,前面没有出现过的组合后面出现的概率会高,其实这种误区类似于交通事故的随机事件,每个月出现交通事故的数量是相对固定的,如果要避免交通事故,不能用自己人为制造交通事故来减少后面出现交通事故的概率。要记住随机事件中产生的每一次结果之间是独立的概率,每一次的结果都不会影响前后随机事件里产生的结果,这叫静态概型。如果前一个结果会影响后一个结果,那么就不叫古典概型,应该算作是条件概率。
统计与分布相关的概念
加和值:求总和
平均值:求平均
标准差:衡量数组里面每个数和平均值之间的偏差,如果标准差为0,则说明每个数都和平均值相同。如果标准差越大,说明数组里面和平均值相差很大。计算方法是:先求数组里面的每个数与平均值之差,然后把这些差值加总后再平方再开方。为什么需要先平方再开方?因为差值有可能为正有可能为负,平方后全部为正值。
加权平均:当不同种类的数据混合之后求平均,通常不能直接平均,而应做加权平均,加权即乘以权重系数。比如混合糖的定价机制、股东决议等场景,均会用到加权平均值。
众数:出现次数最多的数。
中位数:位于中间位置的数字。
欧式距离:把数组中的每个数减去平均值,再把差值平方,这个值就叫欧式距离。欧式距离中的欧是指欧几里得。正式定义为:在一个N维度的空间里,求两个点的距离,这个距离一定是一个大于等于0的数(也就是说没有负距离,最小也就是两个点重合的零距离),那么这个距离需要用两个点在各自维度上的坐标相减,平方后加和再开方。
曼哈顿距离:跟欧式距离意义基本一样,但计算更简单。只需要分别用两点的横坐标和纵坐标相减后取绝对值并相加即可。
同比:就是指数据和相邻时段的同一时期的数据相比,比如今年7月和去年7月相比。
环比:就是指和上一个报告期进行比较,比如报告一个月做一次,那么就是7月的报告数据和6月的报告数据相比。
抽样:了解大样本空间分布的情况的方法,样本越大则抽样带来的成本减少的效益就越明显。
高斯分布:也叫正态分布。用一句话简单的话来说就是在统计样本中,一般般的最多,极端的很少。一个典型的高斯分布图像如下:

当μ值较大,则图像向右偏移较多。当μ值较小,则图像偏左较多。σ越大,则曲线越平缓,绵延比较长。σ越小,则曲线越陡峭窄小。符合高斯分布的样本,则适用所有高斯分布相关的定理和经验值可以直接套用。如果在统计过程中发现一个样本呈现高斯分布的特性,只需要把样本总数量、μ和σ表述出来,就已经有一个整体的画面感了。
泊松分布:泊松分布一般用于描述统计与概率学中常见的离散概率分布,用于描述单位事件内随机事件发生的次数。泊松分布适用的事件需要满足以下3个条件:
(1)这个事件是一个小概率事件
(2)事件的每次发生是独立的不会互相影响
(3)事件的概率是稳定的
伯努利分布:描述一种离散分布,即除去成功都是失败。伯努利分布必须满足以下条件,不满足的就不是。
(1)各次试验中的事件是互相独立的,每一次n=1或n=0的概率分别为p和q。
(2)每次试验都只有两种结果,即n=0或n=1
多维向量空间
- 矩阵:矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,可以看成是一个二维数组,由行和列组成。比如如下图所示:
矩阵可以进行加减乘法运算(除法有但比较复杂)。加减运算就是将两个矩阵相同位置的元素进行加或减的操作,但必须保证两个矩阵是同型矩阵(即行和列相同)。乘法就是把矩阵中的每个数乘以这个数乘倍数(普通矩阵乘法是指一个矩阵和一个数字相乘,而不是两个矩阵相乘。两个矩阵相乘叫内积)。
矩阵转置:相当于把矩阵沿着对角线翻个身,行变列,列变行。一般习惯把矩阵的转置记做 A T A^{T} AT。
矩阵内积:两个矩阵相乘叫矩阵内积,通过分别将两个矩阵里面对应位置的元素相乘再加和就得到最终结果。
回归
回归的定义:回归的英文单词是regression,代表回退、倒退,回归分析的意思其实应该理解为"由果索因"的过程,是一种归纳思想------从大量的函数结果和自变量反推回函数表达式的过程就是回归。
线性回归:是利用数理统计学中的回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,其表达形式如下:
y = ax + b + e,其中e为误差服从均值为0的正态分布。简单来说大概是这样,通过统计或者实验,可能会得到两种值(两个系列的值)的对应关系,这两种值一种是y,一种是x,每组y和x是成对出现的一一对应,最后可以用一种y=ax+b+e的表达式来表示它们的关系。而这其中的e不是一个定值,它和y,x对应着出现(有一对y和x,就有一个e)。这个e的值满足正态分布,μ为0。
最小二乘法:是用于进行线性回归中的系数猜测的方法。
拟合:通过对数据样本的观察和抽象,最后归纳得到一个完整的数据映射模型的过程,叫拟合。
过拟合:在拟合过程中"做过头"的情况。
过拟合的危害:
- 描述复杂。所有的过度拟合的模型都有一个共同点,就是模型的描述非常复杂------参数繁多,计算逻辑多。
- 失去泛华能力。所谓泛化能力是指通过机器学习得到的模型对未知数据的预测能力,即应用于其他非训练样本的向量时的分类能力。对于待分类样本向量分类正确度高,表示泛化能力较好;反之,如果对于待分类样本向量分类正确度低,则表示泛化能力较差。
造成过拟合的常见原因:
- 训练样本太少。对于训练样本过少的情况,通常都会归纳出一个非常不准确的模型。例如,通过样本统计的方式来进行疾病成因总结,只有一个病例时,这一个病例自身的个案特点很可能会被当成通用性的特点,这样总结出来的模型显然没有泛化能力。而样本多时就可以通过统计分析保留那些共性较多的特点,而共性较少的特点就是我们所说的噪声,就不会被当做分类参数。
- 力求"完美"。对于所有的训练样本向量点都希望用拟合的模型覆盖,但实际上的训练样本却有很多是带有噪声数据的,即收集到的训练数据中由于各种原因导致的与预期分类不一致的样本向量。
欠拟合:跟过拟合正好相反。造成欠拟合的主要原因如下:
- 参数过少,对于训练样本量的维度提取太少会导致模型描述的不准确。例如要判断银行储户的信誉,必须综合考虑用户的年龄、流水总和、账户余额等因素,如果仅凭余额数字就断言个人信誉就太过武断。
- 拟合不当。拟合不当的原因比较复杂,通常是拟合方法不正确造成的。比如应该用曲线拟合的,结果却用直线拟合,就会导致误差较大。
聚类
聚类的概念:指一种学习方式,即把物理对象或抽象对象的集合分组为由彼此类似的对象组成的多个类的分析过程。
K-Means:K-Means是一种聚类算法,是基于向量距离来做聚类。步骤如下:
- 从n个向量对象任意选择k个向量作为初始聚类中心
- 根据在步骤1中设置的k个向量(中心对象向量),计算每个对象与这k个中心对象各自的距离。
- 对于步骤2中的计算,任何一个向量与这k个向量都有一个距离,有的远有的近,把这个向量和距离它最近的中心向量对象归在一个类簇中。
- 重复计算每个类簇的中心对象向量位置。
- 重复3,4两个步骤,直到类簇聚类方案中的向量归类变化极少为止。例如,一次迭代后,只有少于1%的向量还在发生类簇之间的归类漂移,那么就可以认为分类完成。
这里需要注意的是:
- 需要事先指定类簇的数量。
- 需要事先给定初始的类中心。
聚类算法中孤立点
在聚类的过程中,会常常碰到一些离主群或者离每个群都非常远的点,这种点叫孤立点,也叫离群点。孤立点在很多数据研究材料中是专门作为一类研究方法来研究的。
聚类算法通常不能直接解释孤立点产生的原因,但是孤立点通常也是有具体意义的。
孤立点产生原因:
- 可能是由于数据清洗不当而产生的,这属于操作性的失误问题,不是要研究的内容。
- 另外一部分孤立点不是操作性错误,而是由一些和群里的个体特点差异极大的样本组成,它们的行为在真实世界里和在我们的生产生活中也极有可能和群里的样本有着巨大的差异。比如在银行的信用卡诈骗识别中,研究孤立点就是很好的方法。通过对大量的信用卡用户信息和消费行为进行量化建模和聚类,发现在聚类中远离大量样本的点显得非常可疑。还有在电商领域,为了防止商家恶意刷单,也可以对店铺的销售行为以及买家的购买行为进行聚类,看看哪些对象与一般性的销售和购买行为差异巨大,从而做出规则上的预防。
聚类评估
如何判断聚类的好坏,主要包括以下3个方面:
-
估计聚类的趋势。对于给定的数据集,评估该数据集是否存在非随机结构,也就是分布不均匀的情况。如果直接使用各种算法套用在样本上,然后返回一些类簇,这些类簇的分布很可能是一种错误的分类,对人们产生误导。数据中必须存在非随机结构,聚类分析才是有意义的。既然本身没有趋势的聚类是不能使用聚类算法的。那么如何估计聚类的趋势?我们可以采用霍普金斯统计量来进行量化评估。P117页有详细算法介绍。
-
确定数据集中的簇数。比如k-means算法一开始就要确定类簇的数量,并作为参数传递给算法。这里容易让人觉得有点矛盾,即人主观来决定一个类簇的数量的方法是不是可取。如何合理划分样本数据的簇数,也会影响最终的聚类效果。簇数太多,样本被分成很多小簇,簇数太少,样本基本没有被分开,都没有意义。在统计学上建议使用"肘方法"来确定。具体介绍看P119。
-
测量聚类的质量。可以用量化的方式来测量聚类的指令。常用的有使用轮廓系数进行度量的方法,具体介绍见P122.
分类
贝叶斯分类
分类和回归都是监督学习,它们两者看上去有一些相似之处,我们可以这样认为:因变量为定量性的归纳学习成为回归,或者说是连续变量预测。因变量是定性型的归纳学习成为分类,或者说是离散变量预测。比如,实时收集路况用来预测某地段目前的行车速度为多少米是典型的回归归纳过程,而预测该路段的行车状态是拥堵、繁忙还是畅通,则是分类归纳过程。
回归问题经常使用的是朴素贝叶斯算法。贝叶斯决策理论方法是统计模型决策中的一个基本方法,基本思想如下:
(1)已知类条件概率密度参数表达式和先验概率。
(2)利用贝叶斯公式转换为后验概率。
(3)根据后验概率大小进行决策分类。
朴素贝叶斯算法分为多种类型。常用的有以下几种类型:
- 高斯朴素贝叶斯:利用高斯概率密度公式来进行分类拟合。
- 多项式朴素贝叶斯:多用于高维度向量分类,最常用的场景是文章分类。
- 伯努利朴素贝叶斯:针对布尔类型特征值的向量做分类的过程。
注意,贝叶斯算法是基于条件概率(而不是基于古典概型的排列组合的思路做概率分析)来进行分类的一种算法,也就是研究的场景就是在带有某些前提条件下,或者在某些背景条件的约束下发生的概率问题。
朴素贝叶斯中的"朴素"是指在分析概率时,基于这样一个假定:给定目标值时属性之间互相条件独立。基于这种"朴素"的假定,贝叶斯公式一般简写为:P(A|B)P(B)=P(B|A)P(A)。
其中:
P(A)叫做A事件的先验概率,就是说在一般情况下,认为A发生的概率。
P(B|A)叫做似然度,是A条件成立的情况下发生B的概率。
P(A|B)叫做后验概率,在B发生的情况下发生A的概率,也就是要计算的概率。
P(B)叫做标准化常量,和A的先验概率定义类似,就是一般情况下,B的发生概率。
下面用一个简单的基因与疾病预测的例子来说明朴素贝叶斯算法的应用。训练样本如下图所示:
这里假设罹患高血压和胆结石只跟基因片段A和B有关,忽略其他因素。(朴素贝叶斯的前提)。现在如果有一个用户来做基因测序,测试结果为基因片段A和B分别为1、0,那么他罹患高血压和胆结石两种疾病的概率分别为多少?
在这个例子里,需要根据上面讲的公式P(A|B)=P(B|A)P(A)/P(B),
P(A|B)就是我们要求的最终值,以计算高血压疾病的罹患概率为例,式中每个值分别代表什么及应该如何计算呢?
P(A)是先验概率,即全局性的高血压罹患概率,本例中10个样本有3人患病,即P(A)为3/10。
P(B|A)为似然度,表示样本数据中所有患高血压的样本数据同样具有基因是"10"型患者的概率。本例的数据样本中3位高血压患者只有1位患者的基因是"10",即P(B|A)等于1/3。
P(B)是标准化常量,指"10"型基因出现的概率,在本例中10个人出现了3例,即概率为3/10。
最终,代入所有数据进行计算,我们要求的P(A|B) = ((1/3) * (3/10))/(3/10) = 1/3。即罹患高血压的概率为1/3。
同样的,计算胆结石的话,则
P(A) = 1/2 (10个样本中,总共患胆结石5人,即1/2)。
P(B|A)=1/5(5个胆结石,只有1个基因型是"10")。
P(B)=3/10,与高血压相同。
最终,胆结石的发生概率P(A|B) = ((1/2)*(1/5))/(3/10) = 1/3
决策树分类
决策树分类有一个问题是如何决定将哪个因子作为树的根节点。从理论上来说,在众多因子中作为树的根节点的因子一定是能够最快帮我们做出分类决策的,一刀切下去要尽可能消除不确定性,最好一刀下去就把两个类分清楚,如果不行才会选择在下面的子节点再切一次,切的次数越少越好。这里确定这个根节点需要根据"信息增益"这个概念,信息增益是根据信息熵,P136页有详细介绍如何计算信息熵和信息增益。
对于变量的字段一般有两种类型,一种是枚举值,比如学历,只有大专、本科、硕士博士这些,我们可以针对每个值进行信息增益的计算。另外一种是连续值,比如年龄,是一个连续的区间,这种情况下通常是在这个字段上找一个最佳的分裂点,然后一刀切下去,让它的信息增益最大。具体算法可以参考P137 连续型变量的信息增益计算。
随机森林
随机森林是一种并行性比较好的算法规则,顾名思义,它是一个构造决策树的过程,只是它不是要构造一棵树,而是要构造许多树。在决策树的构造中会遇到过拟合和欠拟合的问题,在随机森林算法中,通常一棵树上是不会追求很精确的拟合的,而相反,希望的是决策树的简洁和计算的快速。
随机森林构造的原则和步骤如下:
(1)随机挑选一个字段构造树的第一层
(2)随机挑选一个字段构造树的第二层
......
(3)随机挑选一个字段构造树的第n层
(4)在本棵树构造完毕后,还需要按照这种方式建造m棵决策树。
补充原则如下:
(1)树的层级通常比较浅。
(2)每棵树的分类都不能保证分类精度很高。
(3)一个样本进行分类时同时对这m棵决策树做分类概率判断。
隐马尔科夫模型
马尔科夫模型在书上有一个掷骰子的例子,即预测骰子的顺序和骰子的输出之间的关系。隐马尔科夫模型相关的算法共分为3类,分别解决3种问题。
问题1. 知道骰子有几种(隐含状态数量)、每种骰子是什么(即不知道是四边、六边还是八边筛子,也就是不知道转换概率)、根据投骰子投出的结果(可见状态链),想知道每次掷出来的都是哪种骰子(隐含状态链)。
这个问题在语音识别领域叫做解码问题。
问题2. 知道骰子有几种(隐含状态数量)、每种骰子是什么(转换概率)、根据投骰子投出的结果(可见状态链),想知道掷出这个结果的概率。主要用于检测观察到的结果和已知模型是否吻合。
问题3. 知道骰子有几种(隐含状态数量)、不知道每种骰子是什么(转换概率)、观察到很多次掷骰子的结果(可见状态链),想反推每种筛子是什么(转换概率)。