参考: html
Clusering, GMM, Variational Inference, The Dirchlet Process 这是一个学习渐进的过程,那么,就先从聚类开始。算法
From: 漫谈 Clustering 系列函数
那么计算机要如何来完成这个任务呢?固然,计算机尚未高级到可以“经过形状大体看出来”,不过,对于这样的 N 维欧氏空间中的点进行聚类,有一个很是简单的经典算法,也就是本文标题中提到的 k-means 。性能
在介绍 k-means 的具体步骤以前,让咱们先来看看它对于须要进行聚类的数据的一个基本假设吧:对于每个 cluster ,咱们能够选出一个中心点 (center) ,使得该 cluster 中的全部的点到该中心点的距离小于到其余 cluster 的中心的距离。虽然实际状况中获得的数据并不能保证老是知足这样的约束,但这一般已是咱们所能达到的最好的结果,而那些偏差一般是固有存在的或者问题自己的不可分性形成的。例以下图所示的两个高斯分布,从两个分布中随机地抽取一些数据点出来,混杂到一块儿,如今要让你将这些混杂在一块儿的数据点按照它们被生成的那个分布分开来:学习
【这里的图例对理解颇有帮助】优化
因为这两个分布自己有很大一部分重叠在一块儿了,例如,对于数据点 2.5 来讲,它由两个分布产生的几率都是相等的,你所作的只能是一个猜想;稍微好一点的状况是 2 ,一般咱们会将它归类为左边的那个分布,由于几率大一些,spa
然而此时它由右边的分布生成的几率仍然是比较大的,咱们仍然有不小的概率会猜错。orm
而整个阴影部分是咱们所能达到的最小的猜错的几率,这来自于问题自己的不可分性,没法避免。所以,咱们将 k-means 所依赖的这个假设看做是合理的。htm
基于这样一个假设,咱们再来导出 k-means 所要优化的目标函数:设咱们一共有 N 个数据点须要分为 K 个 cluster ,k-means 要作的就是最小化blog
这个函数,其中 在数据点 n 被归类到 cluster k 的时候为 1 ,不然为 0 。直接寻找
和
来最小化
并不容易,不过咱们能够采起迭代的办法:先固定
,选择最优的
,很容易看出,只要将数据点归类到离他最近的那个中心就能保证
最小。下一步则固定
,再求最优的
。将
对
求导并令导数等于零,很容易获得
最小的时候
应该知足:
亦即 的值应当是全部 cluster k 中的数据点的平均值。【这里很像GMM的PI值】
因为每一次迭代都是取到 的最小值,所以
只会不断地减少(或者不变),而不会增长,这保证了 k-means 最终会到达一个极小值。虽然 k-means 并不能保证老是能获得全局最优解,可是对于这样的问题,像 k-means 这种复杂度的算法,这样的结果已是很不错的了。
下面咱们来总结一下 k-means 算法的具体步骤:【算法】
短板,弊端,无能为力之处:
然而并非全部的数据都能知足这样的要求,对于数值类型的特征,好比身高,能够很天然地用这样的方式来处理,可是类别 (categorical) 类型的特征就不行了。举一个简单的例子,若是我如今要对犬进行聚类,而且但愿直接在全部犬组成的空间中进行,k-means 就无能为力了,由于欧氏距离 在这里不能用了:一只 Samoyed 减去一只 Rough Collie 而后在平方一下?天知道那是什么!再加上一只 German Shepherd Dog 而后求一下平均值?根本无法算,k-means 在这里步履维艰!
而且咱们已经证实在固定了各个数据点的 assignment 的状况下,这样选取的中心点可以把目标函数 最小化。然而在 k-medoids 中,咱们将中心点的选取限制在当前 cluster 所包含的数据点的集合中。
换句话说,在 k-medoids 算法中,咱们将从当前 cluster 中选取这样一个点——它到其余全部(当前 cluster 中的)点的距离之和最小——做为中心点。
【理解小助手】
k-means 和 k-medoids 之间的差别就相似于一个数据样本的均值 (mean) 和中位数 (median) 之间的差别:前者的取值范围能够是连续空间中的任意值,然后者只能在给样本给定的那些点里面选。那么,这样作的好处是什么呢?
一个最直接的理由就是 k-means 对数据的要求过高了,它使用欧氏距离描述数据点之间的差别 (dissimilarity) ,从而能够直接经过求均值来计算中心点。这要求数据点处在一个欧氏空间之中。
从 k-means 变到 k-medoids ,时间复杂度陡然增长了许多:在 k-means 中只要求一个平均值 便可,而在 k-medoids 中则须要枚举每一个点,并求出它到全部其余点的距离之和,复杂度为
。
在 k-medoids 中,咱们把原来的目标函数 中的欧氏距离改成一个任意的 dissimilarity measure 函数
:
最多见的方式是构造一个 dissimilarity matrix 来表明
,其中的元素
表示第
只狗和第
只狗之间的差别程度,例如,两只 Samoyed 之间的差别能够设为 0 ,一只 German Shepherd Dog 和一只 Rough Collie 之间的差别是 0.7,和一只 Miniature Schnauzer 之间的差别是 1 ,等等。
K-Means |
K-Medoids |
初始据点随机选取 |
初始随机据点限定在样本点中 |
使用Means(均值)做为聚点,对outliers(极值)很敏感 |
使用Medoids(中位数)做为聚点 |
对数据要求高,要求数据点处于欧式空间中 |
可适用类别(categorical)类型的特征——(4) |
时间复杂度:O(n*k*t),t为迭代次数 |
时间复杂度:O(n^2 *k*t),t为迭代次数——(4) |
K-Means 算法对小规模数据集较高效 |
K-Medoids算法对大规模数据性能更好,但伸缩性较差——(3) |
都有可能陷入局部最优解的困境之中 |
|
K的含义相同,都须要开始人为设定簇数目 |
|
都是无监督算法 |
References:
实际作法就是:
【一种容易理解的压缩算法】