您的位置:首页 > 其它

Coursera机器学习-第八周-Unsupervised Learning(K-Means)

2016-06-12 09:30 381 查看

Clustering

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。

Unsuperivised Learning:Intruduction

典型的Supervised Learning



有一组附标记(y(i))的训练数据集, 我们想要找出决策边界,藉此区分开正(positive)或负(negative)标记数据。

Unsupervised Learning



我们面对的是一组无标记的训练数据,数据之间,不具任何相关联的标记(即不具有y(i))。

所以我们得到的数据 看起来像这样:一个数据集, 一堆数据点,但没有任何标记以供参考。在无监督学习中, 我们将这种未标记的训练数据送入特定的算法,然后我们要求算法 替我们分析出数据的结构。

K-Means Algorithm

在聚类问题中 我们有未加标签的数据 我们希望有一个算法 能够自动的 把这些数据分成 有紧密关系的子集或是簇

如图所示, 现在我有一些 没加标签的数据, 而我想将这些数据分成两个簇:



执行K均值算法,首先我随机选择两个点 ,这两个点叫做聚类中心 (cluster centroids) ,就是图上边的两个叉(一个红色一个蓝色) 这两个就是聚类中心 (因为要分成 两个簇,所以需要两个聚类中心)



K均值是一个迭代方法:

簇分配

移动聚类中心

簇分配 :

在K均值算法的每次循环中,第一步是要进行簇分配,这就是说,我要遍历所有的样本 ,就是图上所有的绿色的点 ,然后依据 每一个点 是更接近红色的这个中心 还是蓝色的这个中心,来将每个数据点分配到两个不同的聚类中心中。

具体来讲 ,指的是对数据集中的所有点 ,依据他们更接近红色这个中心 ,还是蓝色这个中心 进行染色 ,染色之后的结果如图所示:



移动聚类中心:

我们将两个聚类中心,也就是说红色的叉和蓝色的叉移动到和它一样颜色的那堆点的均值处,那么我们要做的是找出所有红色的点计算出它们的均值,就是所有红色的点 平均下来的位置。然后我们就把红色点的聚类中心移动到蓝色的点也是这样 ,找出所有蓝色的点 计算它们的均值, 把蓝色的叉放到那里。将按照图上所示这么移动 :



最终,当算法收敛,即聚类中心不再变化时,聚类完成:



这里是计算聚类中心的公式:



K-means algorithm:



随机初始化 K 个聚类中心 记作μ1,μ2, 一直到 μk 就像之前图中所示 聚类中心对应于红色叉和蓝色叉所在的位置。

对于每个训练样本 我们用变量 c(i) 表示 K个聚类中心中最接近 x(i) 的 那个中心的下标,这就是簇分配。 依据它离那个聚类中心近 将其染成红色或是蓝色 。所以 c(i) 是一个 在1到 K 之间的数 而且它表明 这个点到底是更接近红色叉还是蓝色叉(如果K=2的话,如果K>2的话就有更多颜色的×了)

对于每个聚类中心,也就是说小写k从1循环到K 将μk 赋值为这个簇的均值。例如,某一个聚类中心 比如说是 μ2 被分配了一些训练样本 像是1,5,6,10 这个表明 c(1)=2,c(5)=2,c(6)=2,c(10)=2, 我们要做的是计算出这四个的平均值,然后用均值更新聚类中心μ2的位置。

PS:那么如果存在一个没有点分配给它的聚类中心 ,那怎么办? 通常在这种情况下 我们就直接移除那个聚类中心。如果这么做了,最终将会得到K-1个簇,而不是K个簇,如果就是要K个簇 ,不多不少 ,但是有个没有点分配给它的聚类中心,你所要做的是重新随机找一个聚类中心。但是直接移除那个中心是更为常见的方法。不过在实际过程中,这个问题不会经常出现。

Optimization Objective



1. c(i)它表示的是 当前的样本 x(i) 所归为的那个簇的索引或者序号

2. 我们用 μk来表示 第 k 个簇的 聚类中心 (cluster centroid)

3. 我们用μc(i)来表示 x(i) 所属的那个簇 的聚类中心

Optimization objective:



K均值算法要做的事情就是,它将找到参数 c(i)和μi 也就是说 找到能够最小化 代价函数 J 的 c 和 μ。 这个代价函数 在K均值算法中有时候也叫做失真代价函数(distortion cost function)

Random Initialization

(1)K-Means算法中最重要的一步就是随机选择初始聚类中心,一般的方法是从样本中随机选择样本点作为聚类中心。



(2)由于初始化聚类中心的不同,这就可能导致K-Means算法会产生局部最优解。



(3)为了避免因为初始化导致的局部最优问题,我们可以选择

随机选择样本点

多次初始化聚类中心,然后计算K-Means的代价函数,根据失真代价函数的大小选择最优解。



Choosing the Number of Clusters

这个问题上没有一个非常标准的解答,或者能自动解决它的方法。 目前用来决定聚类数目的最常用的方法,仍然是通过看可视化的图或者看聚类算法的输出结果,或者其他一些东西来手动地决定聚类的数目。

《大数据——互联网大规模数据挖掘与分布式处理》中提到:给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。

类簇的直径是指类簇内任意两点之间的最大距离。

类簇的半径是指类簇内所有点到类簇中心距离的最大值。

下图是当K的取值从2到9时,聚类效果和类簇指标的效果图:





左图是K取值从2到7时的聚类效果,右图是K取值从2到9时的类簇指标的变化曲线,此处我选择类簇指标是K个类簇的平均质心距离的加权平均值。从上图中可以明显看到,当K取值5时,类簇指标的下降趋势最快,所以K的正确取值应该是5。

Ag介绍的方法:

肘部法则



通过失真代价函数关于K大小的函数曲线,代价函数会醉着K的增大逐渐减小,直至趋于稳定,由此我们可以判断,当拐角的时候是最适合的K大小,但是实际情况中,往往我们无法得到一个明显的拐点用于判断(例如右边的图)

根据应用场景需求设置



具体来说 ,你要做的是从T恤生意的角度来思考这个事情 。然后问 “如果我有5个尺码分段, 那么我的T恤有多适合我的顾客? 我可以卖出多少T恤? 我的顾客将会有多高兴呢?” 从T恤生意的角度去考虑 ,其中真正有意义的是需要 ,更多的T恤尺寸来更好地满足我的顾客 ,还是说我需要 更少的T恤尺寸 我制造的T恤尺码就更少 我就可以将它们更便宜地卖给顾客?因此T恤的销售业务的观点 ,可能会提供给你一个 决定采用3个类还是5个类的方法。

Motivation

Motivation : Data Compression

压缩数据使得数据占用更少的计算机内存和硬盘空间 ,它还能给算法提速 ,它还能给算法提速 。如图,是将3维数据压缩成2维



Motivation : Visualization

假如我们已经收集了大量的统计数据集有关全世界不同国家的 ,或许第一个特征x1 是国家的 ,或者说是国内生产总值; x2是一个百分比 ,每人占有的GDP ;x3人类发展指数 ;x4预期寿命 ;x5x6等其它特征 我们也许会有大量的数据集 ,像这里这样的数据 ,对于每个国家可能有50个特征 ,我们有这样的众多国家的数据集。很难去绘制出一幅50维度的图



但如果你绘制出这些特征 ,你也许会发现在这里, 每个国家 用一个点z(i)表示, z(i)是一个二维数据。



可以用这二维数据概括。

Principal Component Analysis

这部分内容详见:http://blog.csdn.net/dingchenxixi/article/details/51643523
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息