梯度下降和EM算法,kmeans的em推导
I. 牛顿迭代法
给定一个复杂的非线性函数f(x),希望求它的最小值,我们一般可以这样做,假定它足够光滑,那么它的最小值也就是它的极小值点,满足f′(x0)=0,然后可以转化为求方程f′(x)=0的根了。非线性方程的根我们有个牛顿法,所以
然而,这种做法脱离了几何意义,不能让我们窥探到更多的秘密。我们宁可使用如下的思路:在y=f(x)的x=xn这一点处,我们可以用一条近似的曲线来逼近原函数,如果近似的曲线容易求最小值,那么我们就可以用这个近似的曲线求得的最小值,来近似代替原来曲线的最小值:
显然,对近似曲线的要求是:
1、跟真实曲线在某种程度上近似,一般而言,要求至少具有一阶的近似度;
2、要有极小值点,并且极小值点容易求解。
这样,我们很自然可以选择“切抛物线”来近似(用二阶泰勒展开近似原曲线):
该抛物线具有二阶的精度。对于这条抛物线来说,极值点是(-b/(2*a))
所以我们重新得到了牛顿法的迭代公式:
如果f(x)足够光滑并且在全局只有一个极值点,那么牛顿法将会是快速收敛的(速度指数增长),然而真实的函数并没有这么理想,因此,它的缺点就暴露出来了:
1、需要求二阶导数,有些函数求二阶导数之后就相当复杂了;
2、因为f″(xn)的大小不定,所以g(x)开口方向不定,我们无法确定最后得到的结果究竟是极大值还是极小值。
II. 梯度下降
这两个缺点在很多问题上都是致命性的,因此,为了解决这两个问题,我们放弃二阶精度,即去掉f″(xn),改为一个固定的正数1/h:
这条近似曲线只有一阶精度,但是同时也去掉了二阶导数的计算,并且保证了这是一条开口向上的抛物线,因此,通过它来迭代,至少可以保证最后会收敛到一个极小值(至少是局部最小值)。上述g(x)的最小值点为
所以我们得到迭代公式
对于高维空间就是
这就是著名的梯度下降法了。当然,它本身存在很多问题,但很多改进的算法都是围绕着它来展开,如随机梯度下降等等。
这里我们将梯度下降法理解为近似抛物线来逼近得到的结果,既然这样子看,读者应该也会想到,凭啥我一定要用抛物线来逼近,用其他曲线来逼近不可以吗?当然可以,对于很多问题来说,梯度下降法还有可能把问题复杂化,也就是说,抛物线失效了,这时候我们就要考虑其他形式的逼近了。事实上,其他逼近方案,基本都被称为EM算法,恰好就只排除掉了系出同源的梯度下降法,实在让人不解。
根据一阶泰勒展开,对于一个可微函数,对于任意的x,有:
$ f(x+\alpha p)=f(x)+\alpha * g(x)*p+o(\alpha *\left| p \right|) $
其中:$ g(x)*p = \left| g(x) \right| *\left| p \right| *cos\theta $ ,$\theta$是两向量之间的夹角,p是搜索方向
当 $\theta $ 为180度得时候,$g(x)*p$ 可取到最小值,即为下降最快的方向。所以,负梯度方向为函数f(x)下降最快的方向,x为未知参数,对X进行迭代更新
如果f(x)是凸函数,则局部最优解就是全局最优解。
V. K-Means
K-Means聚类很容易理解,就是已知N个点的坐标xi,i=1,…,N,然后想办法将这堆点分为K类,每个类有一个聚类中心cj,j=1,…,K,很自然地,一个点所属的类别,就是跟它最近的那个聚类中心cj所代表的类别,这里的距离定义为欧式距离。
所以,K-Means聚类的主要任务就是求聚类中心cj。我们当然希望每个聚类中心正好就在类别的“中心”了,用函数来表示出来,就是希望下述函数L最小(kmeans目标函数是平方损失函数):
其中,min操作保证了每个点只属于离它最近的那一类。
如果直接用梯度下降法优化L,那么将会遇到很大困难,不过这倒不是因为min操作难以求导,而是因为这是一个NP的问题,理论收敛时间随着N成指数增长。这时我们也是用EM算法的,这时候EM算法表现为:
1、随机选K个点作为初始聚类中心;
2、已知K个聚类中心的前提下,算出各个点分别属于哪一类,然后用同一类的所有点的平均坐标,来作为新的聚类中心。
这种方法迭代几次基本就能够收敛了,那么,这样做的理由又在哪儿呢?
聚类问题:给定数据点,给定分类数目,求出个类中心,使得所有点到距离该点最近的类中心的距离的平方和最小。
含隐变量的最大似然问题:给定数据点,给定分类数目,考虑如下生成模型,
模型中为隐变量,表示簇的类别。
这个式子的直观意义是这样的,对于某个将要生成的点和类别号,如果不满足“到中心的距离小于等于到其他中心的距离”的话,则不生成这个点。如果满足的话,则取值就是这个“最近的”类中心的编号(如果有多个则均等概率随机取一个),以高斯的概率密度在这个类中心周围生成点。
用EM算法解这个含隐变量的最大似然问题就等价于用K-means算法解原聚类问题。
Q函数是完全数据的对数似然函数关于在给定X和参数$\mu$的情况下对隐变量Z的条件概率的期望,em算法通过求解对数似然函数的下界的极大值逼近求解对数似然函数的极大值。
这和K-means算法中根据当前分配的样本点求新的聚类中心的操作是一样的。
k-means是GMM的简化,而不是特例。
共同点:都是使用交替优化算法,要优化的参数分为两组,固定一组,优化另一组。
- GMM是先固定模型参数,优化 ;然后固定,优化。
- k-means是先固定(聚类中心),优化聚类赋值;然后固定聚类赋值,优化。
k-means对GMM的简化有:
- ,模型中混合权重相等
- ,各个成分的协方差相等,且固定为单位矩阵的倍数
- 分配给各个component的方式,由基于概率变为winner-take-all方式的 hard 赋值。(kmeans中,某样本点和模型中某个子成分,如果该样本点与子成分的中心距离最小,则以高斯的概率密度在中心点周围生成这个点,否则就不生成这个点。而GMM中,每个子成分都有可能生成该样本点,概率值为子成分的系数)
所以说GMM是更为flexible的model,由于大量的简化,使得k-means算法收敛速度快于GMM,并且通常使用k-means对GMM进行初始化。
转自:
http://spaces.ac.cn/archives/4277/
https://www.zhihu.com/question/49972233
转载于:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/7274943.html
梯度下降和EM算法,kmeans的em推导相关推荐
- 【转载】(EM算法)The EM Algorithm
(EM算法)The EM Algorithm EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了. ...
- 机器学习之EM算法的原理及推导(三硬币模型)及Python实现
EM算法的简介 EM算法由两步组成:E步和M步,是最常用的迭代算法. 本文主要参考了李航博士的<统计学习方法> 在此基础上主要依据EM算法原理补充了三硬币模型的推导. 1.EM算法的原理 ...
- (EM算法)The EM Algorithm
EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...
- em算法详细例子及推导_outlier analysis 补充——EM算法
August:人人都懂EM算法zhuanlan.zhihu.com 全网最容易理解最直观最形象的em算法的解释文. 首先,EM和极大似然法一样需要提前假设数据的分布符合XX分布情况,EM算法和极大似 ...
- em算法详细例子及推导_EM算法详解(例子+推导)
一. 例子讲解 假设有两个硬币1和2,随机抛出后出现正面概率为 . .每次取一枚银币,连续抛5次,共抛5轮,数据如下: 硬币1-->(3正2反):硬币2-->(2正3反):硬币3--> ...
- 机器学习:SVM、软间隔、随机梯度下降SVM线性算法
文章目录 SVM目标函数 SVM目标函数推导 函数间隔: 几何间隔: 软间隔.松弛 HingeLoss和软间隔 随机梯度下降算法 线性SVM的算法描述: 线性SVM算法实现: SVM目标函数 SVM目 ...
- em算法详细例子及推导_第九章-EM算法
从第九章开始,学习总结的东西有所不同了,第2-8章是分类问题,都属于监督学习,第9章EM算法是非监督学习.本文主要是总结EM算法的应用以及处理问题的过程和原理推导. EM算法 EM算法(期望极大算法 ...
- 人工智障学习笔记——梯度下降(2)优化算法
四.优化 4-1 Momentum 如果我们把梯度下降法当作小球从山坡到山谷的一个过程,那么在小球滚动时是带有一定的初速度,在下落过程,小球积累的动能越来越大,小球的速度也会越滚越大,更快的奔向谷底, ...
- 梯度下降算法和牛顿算法原理以及使用python用梯度下降和最小二乘算法求回归系数
梯度下降算法 以下内容参考 微信公众号 AI学习与实践平台 SIGAI 导度和梯度的问题 因为我们做的是多元函数的极值求解问题,所以我们直接讨论多元函数.多元函数的梯度定义为: 其中称为梯度算子,它作 ...
- 机器学习/算法面试笔记1——损失函数、梯度下降、优化算法、过拟合和欠拟合、正则化与稀疏性、归一化、激活函数
正值秋招,参考网络资源整理了一些面试笔记,第一篇包括以下7部分. 1.损失函数 2.梯度下降 3.优化算法 4.过拟合和欠拟合 5.正则化与稀疏性 6.归一化 7.激活函数 损失函数 损失函数分为经验 ...
最新文章
- PHP复制和移动目录
- 使用CTE替换派生表语法
- 开源 免费 java CMS - FreeCMS2.1 会员站内信
- mysql版本选择最终建议
- 《教你10分钟制作3D网游》视频吐槽
- Majority Element(169) Majority Element II(229)
- MySQL-第四篇索引
- ASP.NET的Session会导致的性能问题
- 自学按键精灵写脚本,非常有用的一个函数
- python把正整数翻译成英文_将Python整数转换为单词
- 工业相机和普通相机的区别
- 遇到 oracle 错误 904,EXP-00008: 遇到 Oracle 错误 904
- RSS工具-Feeddemon(Feedaemon,Feeddaemon)破解2.0出炉了
- java将字符串变小写变大写_Java 实例 – 字符串小写转大写
- 【BIT数据库实验】openGauss数据库实验二:数据库查询
- R语言按照人口比例绘制甘肃地图
- 解决笔记本电脑外接显示器后声音播放不了的问题
- ipad html兼容问题,如何处理ipad safari CSS 样式的兼容性?_html/css_WEB-ITnose
- STM32F103ZET6开发板实现跑马灯实验
- 【转】iOS游戏/应用的营销及推广技巧(2)
热门文章
- python数据展示库_收藏!盘点很实用的数据科学Python库
- Spring Boot————BeanCreationNotAllowedException异常分析
- oracle数据库有几个服务_oracle数据库可以有几个数据库
- 猜拳游戏html,JavaScript中实现猜拳小游戏
- jmeter mysql查询结果提取_Jmeter-从数据库中获取数据并作为变量使用
- linux 4t磁盘格式化,centos格式化大于2T的硬盘
- web前端期末大作业--响应式汽车租赁网页设计--(HTML+CSS+JavaScript)实现
- java如何阻塞和同步_同步与异步,阻塞与非阻塞
- mysql入门优化_MySQL数据库:MySQL十大优化技巧详解
- java值栈_Struts2 中的值栈是什么?