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 簇不发生变化或达到最大迭代次数
距离定义:(最下图为三种距离趋近中心方式)
1)Minkowski Distance公式——λ可以随意取值,可以是负数,也可以是正数,或是无穷大。
2)Euclidean Distance公式——也就是第一个公式λ=2的情况
3)CityBlock Distance公式——也就是第一个公式λ=1的情况
(1)Minkowski Distance (2)Euclidean 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个叶子节点)
可以比较,随机森林分类精确度、可靠性更高。
- 35分钟让你弄懂机器学习中的数学公式-课堂讲义备注
- 20分钟带你入门机器学习-课堂讲义
- 机器学习常用数学公式
- 机器学习常用数学公式
- 机器学习常用数学公式
- 机器学习常用数学公式
- MathJax让你爱上数学公式
- 斯坦福大学机器学习课程讲义
- 斯坦福大学机器学习课程讲义
- 只需要点一下鼠标,就可以让你的数学试卷/教案中的数学公式更美观
- 5 分钟带你弄懂 k-means 聚类
- 科普 | 5分钟包你看懂“机器学习”
- 十分钟包你看懂「机器学习」
- 让机器帮你写博客-机器学习实战
- 机器学习课堂笔记1
- 机器学习课堂笔记2
- 机器学习课堂笔记3
- 机器学习课堂笔记4
- VR编辑器
- 简单实现ButterKnife(运行时注解)
- 非常实用的aix 6.1系统安装的教程
- HDU 2017 多校联赛-1001 Add More Zero
- RxPermission权限使用
- 35分钟让你弄懂机器学习中的数学公式-课堂讲义备注
- JAVA成绩分析
- 开发中常见的两种文本排版显示
- HDU:还是畅通工程
- Prim(普里姆)求小生成树 模板
- 03. JSP 动作标签
- mysql5.7 json类型字段中文乱码
- android开发 之 常用的drawable(二)
- 智能音乐搜索功能实现(一)