Kmean算法

聚类算法

对于"监督学习"(supervised learning),其训练样本是带有标记信息的,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。对于无监督学习,应用最广的便是"聚类"(clustering)。
  聚类算法试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),通过这样的划分,每个簇可能对应于一些潜在的概念或类别。

kmeans算法又名k均值算法。其算法思想大致为:先从样本集中随机选取 k 个样本作为簇中心,并计算所有样本与这 k 个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的“簇中心”

算法的算法过程如下:

D为训练集,K为聚类簇的个数,maxIter最大迭代次数
KMeans(D, K, maxIter):随机选取K个中心点for j in range(m):计算每个样本Xj到各个簇中心的距离根据最近距离,筛选样本归属于哪个簇for i in range(k):计算新的簇的中心,利用均值如果簇中心改变,则更新该簇中心,否则不变如果每个簇的中心都没更新则退出算法

算法分析:

kmeans算法由于初始“簇中心”点是随机选取的,因此最终求得的簇的划分与随机选取的“簇中心”有关,也就是说,可能会造成多种 k个簇的划分情况。这是因为kmeans算法收敛到了局部最小值,而非全局最小值

二分k-means算法

  基于kmeans算法容易使得结果为局部最小值而非全局最小值这一缺陷,对算法加以改进。使用一种用于度量聚类效果的指标SSE(Sum of Squared Error),即对于第 ii 个簇,其SSE为各个样本点到“簇中心”点的距离的平方的和,SSE值越小表示数据点越接近于它们的“簇中心”点,聚类效果也就越好。以此作为划分簇的标准。
  算法思想是:先将整个样本集作为一个簇,该“簇中心”点向量为所有样本点的均值,计算此时的SSE。若此时簇个数小于 k,对每一个簇进行kmeans聚类(k=2) ,计算将每一个簇一分为二后的总误差SSE,选择SSE最小的那个簇进行划分操作。

算法的算法过程如下:

D为训练集,K为聚类簇的个数,maxIter最大迭代次数
KMeans(D, K, maxIter):将所有点看做一个簇,计算此时“簇中心”向量while “簇中心”个数h<k :for i=1,2,...,h do将第 i 个簇使用 kmeans算法进行划分,其中 k=2计算划分后的误差平方和 SSEi比较 k 种划分的SSE值,选择SSE值最小的那种簇划分进行划分更新簇的分配结果添加新的“簇中心”until 当前“簇中心”个数达到 k

二分k-means算法分析:

二分k-means算法不再随机选取簇中心,而是从一个簇出发,根据聚类效果度量指标SSE来判断下一步应该对哪一个簇进行划分,因此该方法不会收敛到局部最小值,而是收敛到全局最小值。

HMM模型

隐马尔可夫模型(Hidden Markov Model,以下简称HMM)。

1、什么样的问题需要HMM模型

使用HMM模型的问题一般有一下两个特征:

1)问题是基于序列的,比如时间序列或者状态序列。

2)问题中有两类数据,一列序列数据是可以观测的,即观测序列;而另一类数据是不能观测到的,即隐藏状态序列,简称状态序列。

有这两个特征,那么问题一般可以用HMM模型解决。这样的问题在实际生活中是很多的。比如:打字的过程,在键盘上敲出来的一系列字符就是观测序列,而实际想输入的句子就是隐藏序列,输入法的任务就是根据敲入的一系列字符尽可能的猜测我要输入的词语,并把最可能的词语放在最前面,这就可以看做一个HMM模型。

2、HMM模型的定义

HMM模型详细介绍:http://www.52nlp.cn/hmm-learn-best-practices-two-generating-patterns

http://www.52nlp.cn/hmm-learn-best-practices-three-hidden-patterns

http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models

对于HMM模型,假设Q是所有可能的隐藏状态的集合,V是所有可能的观测状态的集合,即:

其中,N是可能的隐藏状态数,M是所有的可能的观察状态数。

对于一个长度为T的序列,I对应的状态序列, O是对应的观察序列,即:

其中,任意一个隐藏状态∈Q, 任意一个观察状态∈V。

HMM模型做了两个很重要的假设如下:

1)齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态。当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。但是这样假设的好处就是模型简单,便于求解。如果在时刻t的隐藏状态是,在时刻t+1的隐藏状态是 , 则从时刻t到时刻t+1的HMM状态转移概率可以表示为:

这样可以组成马尔科夫链的状态转移矩阵A:

2)观测独立性假设。即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。如果在时刻t的隐藏状态是, 而对应的观察状态为, 则该时刻观察状态在隐藏状态下生成的概率为,满足:

这样可以组成观测状态生成的概率矩阵B:

除此之外,我们需要一组在时刻t=1的隐藏状态概率分布Π:

, 其中 

一个HMM模型,可以由隐藏状态初始概率分布Π, 状态转移概率矩阵A和观测状态概率矩阵B决定。Π, A决定状态序列,B决定观测序列。因此,HMM模型可以由一个三元组λ表示如下:

3、一个HMM模型实例

一个简单的实例来描述上面抽象出的HMM模型。这是一个盒子与球的模型,例子来源于李航的《统计学习方法》。

假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。如此下去,直到重复三次,得到一个球的颜色的观测序列:

O={红,白,红}.

注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。

那么按照我们上一节HMM模型的定义,我们的观察集合是:

V={红,白},M=2

我们的状态集合是:

Q={盒子1,盒子2,盒子3},N=3

而观察序列和状态序列的长度为3.

初始状态分布为:

状态转移概率分布矩阵为:

观测状态概率矩阵为:

从上一节的例子,可以抽象出HMM观测序列生成的过程。

输入的是HMM的模型,观测序列的长度T

输出是观测序列

生成的过程如下:

 1)根据初始状态概率分布Π生成隐藏状态

 2) for t from 1 to T

   a. 按照隐藏状态it的观测状态分布生成观察状态.   
           b. 按照隐藏状态it的状态转移概率分布产生隐藏状态.

所有的一起形成观测序列

HMM模型一共有三个经典的问题需要解决:

 1) 评估观察序列概率。即给定模型λ=(A,B,Π)和观测序列,计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到前向后向算法。

 2)模型参数学习问题。即给定观测序列,估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baun-Welch算法。这个问题是HMM模型三个问题中最复杂的。

 3)预测问题,也称为解码问题。即给定模型λ=(A,B,Π)和观测序列,求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比(Viterbi)算法。这个问题是HMM模型三个问题中复杂度居中的算法。

Baun-Welch算法,Viterbi解码算法将在下一篇学习日志中介绍。

语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}相关推荐

  1. Premiere Pro CC 2019 Essential Training: The Basics Premiere Pro CC 2019基本培训:基础知识 Lynda课程中文字幕

    Premiere Pro CC 2019 Essential Training: The Basics 中文字幕 Premiere Pro CC 2019基本培训:基础知识 中文字幕Premiere ...

  2. 训练日志 2019.1.14

    训练第一天,收获还是比较大的. 下午比赛 A 题是不互素的中国剩余定理模板题,把之前的模版拿过来贴上直接 WA,发现输入的除数与余数正好跟模版反了,改了又 WA 一次,心态崩了,跟 sdz 要的模版, ...

  3. window计算机日志分析详解,系统基础知识:筛选Windows日志与借助Windows日志分析故障...

    系统基础知识:筛选Windows日志与借助Windows日志分析故障 我们最关心的事情,一定是我们Windows 7系统的安全,我们学习Windows事件查看器的最终目的,也是希望通过WIndows事 ...

  4. 语音识别基础知识_语音识别_CTI论坛

    语音辨识基础知识 近 年 来 , 由 于 电 脑 在 软 件 上 的 长 足 进 步 , 类 似 电 视 影 集 霹 雳 游 侠 中 李 麦 克 与 霹 雳 车 伙 计 之 间 能 够 使 用 人 类 ...

  5. 语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}

    决策树算法(ID3. C4.5. CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处,熵值为0.其具有可读性.分类速度快的 ...

  6. 语音识别学习日志 2019-7-13 语音识别基础知识准备 1{语音基础知识}

    线性预测 线性预测(linear prediction)根据随机信号过去的p个已知抽样值序列为Sn-1,Sn-2,-Sn-p,预测现时样值Sn的估计值的方法.预测公式是一个线性方程,所以这种预测称为线 ...

  7. 语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}

    HMM 维特比算法(Viterbi Algorithm)详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorith ...

  8. 语音识别学习日志 2019-7-15 语音识别基础知识准备4 {Baun-Welch算法}

    HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorit ...

  9. 语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}

    https://blog.csdn.net/lin_limin/article/details/81048411会对GMM和EM做详细介绍 本文参考: http://www.ituring.com.c ...

最新文章

  1. Learning Perl(Perl语言入门)学习笔记(3)
  2. 2019-11-09 正定矩阵的一些常见概念
  3. macos关闭软件更新小红点_MacOS和Windows哪个更适合你?
  4. mysql获取当前时间毫秒_MySQL性能指标及计算方法
  5. 复数抽象数据类型C语言,采用C/C++语言如何实现复数抽象数据类型Complex
  6. 8.使用Exists监控ZNode的三大Change事件
  7. python的property用法_Python的@property使用方法详解
  8. WAP PUSH——服务信息
  9. mysql 地理空间数据库_地理空间数据库
  10. 华为mate40鸿蒙系统用久了会卡吗,华为mate40用多久会卡_华为mate40能流畅使用多久...
  11. 大数据就业前景,分析的太到位了
  12. 关于安装wordcloud库的那些事
  13. Think Pad L480充电蓝屏问题解决
  14. 用js实现加载本地图片并显示并将图片信息上传至服务端
  15. 《卓有成效的管理者》阅读心得
  16. android word分页,控制分页
  17. Google是如何提供“无缝”的街景全景图的?
  18. 计算机专业助我成长400字作文,读书,助我成长400字作文
  19. 链表就地逆置Java_单链表就地逆置(Java版)
  20. css实现翻转导航栏的效果

热门文章

  1. android 名片识别 简书,iOS 自己实现 名片识别 三 图片处理
  2. 反函数连续性定理 反三角_高中数学:三角函数诱导公式及诱导公式口诀
  3. jdk中java_怎样使用JavaJDK中Java?
  4. android光传感实现摩斯密码,根据莫尔斯代码 - Android的闪烁闪光。 如何避免ANR次数由于睡觉? (火炬APP)...
  5. c语言密码锁程序,急求C语言电子密码锁程序
  6. zabbix内网安装部署_zabbix2.4.8升级3.0.31操作部署记录
  7. 【LeetCode笔记】581. 最短无序连续子数组(Java、数组)
  8. python现在时间减去过去时间等于20分钟怎么写_获取当前时间减去10分钟的话SQL语句怎么写...
  9. html表格横向竖向滚动,利用纯css实现table固定列与表头中间横向滚动的思路和实例...
  10. 计算机内部运算的部件是什么意思,运算器是执行什么和什么运算的部件