[背景音乐] 翻译: RyukaSuu |审阅: 19waa Coursera Global Translator Community
我们在多种不同领域看到聚类的应用
作为一个示例 我们来看一些基于时间的数据
以及隐马尔克模型
回想一下我们之前遇到的聚类问题
在我们介绍过的方法里 数据点的索引
对于所有数据的聚类结果并不重要
也就是说 我们可以随意打乱我们数据点的次序
对打乱次序的数据做聚类 得到的结果和会之前的一样
但如果数据点词次序很重要的话 会怎样呢
比如时间序列 每个数据点关联一个时间戳
这会对数据分析有重要影响
比如 我们来看一个单变量的时间序列
观测点的值在y轴方向表示
观测点的时间戳在x轴方向表示
在这里 假设我们的目标是
把这个时间序列解析为 不同的所谓的动态状态
我们可以把它简单看做 数据集里的沿时间轴
的一种不同类型的聚类
有可能有一个绿色聚类 一个蓝色聚类 和一个红色聚类
并且时间序列在这几种 不同状态里切换
如果我们忽略跟每个数据点 关联着的时间戳
想象一下 就以这张图为例 沿x轴将这张图挤压
忽略时间戳 并且仅在 y轴方向上观察这些数据点
尝试对这些点进行聚类分析 将会非常困难
因为 绿色状态的时间序列
对应的取值
与蓝色状态和红色状态的 时间序列对应的取值
有非常多的重叠
因此所有的取值会有 非常多的重叠
如果没有大量的数据将会很难
分析出那里有三种不同的聚类
相反 这些关联时间戳的数据的结构
如这张图所示 可以帮助我们快速发现数据的
比较明显的模式
特别地 在这个数据集里 如果我们当前处在
绿色状态 看起来有很大可能性我们 会继续保持在绿色状态
或许还有其他的状态之间的切换
绿色蓝色的切换或者蓝色红色的切换 要比其他切换的可能性大
这种类型的信息可以帮助我们
从时间序列关联的数据中 提取到我们期望的聚类
所以在时间序列场景下 我们可以 把这个聚类分析看作是一个"划分"的任务
更具体一些 我们来看一个关于蜜蜂跳舞的分析
当一只蜜蜂在蜂窝里的时候 它在三种不同舞蹈动作里切换
为了和蜂窝里的其他蜂蜜交流 食物的地址
它在三种不同的舞蹈动作里切换 分别是 摆动 右转 以及左转
它一直不停重复这些舞蹈动作某种组合
以和其它蜜蜂交流
在这里 我们展示了 三种不同的舞蹈动作序列
这个序列被分割为"摆动" "右转" ”左转“三种舞蹈动作
分别用红色绿色和蓝色表示
但问题是 我们要想办法 自动提取这些信息
仅通过观察蜜蜂在蜂窝周围飞行时
身体的位置以及头部的角度 来提取这些信息
特别地 当我们观察这些舞蹈动作的时候 我们可以绘制一张
关于在某一时间片段内 对应何种舞蹈动作的图
从这张图里可以看出 某种舞蹈动作的持续性
以及各动作之间的转换
摆动 向左和向右 三种动作件的转换
从数据中我们可以发现 确实有某种模式
我们看到各种动作都有持续性
因为如果它当前在做某个舞蹈动作
它有很大可能会持续做这个动作
同时我们也发现某些动作切换 会比其它切换更频繁
比如 我当前处在红色舞蹈状态
有很大可能性我将切到绿色舞蹈状态 或者从绿色状态切到红色状态
尽管显然其它切换也有可能
这种类型的在各种不同动态状态 之间的切换形式
在很多应用里都会出现
幸运的时不仅仅在蜜蜂的研究中出现
例如我们有一段会议音频
如过参与会议的人轮流发言
我们希望能够把音频分段
使得每一段音频对应某个人发言
或许我们观察一个人在 做一组锻炼动作
我们希望能够区分出 这个人在做跳跃运动
跑步动作 或者下蹲动作 等等
通常 人们在做各种 不同的运动动作时
会在一系列的动作里不断切换
类似的 当我们 观察股票数据时
在考虑股票数据的时候 这确实是一种常用的方法
股票指数会在各种"波动频率"之间变化
有的时候股指会剧烈波动 有时会小幅波动
有时波动幅度在以上两者之间 很显然 确实有各种不同幅度的波动
所以 这种类型的结果在很多应用中都能碰到
我们来花一点时间 来介绍一个模型
这个模型可以让我们 从数据中提取这种
这个模型就是隐马尔科夫模型 简写为HMM
HMM非常非常
近似于我们以前介绍的 混合模型
正如在混合模型里一样
每一个观测数据点都与 一个聚类相关联
在混合模型里我们用"聚类"这个名词
在隐马尔科夫模型里 我们常把 聚类称作某个"状态"
我们已经介绍了这些"动态状态" 所以 我们交替使用这两个名词
只是为了与我们之前介绍的混合模型 联系起来
好的 关键点是每一个观测数据点 都对应一个聚类
而且这个对应关系未知 我们多能看见的只有这些观测数据点
然后 正如我们在混合模型里一样 每一个聚类或者
状态对于观测数据点都有对应的分布
回想一下 在混合模型里 我们说每一类图片部分都有
基于图片蓝色分量值的高斯分布
如果我们分别基于白云图片 日落图片 和森林图片 考察这高斯分布 会发现这个几个高斯分布
并不相同
所以这就呈现出不同的聚类
在隐马尔科夫模型里 我们有不同的"动态状态"
对于每个数据点分配一个状态或这说聚类
那么对于某个状态内的观测数据 我们会有同样类型的分布
但是特别重要的不同点是 在隐马尔可夫模型里
某个观测数据点指定为某一聚类的概率 依赖于
这个观测数据点的 前面一个数据点属于哪个聚类
这就描述了我们将如何去捕捉时间依赖性
这就是我们如何去确定我们是否正处在
某一状态的方法
比如蜜蜂的摆动舞蹈动作 它很可能在下一个 时间片段内保持在这个动作状态里
再比如我们如果现在正处在 红色状态 我们很有可能
在下一个时间片段内转到绿色状态 然后有可能再转到蓝色状态
因此
通过沿着时间轴的聚类分配值 我们可以发现聚类的依赖结构
并且利用这个依赖结构我们可以提取到 具有时间依赖性的聚类
最后 HMM确实是 非常聪明的推断算法
它的基础是我们 以前介绍的混合模型
在混合模型的基础上 在聚类分配时增加了
时间依赖
例如 你可以用一个算法计算出 你的HMM参数
的最大似然估计 这个算法跟我们在混合模型里介绍的算法
非常相似
但在这个场景里 由于历史原因 这个算法被叫做Baum-Welch算法
这个算法分别在研究HMM的时候被发现
后来发现它与EM算法也有联系
你可以利用HMM做的另外一件事就是
在给定模型参数的条件下 计算最有可能的状态序列
模型的参数是固定的
你去找到最有可能的状态序列 或者聚类分配
为了完成这个任务 你可以使用Viterbi算法
Viterbi算法是动态规划的一个典型算法
可以高效地帮你找到这个状态序列
同意你也可以利用动态规划 去实现聚类的"软分配"
使用一个叫做"前向后向"算法
这些"软分配"在Baum-Welch算法里 发挥重要作用
如同在之前课程里介绍的 混合模型的标准的EM算法里
这个"软分配"也发挥重要作用
通过本节学习HMM 我们发现
我们在这个课程里学到的方法 确实为
学习其他重要的机器学习算法和方法
打下了稳固的基础
[背景音乐] 翻译: RyukaSuu |审阅: 19waa Coursera Global Translator Community