35分钟让你弄懂机器学习中的数学公式-课堂讲义备注

来源:互联网 发布:核冬天 知乎 编辑:程序博客网 时间:2024/05/20 20:22

机器学习中的数学公式


建议先读:

20分钟带你入门机器学习-课堂讲义

(http://blog.csdn.net/outp0st/article/details/76087653)



讲义内容:(突出重点)

 

K-means√

层次聚类√

PCA√

线性回归与逻辑回归√

kNN√

SVM√

神经网络√

朴素贝叶斯√

决策树与随机森林√

 

==========================================================================

==========================================================================

====================================K-means================================

==========================================================================

==========================================================================

伪代码:

 

选择K个点作为初始质心 

repeat 

    将每个点指派到最近的质心,形成K个簇 

    重新计算每个簇的质心 

until 簇不发生变化或达到最大迭代次数 

 

 

 

 

距离定义:(最下图为三种距离趋近中心方式)

1Minkowski Distance公式——λ可以随意取值,可以是负数,也可以是正数,或是无穷大。


2Euclidean Distance公式——也就是第一个公式λ=2的情况


3CityBlock Distance公式——也就是第一个公式λ=1的情况



 

1Minkowski Distance                                 2Euclidean Distance                       3 CityBlock Distance

 

==========================================================================

==========================================================================

====================================层次聚类================================

==========================================================================

==========================================================================

假设有N个待聚类的样本,对于层次聚类来说,基本步骤就是(自下而上建树过程):

      1、(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度;

      2、寻找各个类之间最近的两个类,把他们归为一类(这样类的总数就少了一个);

      3、重新计算新生成的这个类与各个旧类之间的相似度;

      4、重复2和3直到所有样本点都归为一类,结束。

 

==========================================================================

==========================================================================

=====================================PCA==================================

==========================================================================

==========================================================================

主成分分析

大意:较大的数据增加了复杂度。随着数据集越来越大,您经常需要减少特征或维度的数量。对数据执行线性变换,使您的高维数据集中的绝大多数信息被前几个主成分捕获。


现在问题来了:如果我们必须使用一维来表示这些数据,又希望尽量保留原始的信息。

类似基变换,只不过是N个向量的线性组合用N-1个向量线性表示。这中间降了一个维度,丢失了一部分信息。

那么如何选择这些基底才能尽量保留最多的原始信息呢?一种直观的看法是:希望投影后的投影值尽可能分散。以上图为例,可以看出如果向x轴投影,那么最左边的两个点会重叠在一起,中间的两个点也会重叠在一起,于是本身四个各不相同的二维点投影后只剩下两个不同的值了,这是一种严重的信息丢失,我们直观目测,如果向通过第一象限和第三象限的斜线投影,则五个点在投影后还是可以区分的。

 

再比如三维中的降维:

PCA核心公式:(分子表示实际值与预测值方差,分母表示数据总方差)

 

分数值表示降维损失的信息小于0.01。可以看做是使方差最大的方向作为主要特征。

算法过程:从k=1维增长,不断计算判断上式是否满足,不满足则k++。

计算得到的k,即将数据从n维降到k维。

==========================================================================

==========================================================================

=================================线性回归与逻辑回归============================

==========================================================================

==========================================================================

目标:根据已有数据,预测房价

 

假设函数:(简单起见,为线性函数)


代价函数:

目标:

更好理解,见下图:

上图只包含一个参数,将参数个数推广到2,得到下图:

===================================梯度下降法================================

我们现在的问题是怎么求解最优解?自然联想到梯度下降:

这个算法核心:像一个人站在曲面上某点,找下山的最快方向(偏导),并迈出步子(学习速率:阿法)。

算法正确吗?(能找到最小值吗?)

我们将目标函数带入最优化方程(不断更新2个参数值即可找到最小值的解):

我们继续把目标函数推广到多维(影响结果的特征往往不止一个,这就是多元线性回归):

代价函数改写为:

求解仍然采用梯度下降法,令每个参数偏导为零:


得到参数的可行解:


==================================标准方程法================================

另一种解决使得代价函数最小的方法,更高效,是标准方程法,使用矩阵运算。

把问题转化为矩阵:(每一行一个样本,每一列表示一组特征)(参数矩阵是一个列向量)(y也是一个列向量,每行表示一个样本实际结果)

 

我们的目标函数就成为:

上面是参数的矩阵求法。

 

算法正确吗?(为什么参数解的形式是这样?)网上错误说法:公式突然出现,后来发现和最小二乘形式相同。

实际上:

假设给定一个输入样本x,我们得到预测值和真实值间的存在的误差e,那么他们的关系如下:

(注意其中w即参数向量)

而这里,我们就可以假设e服从标准的高斯分布

为什么呢?回归模型的最终目标是建立自变量x和y之间的关系,我们希望通过x可以较为准确的表示结果y。而在实际应用场景中,很难甚至不可能把导致y结果的所有变量(特征)都找到,放到回归模型里面。我们只存放那些认为比较重要的特征。根据中心极限定理,把那些对结果影响比较小的(假设独立分布)特征总和认为符合正态分布是合理的。

那么y的条件概率为:(对于预估参数西塔,给定输入xi情况下,预测结果为真实值yi的概率)

我们试想,这个概率越大,说明我们找到的参数西塔越准,越接近x与y的真实关系,越能准确预测y值。所以我们最大化这个概率,目的是找到这个取到最大概率时的参数值。

上面这个式子就是标准方程算法证明正确性的核心。意思:我们的目标是找到一个给定模型中的参数值,这个参数理论上,应该是最可能满足已有样本的那个值。这就是最大似然估计。(该处理解不彻底)

通过对最大似然函数取对数,求极值,得到参数西塔表达式就是刚才那个式子。

 

讨论时间复杂度。矩阵的规模是N^2的,求逆操作大致为N^3,运算速度较慢。实践中,大规模数据采用梯度下降,小规模数据采用标准方程法。

 

===================================逻辑回归=================================

逻辑回归生长于刚才所说的线性回归,但主要用来处理二分类问题。举例说明:

  

构建线性回归模型后,即可以根据肿瘤大小,预测是否为恶性肿瘤,这样就完成了分类。

然而线性回归的鲁棒性很差,例如在图1.b的数据集上建立回归,因最右边噪点的存在,使回归模型在训练集上表现都很差。这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,其回归方程与回归曲线如图2所示。逻辑曲线在z=0时,十分敏感,在z>>0或z<<0处,都不敏感,将预测值限定为(0,1)。将刚才结果映射到Logistics函数图像上,就能获得较好的分类。

 

 

==========================================================================

==========================================================================

=====================================kNN==================================

==========================================================================

==========================================================================

算法的描述为:

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

 

(少数服从多数)

 

 

==========================================================================

==========================================================================

====================================SVM===================================

==========================================================================

==========================================================================

 

支持向量机就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙(超平面)。机:分类器。支持向量:边界上的样本(非边界上的点不影响目标函数确定)

如果线性不可分呢?

 

当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。

实际上就是把点映射到高维空间,就可以用超平面分割了。映射时采用核函数,这里用高斯核函数。

相当于将原来可能的目标函数用更多维度线性表示,并且投影到高斯面上。


类似降维的逆过程-重建。

 

 

==========================================================================

========================================================================================================神经网络与深度学习===============================

==========================================================================

==========================================================================

信号流图概念(边权表示乘子)。神经网络是个分类问题,但是得到真实关系的途径不同。我们引入逻辑回归使得输出的函数值能表达分类。下面来实现一个最初级的单层神经网络,功能是AND:(类似数字电路功能实现过程)

上面的边权怎么找到呢?这就涉及神经网络算法的核心。

首先我们先来增加神经网络的复杂度,来感受神经层间的参数传递关系:(同或门↓)

 

由数理逻辑,与或非满足命题逻辑上的完备性,故神经网络可以描述所有已知的逻辑系统。我们继续扩展至多分类问题:

回到核心问题,怎么计算边权?即怎么计算参数?返回前述回归分析中的代价函数:

换言之,参数计算就是不断更新边权使得结果更满足真实情况。

如何更新?这是反向传播算法:(核心是将预测值与实际值得误差对参数求偏导,从输出层反向遍历)

 

我们来总结一下如何训练一个神经网络:

经验:初始使用较小的值。

下图:竖坐标表示目标函数偏离真实情况程度。神经网络目的就是寻找最小值。

==================================深度学习==================================

大约二三十年前,neural network曾经是ML领域特别火热的一个方向,但是后来确慢慢淡出了,原因处理大型多层网络时不能契合模型,只能找到局部最优解,一开始就离最低点很远的情况拟合很差。

将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。

1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。

2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。

 

 

==========================================================================

==========================================================================

===================================朴素贝叶斯================================

==========================================================================

==========================================================================

 

病人分类的例子

让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。

某个医院早上收了六个门诊病人,如下表。

  症状  职业   疾病

  打喷嚏 护士   感冒

  打喷嚏 农夫   过敏

  头痛  建筑工人 脑震荡

  头痛  建筑工人 感冒

  打喷嚏 教师   感冒

  头痛  教师   脑震荡

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

根据贝叶斯定理:

 P(A|B) = P(B|A) P(A) / P(B)

可得

   P(感冒|打喷嚏x建筑工人)

    = P(打喷嚏x建筑工人|感冒) x P(感冒)

    / P(打喷嚏x建筑工人)

假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了

   P(感冒|打喷嚏x建筑工人)

    = P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒)

    / P(打喷嚏) x P(建筑工人)

这是可以计算的。

  P(感冒|打喷嚏x建筑工人)

    = 0.66 x 0.33 x 0.5 / 0.5 x 0.33

    = 0.66

因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,选取最大概率,就可以知道他最可能得什么病。

 

 

 

朴素贝叶斯的主要优点有:

    1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

    2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

    3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

朴素贝叶斯的主要缺点有:   

    1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

    2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

    3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

    4)对输入数据的表达形式很敏感。

 

==========================================================================

==========================================================================

================================决策树与随机森林==============================

==========================================================================

==========================================================================

Hunt算法是一种采用局部最优策略的决策树构建算法,它同时也是许多决策树算法的基础,包括ID3、C4.5和CART等。该算法的具体执行步骤如下:

(1) 如果 中所有记录都属于同一个类,则 是叶结点,用 标记。

(2) 如果 中包含属于多个类的记录,则选择一个属性测试条件(attribute test condition),将记录划分成较小的子集。对于测试条件的每个输出,创建一个子女结点,并根据测试结果将中的记录分布到子女结点中。然后,对于每个子女结点,递归地调用该算法。

 

 

随机森林:在随机森林中,我们将生成很多的决策树,并不像在CART模型里一样只生成唯一的树。当在基于某些属性对一个新的对象进行分类判别时,随机森林中的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项。

建树时:决策树实际上是将空间用超平面进行划分的一种方法,每次分割的时候,都将当前的空间一分为二, 比如说下面的决策树。

分类时:这样使得每一个叶子节点都是在空间中的一个不相交的区域,在进行决策的时候,会根据输入样本每一维特征的值,一步一步往下,最后使得样本落入N个区域中的一个(假设有N个叶子节点)

可以比较,随机森林分类精确度、可靠性更高。

原创粉丝点击