机器学习基础二:K-means聚类

目录:

  • 监督学习&无监督学习
  • 聚类&分类
  • 几何距离
  • k均值
  • 伪代码实现
  • K均值存在的两个问题

 

一:监督学习 and 无监督学习

监督学习(supervised learning)训练样本带有信息标记,利用已有的训练样本信息学习数据的规律预测未知的新样本标签

  • · 回归分析(regression)
  • · 分类(classification)

无监督学习(Unsupervised learning)训练样本的标记信息是未知的,目标是为了揭露训练样本的内在属性,结构和信息,为进一步的数据挖掘提供基础。

  • · 聚类(clustering)
  • · 降维(dimensionality reduction)
  • · 异常检测(outlier detection)
  • · 推荐系统(recommendation system)

 

二:分类和聚类的区别

1. 分类(Classification):根据特征,将样本归类到已定义的类别中。你知道TA是什么

2. 聚类(Clustering)根据特征,使得特征相似(距离)的样本聚为未定义的类或簇当中。

                                        你不知道TA是什么,没有label。

  聚类基本思想:将距离近的认为是一簇。每个簇内部距离近,簇与簇之间距离较远。物以类聚

                            相似这一概念主要取决于所选择的相似度的计算方法。

机器学习基础二:K-means聚类_第1张图片

图片来源:https://www.jianshu.com/p/d68a1e429860

 

三:聚类判断依据:几何距离

闵可夫斯基距离(Minkowski Distance),又叫明式距离等

闵氏距离不是特指某一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。

闵氏距离定义:两点P,Q之间的明式距离:

p=1时,曼哈顿距离(Manhattan Distance)

p=2时,欧氏距离(Euclidean Distance)

p=∞时,切比雪夫距离(Chebyshev Distance)

簇:(或cluster):所有数据点的子集合。最大化簇内的相似性;最小化簇与簇之间的相似性。

四:K-means

  • K-means聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。这个问题将归结为一个把数据空间划分为Voronoi cells的问题。
  • 这个问题在计算上是NP困难的,不过存在高效的启发式算法。一般情况下,都使用效率比较高的启发式算法,它们能够快速收敛于一个局部最优解。这些算法通常类似于通过迭代优化方法处理高斯混合分布的最大期望算法(EM算法)。而且,它们都使用聚类中心来为数据建模;然而k-平均聚类倾向于在可比较的空间范围内寻找聚类,期望-最大化技术却允许聚类有不同的形状。(定义来自Wikipedia)
  • K-means与k-近邻之间没有任何关系(后者是另一流行的机器学习技术)。
  • K是聚类中心的数量,就是分成几类,离谁近就分成哪一类;簇的个数;   means:均值。

图示二类的K-means:

机器学习基础二:K-means聚类_第2张图片

图片来源:https://www.jianshu.com/p/2fa67f9bad60

K-均值是一个迭代算法,假设输入样本为(x1,x2,...,xn), 每一个样本都是d-维实向量,我们想要将数据聚类成k个组(k<=n),其方法为 :

1. 首先选择初始化?个随机的聚类中心( cluster centroids), 用?1,?2,...,??来表示。

2. 点归属更新:对于数据集中的每一个样本数据,按照距离聚类中心点的距离(距离计算方法可以选欧几里得距离),将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。

距离计算公式:

3. 簇重心更新:计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。

4. 重复步骤2-3直至中心点不再变化。

伪代码

?1,?2,...,?? 来表示聚类中心,用 ?(1),?(2),...,?(?)来存储与第 ?个实例数据最近的聚类中心的索引,

K-均值 算法的伪代码如下:

Repeat {
for i = 1 to m
Si:= index (form 1 to K) of cluster centroid closest to x(i)
for k = 1 to K
μk := average (mean) of points assigned to cluster k
}

算法分为两个步骤,

第一个for循环是赋值步骤,即:对于每一个样例 ?,计算其应该属于的类。

第二个 for循环是聚类中心的移动,即:对于每一个类 ?,重新计算该类的质心。

优化目标:

K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,
因此,K-均值的代价函数(又称 畸变函数 Distortion function)为

机器学习基础二:K-means聚类_第3张图片

 

从上面的伪代码我们知道,第一个循环是用于减小 ?(?)引起的代价,而第二个循环则是用于减小 ??引起的代价。

迭代的过程一定会是每一次迭代都在减小代价函数,不然便是出现了错误。

换句话说,K-means的目标是找到满足下式的聚类Ci,

也就是找到最终的中心点,使得每个样本到中心点的差距和最小

机器学习基础二:K-means聚类_第4张图片

其中μi是簇Ci的均指向量,也叫质心,表达式为:

 

K-Means算法遇到的问题

根据上面我们掌握的K-Means算法原理,发现有两个问题会很大影响K-Means算法。

  1. K- means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重。例如:
    一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远;在当前情况下,使用中位数6可能比使用均值的想法更好,使用中位数的聚类方式叫做K- Mediods聚类(K中值聚类)

  2. 初值敏感

    K- means算法是初值敏感的,选择不同的初始值可能导致不同的簇划分规则。
    为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始节点构造不同的分类规则,然后选择最优的构造规则。

这部分参考资料来自:https://www.jianshu.com/p/2fa67f9bad60

你可能感兴趣的:(4.,机器学习)