无监督学习——聚类算法

聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。

此次我们学习聚类中的第一个算法——K-均值算法。K-均值算法本质就是重复将样本分配的类里面,不断的更新类的重心位置。

这里将围绕K-均值算法讨论目标优化、随机初始化和如何选择聚类数。

  • K-Means算法

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。

K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:

首先选择??个随机的点,称为聚类中心(cluster centroids);

对于数据集中的每一个数据,按照距离??个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。

计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。

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

心的索引,K-均值算法的伪代码如下:

Repeat {

for i = 1 to m

c(i) := 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

}

即:

选择K个点作为初始质心 
repeat 
    将每个点指派到最近的质心,形成K个簇 
    重新计算每个簇的质心 
until 簇不发生变化或达到最大迭代次数

算法分为两个步骤,第一个 for 循环是赋值步骤,即:对于每一个样例??,计算其应该属

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

K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组群的情况下。

  • 优化目标

K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,

因此 K-均值的代价函数(又称畸变函数 Distortion function)为:

通过比较这两个式子,我们可以发现,K-均值迭代算法,第一个循环是用于减小??(??)引起的代价,

而第二个循环则是用于减小????引起的代价。迭代的过程一定会是每一次迭代都在减小代价函

数,不然便是出现了错误。

  • 随机初始化

在运行K-均值算法的之前,我们首先要随机初始化所有的聚类中心点,下面介绍怎样做:

1. 我们应该选择?? < ??,即聚类中心点的个数要小于所有训练集实例的数量

2. 随机选择??个训练实例,然后令??个聚类中心分别与这??个训练实例相等

K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况。

为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始

化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。这种方法在??较小的时

候还是可行的,但是如果??较大,这么做也可能不会有明显地改善

  • 选择聚类数

通过学习,可以发现K-Means算法有主要的两个缺陷:
1. K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的。
2. K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同。

通过“肘部法则”,选择聚类数。

改变??值,也就是聚类类别数目的总数。用一个聚类来运行 K 均值聚类方法。这就意味着,所有的数据都会分到一个聚类里,然后计算成本函数

或者计算畸变函数??。??代表聚类数字。

如果问题中没有指定的值,可以通过肘部法则这一技术来估计聚类数量。肘部法则会把不同值的成本函数值画出来。

随着值的增大,平均畸变程度会减小;每个类包含的样本数会减少,于是样本离其重心会更近。

但是,随着值继续增大,平均畸变程度的改善效果会不断减低。值增大过程中,畸变程度的改善效果下降幅度最大的位置对应的值就是肘部。

原文地址:https://www.cnblogs.com/CuteyThyme/p/11361098.html

时间: 2024-10-14 10:56:19

无监督学习——聚类算法的相关文章

05_无监督学习--聚类模型--K 均值

无监督学习--聚类模型--K 均值0.引入依赖1.数据的加载和预处理2.算法实现3.测试 无监督学习--聚类模型--K 均值 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt # 这里直接 sklearn 里的数据集from sklearn.datasets.samples_generator import make_blobs 1.数据的加载和预处理 x, y = make_blobs(n_samples=100, centers

4.无监督学习--聚类

K-means方法及其应用 1.K-means聚类算法简介: k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低.主要处理过程包括: 1.随机选择k个点作为初始的聚类中心. 2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇. 3.对每个簇,计算所有点的均值作为新的聚类中心. 4.重复2.3直到聚类中心不再发生改变. 举例:对于A.B.C.D.E这5个点,我们先随机选择两个点作为簇中心点,标记为红色和黄色,对于第一次聚类结果,我们分别计算所有的

0A04 无监督学习:聚类(1) k-means

这是一个非常简单的聚类算法,算法的目的就是找到这些中心点的合适坐标,使得所有样本到其分组中心点距离的平方和最小. K-means 的中心点向量不一定是训练样本中某成员的位置 import numpy as npfrom sklearn.cluster import KMeans # 引入K-means模型 # 1.训练和预测X = np.array([[1,2],[1,4],[1,0], [4,2],[4,4],[4,0]])kmeans = KMeans(n_clusters=2,random

0A04 无监督学习:聚类(2) 近邻算法(Affinity Propagation)

AP算法,具有结果稳定可重现 训练前不用制定K-means中K值,但是算法的时间复杂度比K-means高 import numpy as npfrom sklearn.cluster import AffinityPropagation # 引入AP算法聚类 X = np.array([[1,2],[1,4],[0.7,0],[0.2,5],[0,4],[1.3,0],[0.1,2],[0,4],[0.4,0]]) # 训练数据af = AffinityPropagation(preferenc

[数据挖掘课程笔记]无监督学习——聚类(clustering)

什么是聚类(clustering) 个人理解:聚类就是将大量无标签的记录,根据它们的特点把它们分成簇,最后结果应当是相同簇之间相似性要尽可能大,不同簇之间相似性要尽可能小. 聚类方法的分类如下图所示: 一.如何计算样本之间的距离? 样本属性可能有的类型有:数值型,命名型,布尔型……在计算样本之间的距离时,需要将不同类型属性分开计算,最后统一相加,得到两个样本之间的距离.下面将介绍不同类型的属性的数据计算方法. 对于全部都是连续的数值型的样本来说,首先,对于值相差较大的属性来说,应该进行归一化,变

R语言与数据分析之四:聚类算法1

前面和大家分享的分类算法属于有监督学习的分类算法,今天继续和小伙伴们分享无监督学习分类算法---聚类算法.聚类算法也因此更具有大数据挖掘的味道 聚类算法本质上是基于几何距离远近为标准的算法,最适合数据是球形的问题,首先罗列下常用的距离: 绝对值距离(又称棋盘距离或城市街区距离) Euclide距离(欧几里德距离,通用距离) Minkowski 距离(闵可夫斯基距离),欧几里德距离 (q=2).绝对值距离(q=1)和切比雪夫距离(q=无穷大),这些都是闵可夫斯基的特殊情况. Chebyshew(切

无监督学习小记(参考)

下面凌乱的小记一下无监督学习 无监督学习->聚类 降维 聚类:数据相似性 相似性的评估:两个数据样本间的距离 距离:欧氏距离 曼哈顿距离 马氏距离 夹角余弦 sklearn 聚类算法 sklearn.cluster,如k-means 近邻传播 DBSCAN等 标准的数据输入格式:[样本个数,特征个数]定义的矩阵形式 介绍sklearn.cluster |算法名称|参数|可扩展性|相似度度量| |-|-|-|-| 降维 主成分分析PCA PCA常用于高维数据集的探索与可视化,还可以用于数据压缩和预

『cs231n』无监督学习

经典无监督学习 聚类 K均值 PCA主成分分析 等 深度学习下的无监督学习 自编码器 传统的基于特征学习的自编码器 变种的生成式自编码器 Gen网络(对抗式生成网络) 传统自编码器 原理 类似于一个自学习式PCA,如果编码/解码器只是单层线性的话 自编码器编码解码示意图: 特征提取过程中甚至用到了卷积网络+relu的结构(我的认知停留在Originally级别) 编码&解码器可以共享权值(在我接触的代码中一般都没共享权值) 损失函数推荐L2 应用 由于重建已知数据是个没什么用的过程,所以自编码器

无监督学习——K-均值聚类算法对未标注数据分组

无监督学习 和监督学习不同的是,在无监督学习中数据并没有标签(分类).无监督学习需要通过算法找到这些数据内在的规律,将他们分类.(如下图中的数据,并没有标签,大概可以看出数据集可以分为三类,它就是一个无监督学习过程.) 无监督学习没有训练过程. 聚类算法 该算法将相似的对象轨道同一个簇中,有点像全自动分类.簇内的对象越相似它的分类效果越好. 未接触这个概念可能觉得很高大上,稍微看了一会其实算法的思路和KNN一样很简单. 原始数据集如下(数据有两个特征,分别用横纵坐标表示),原始数据集并没有任何标