机器学习强基计划7-2:图文详解k-均值聚类(k-means)算法(附python实现)(代码片段)

Mr.Winter` Mr.Winter`     2023-03-27     665

关键词:

目录

0 写在前面

机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树、支持向量机、贝叶斯与马尔科夫决策、强化学习等。强基计划实现从理论到实践的全面覆盖,由本人亲自从底层编写、测试与文章配套的各个经典算法,不依赖于现有库,可以大大加深对算法的理解。

🚀详情:机器学习强基计划(附几十种经典模型源码)


本文的目标是基于K-均值聚类原理实现下面的可视化效果

1 什么是聚类?

聚类(clustering)无监督学习(unsupervised learning)中研究最多、应用最广的技术之一,其基本思路是通过对无标记训练样本的学习来揭示数据内在的聚合性质与规律

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个簇(cluster),每个簇可能对应于一些潜在的概念(类别),但这些概念的语义需由开发者来把握和命名。

形式化地,假定训练集 X = x 1 , x 2 , ⋯   , x m X=\\left\\ \\boldsymbolx_1,\\boldsymbolx_2,\\cdots ,\\boldsymbolx_m \\right\\ X=x1,x2,,xm包含 m m m个无标记样本,每个样本 x i = x i 1 , x i 2 , ⋯   , x i n \\boldsymbolx_i=\\left\\ x_i1,x_i2,\\cdots ,x_in \\right\\ xi=xi1,xi2,,xin是一个 n n n维征向量。

聚类算法的目标是将训练集 X X X划分为 k k k个不相交的簇 C = C 1 , C 2 , ⋯   , C k \\mathcalC =\\left\\ C_1,C_2,\\cdots ,C_k \\right\\ C=C1,C2,,Ck,其中 C l ′ ∩ C l = ⊘ C_l'\\cap C_l=\\oslash ClCl= X = ⋃ l = 1 k C l X=\\bigcup\\nolimits_l=1^kC_l X=l=1kCl,每个簇都对应一个未赋语义的簇标记(cluster label),记为 λ j ∈ 1 , 2 , ⋯   , k \\lambda _j\\in \\left\\ 1,2,\\cdots ,k \\right\\ λj1,2,,k,聚类的结果可用包含 m m m个元素的簇标记向量表示 λ = [ λ 1 λ 2 ⋯ λ m ] T \\boldsymbol\\lambda =\\left[ \\beginmatrix \\lambda _1& \\lambda _2& \\cdots& \\lambda _m\\\\\\endmatrix \\right] ^T λ=[λ1λ2λm]T

聚类既能作为一个单独过程,用于找寻数据内在的聚合结构,也可作为分类等其他学习任务的前驱过程。

例1 在一些商业应用中需对用户类型进行判别,但商家往往不知道用户可以分为哪些类型,此时可先对用户数据集进行聚类,根据聚类结果将每个簇定义为一种类型用户,然后再基于这些类训练分类模型,用于判别新用户的类型。

2 K均值聚类原理

2.1 原型聚类

原型聚类(prototype-based clustering)的核心原理是通过参考原型向量(模板向量)或原型分布(模板分布)的方式来完成聚类过程

在学得一组原型向量 p 1 , p 2 , ⋯   , p k \\left\\ \\boldsymbolp_1,\\boldsymbolp_2,\\cdots ,\\boldsymbolp_k \\right\\ p1,p2,,pk后即可实现对样本空间的簇划分。对任意样本 x \\boldsymbolx x ,将被划入与其距离最近的原型向量 p i \\boldsymbolp_i pi所代表的簇中,该样本与 p i \\boldsymbolp_i pi的距离不大于它与其他原型向量的距离。

2.2 K-means算法流程

K-均值聚类(K-means)属于原型聚类的一种,它以簇均值向量为模板向量,通过贪心策略迭代划分簇。算法流程如下

3 Python实现

3.1 算法复现

  • 初始化均值向量
    self.kVector = [copy.deepcopy(self.dataSet[random.randint(0, self.m - 1)]) for i in range(self.k)]
    
  • 更新簇划分
    t = 0
    while t < self.T:
       # 初始化簇
       kCluster = i: [] for i in range(self.k)
       # 更新簇划分
       for i in range(self.m):
           # 样本与各均值向量的距离
           d = [self.__dist(self.dataSet[i], self.kVector[j]) for j in range(self.k)]
           # 以最小距离对应的簇号为簇标记
           label = d.index(min(d))
           # 更新簇划分
           kCluster[label].append(self.dataSet[i])
    
  • 更新均值向量
    # 更新均值向量
    kVectorNew = [sum(kCluster[i]) / len(kCluster[i]) for i in range(self.k)]
    # 计算均值向量更新幅度
    delta = [sum(kVectorNew[i] - self.kVector[i]) for i in range(self.k)]
    if sum(delta) < 0.01:
        break
    else:
        self.kVector = kVectorNew
    t = t + 1
    

3.2 可视化

for i in kCluster:
    x = np.array(kCluster[i])[:,0]
    y = np.array(kCluster[i])[:,1]
    plt.scatter(x,y)
#  绘制均值向量点的位置
xMean = np.array(self.kVector)[:,0]
yMean = np.array(self.kVector)[:,1]
plt.scatter(xMean, yMean, marker='+')
plt.title("k-means")
plt.show()

这里我们额外作出了均值向量的位置,用+表示。


可以验证,每个簇内样本到均值向量的距离都小于到其他簇均值向量的距离。

本文完整工程代码联系下方博主名片获取


🔥 更多精彩专栏


👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

机器学习强基计划1-3:图文详解logistic回归原理(两种优化)+python实现

...建分类器3.2定义优化过程3.3优化函数3.4可视化0写在前面机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树... 查看详情

机器学习实战--k-均值聚类

1、聚类是一种无监督学习,他讲相似的对象放到同一簇下,有点像自动分类。聚类方法几乎可以用到任何对象上,簇内的对象越相似,聚类结果就越好。2、K均值聚类的优点  算法简单容易实现  缺点:  可能收敛到局部... 查看详情

机器学习k均值算法(ii)

k聚类算法中如何选择初始化聚类中心所在的位置。在选择聚类中心时候,如果选择初始化位置不合适,可能不能得出我们想要的局部最优解。而是会出现一下情况:为了解决这个问题,我们通常的做法是:我们选取K<m个聚类... 查看详情

机器学习实战精读--------k-均值聚类算法

      一个聚类算法只需要知道如何计算相似度就可以了K-均值(k-means)聚类算法:该算法可以发现K个不同的簇,每个簇的中心采用簇中所安置的均值计算而成。分层聚类算法①BIRCH算法:结合了层次聚类算... 查看详情

机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例

  k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k。k均值是基于相似度的聚类,为没有标签的一簇实例分为一类。  一经典的k-均值聚类    思路:    1随机创建k个质心(k必须指定,二维的很容易确... 查看详情

机器学习——利用k-均值聚类算法对未标注数据分组

聚类是一种无监督的学习,它将相似的对象归到同一簇中。它有点像全自动分类。聚类方法几乎可以应用到所有对象,簇内的对象越相似,聚类的效果越好。K-均值(K-means)聚类算法,之所以称之为K-均值是因为它可以发现k个不... 查看详情

[机器学习][k-means]无监督学习之k均值聚类

有监督学习虽然高效、应用范围广,但最大的问题就是需要大量的有标签的数据集,但现实生活中我们遇到的大量数据都是没有明确标签的,而且对于庞大的数据集进行标注工作本身也是一项费时费力的工作模式,所以我们希望... 查看详情

机器学习强基计划7-4:详细推导高斯混合聚类(gmm)原理(附python实现)

...估计4Python实现4.1算法流程4.2E步4.3M步4.4可视化0写在前面机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树、支持向量... 查看详情

吴裕雄python机器学习——k均值聚类kmeans模型(代码片段)

importnumpyasnpimportmatplotlib.pyplotaspltfromsklearnimportclusterfromsklearn.metricsimportadjusted_rand_scorefromsklearn.datasets.samples_generatorimportmake_blobsdefcreate_data(centers,num=100,std= 查看详情

ng机器学习视频笔记——k-均值算法理论

ng机器学习视频笔记(十一)——K-均值算法理论  (转载请附上本文链接——linhxx) 一、概述        K均值(K-Means)算法,是一种无监督学习(Unsupervisedlearning)算法,其核心是聚类(Clus... 查看详情

机器学习实战笔记-利用k均值聚类算法对未标注数据分组

聚类是一种无监督的学习,它将相似的对象归到同一个簇中。它有点像全自动分类。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好簇识别给出聚类结果的含义。假定有一些数据,现在将相似数据归到一... 查看详情

机器学习--k均值聚类算法原理方法及代码实现(代码片段)

一、K-means算法原理  k-means算法是一种简单的迭代型聚类算法,采用距离作为相似性指标,从而发现给定数据集中的K个类,且每个类的中心是根据类中所有值的均值得到,每个类用聚类中心来描述。对于给定的一个包含n个d维... 查看详情

机器学习强基计划4-3:详解朴素贝叶斯分类原理(附例题+python实现)

...现5.1计算类先验概率5.2计算类后验概率5.3预测0写在前面机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树、支持向量... 查看详情

[机器学习]二分k-means算法详解(代码片段)

二分k-means算法  二分k-means算法是分层聚类(Hierarchicalclustering)的一种,分层聚类是聚类分析中常用的方法。分层聚类的策略一般有两种:聚合。这是一种自底向上的方法,每一个观察者初始化本身为一类,然后两两结合分裂... 查看详情

机器学习:聚类算法实现流程

学习目标掌握K-means聚类的实现步骤k-means其实包含两层内容:​K:初始中心点个数(计划聚类数)​means:求中心点到其他数据点距离的平均值1k-means聚类步骤1、随机设置K个特征空间内的点作为初始的聚类中心2、... 查看详情

k-均值聚类

如果一点基础没有最好先拿起一本教材开始学,《机器学习实战》还不错,P93,书上有python源码和练习数据,非常适合新手。k均值聚类簇相似伪代码(随机)创建K个点作为起始质心当任意一个点的簇分配结果发生变化时:对数... 查看详情

机器学习之无监督学习-k均值聚类算法(代码片段)

机器学习之无监督学习-K均值聚类算法对于无监督学习,有两类重要的应用,一个是聚类,一个是降维。我们今天主要学习聚类中的K均值聚类。我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进... 查看详情

机器学习——详解经典聚类算法kmeans

...始发于个人公众号:TechFlow,原创不易,求个关注今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法。在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公式找到最近的K个邻居,通过邻居的结果来... 查看详情