KNN和K-Means傻傻分不清?图解K-Meams算法

点击上方码农的后花园”,选择星标” 公众号

精选文章,第一时间送达

之前讲解了有监督学习分类算法KNN,这期讲解无监督学习聚类算法K-Means(也称K-平均,K-均值),我们知道KNN和K-Means区别主要有两点: KNN是有监督,K-Means无监督,KNN是分类算法,K-Means是聚类算法。

预热

监督学习和无监督学习

对于"监督学习"(supervised learning),其训练样本是带有标记信息,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新的样本进行分类。

“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。对于无监督学习,应用最广的是“聚类”。

分类算法和聚类算法

分类算法:是指对已知类别的数据进行模型训练,获取不同类别的相关特征,然后使用训练好的模型对新的数据进行已有类别的概率预测,选取预测概率最大的类别为该预测样本的类别。

聚类算法:聚类的目的也是把数据分类,但是事先我们是不知道如何去分的(类别未知),完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。在聚类的结论出来之前,我完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。

总结:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。

聚类

‍‍“聚类算法”试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),通过这样的划分,每个簇可能对应于一些潜在的概念或类别。如下图是未做标记的样本集:

通过他们的分布,我们很容易对上图中的样本做出以下几种划分。

当需要将其划分为两个簇时,即 K =2 时:

 

当需要将其划分为四个簇时,即 K =4 时:

那么计算机是如何进行这样的划分的呢?这就需要聚类算法来进行实现了。聚类算法有几十种,本文对聚类算法中最常用的K-Means进行讲解。

‍‍

K-Means算法图解

假设我们有6个点,从图上看应该分成两堆儿,前三个点一堆儿,后三个点是另一堆儿。现在手工执行K-Means,体会一下过程,同时看看结果是不是和预期一致。

1.选择初始大哥: 随机选择,我们就选P1和P2

2.计算小弟和大哥的距离:P3到P1的距离从图上也能看出来(勾股定理),是√10 = 3.16;P3到P2的距离√((3-1)^2+(1-2)^2 = √5 = 2.24,所以P3离P2更近,P3就跟P2混。同理,P4、P5、P6也这么算,如下:

round1

P3到P6都跟P2更近,所以第一次站队的结果是:

  • 组A:P1

  • 组B:P2、P3、P4、P5、P6

3.人民代表大会: 组A没啥可选的,大哥还是P1自己,组B有五个人,需要选新大哥,这里要注意选大哥的方法是每个人X坐标的平均值和Y坐标的平均值组成的新的点,为新大哥,也就是说这个大哥是“虚拟的”。因此,B组选出新大哥的坐标为:P哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。综合两组,新大哥为P1(0,0),P哥(6.2,5.6),而P2-P6重新成为小弟。

4.再次计算小弟到大哥的距离

round2

这时可以看到P2、P3离P1更近,P4、P5、P6离P哥更近,所以第二次站队的结果是:

  • 组A:P1、P2、P3

  • 组B:P4、P5、P6(虚拟大哥这时候消失)

5.第二届人民代表大会: 按照上一届大会的方法选出两个新的虚拟大哥:P哥1(1.33,1) P哥2(9,8.33),P1-P6都成为小弟。

6.第三次计算小弟到大哥的距离

round3

这时可以看到P1、P2、P3离P哥1更近,P4、P5、P6离P哥2更近,所以第二次站队的结果是:

  • 组A:P1、P2、P3

  • 组B:P4、P5、P6

我们发现,这次站队的结果和上次站队结果没有任何变化,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致。

K-Means算法思想

K-Means聚类算法是聚类算法之一,其中K表示类别的数量,即我们想要将数据分成几个类别,Means表示均值。K值决定了初始质心(通常是随机选择的中心)的数量,K值是几,必须有几个质心。简而言之,K-Means聚类算法是一种通过均值聚类数据点的算法。

实现过程

先从数据样本集中随机选取k个样本作为族中心,并计算所有样本与这 k 个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的“簇中心”。

实现kmeans算法的主要三点:

  (1)簇个数 k的选择,k为常数,需要事先设定
  (2)各个样本点到“簇中心”的距离
  (3)根据新划分的簇,更新“簇中心”

K-Means算法是将没有标注的 M 个样本通过迭代的方式聚集成K个簇,在对样本进行聚集过程中往往是以样本之间的距离作为指标划分。

K-Means算法要点是簇个数K的选择和距离度量,最优K值可通过肘部法则决定,距离一般采用欧式距离。

代码实现

如下图,采用聚类算法对该样本点进行5种划分聚类,即K=5个族。

聚类结果如下图所示:

代码:

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs  # 导入产生模拟数据的方法
from sklearn.cluster import KMeans


# 1. 产生模拟数据
k = 5
X, Y = make_blobs(n_samples=1000, n_features=2, centers=k, random_state=1)


# 2. 模型构建
km = KMeans(n_clusters=k, init='k-means++', max_iter=30)
km.fit(X)


# 获取簇心
centroids = km.cluster_centers_
# 获取归集后的样本所属簇对应值
y_kmean = km.predict(X)


# 呈现未归集前的数据
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.yticks(())
plt.show()


#归集后的数据集呈现
plt.scatter(X[:, 0], X[:, 1], c=y_kmean, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='black', s=100, alpha=0.5)
plt.show()

Ending

前面说到过,KNN和K-Means听起来有些像,但本质是有区别的,这里我们就顺便说一下两者的异同吧。

相同:

  1. K值都是重点

  2. 都需要计算平面中点的距离

相异:KNN和K-Means的核心都是通过计算空间中点的距离来实现目的,只是他们的目的是不同的。KNN的最终目的是分类,而Kmeans的目的是给所有距离相近的点分配一个类别,也就是聚类。

简单说,就是画一个圈,KNN是让进来圈子里的人变成自己人,Kmeans是让原本在圈内的人归成一类人。

总结: K-Means是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

参考:

https://www.cnblogs.com/lliuye/p/9144312.html

https://blog.csdn.net/qq_30377909/article/details/94596305

https://blog.csdn.net/sinat_36710456/article/details/88019323

https://blog.csdn.net/u013850277/article/details/88411966

完整代码下载,后台回复关键字项目实战 , 即可获取使用。

                                                     分享给更多朋友,转发,点赞,在看

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
KNN(K-Nearest Neighbor)和K-Means是两种不同的机器学习算法,它们在问题类型、应用场景和算法过程上有所区别。 首先,KNN是一种监督学习算法,用于解决分类问题。它通过计算未知样本与最近的K个已知样本之间的距离,来确定未知样本所属的类别。KNN需要有标签的训练数据来进行分类。 而K-Means是一种非监督学习算法,用于解决聚类问题。它通过人为选定的K个聚类中心,计算样本与聚类中心之间的距离,将样本分配到离其最近的聚类中心所代表的类簇中。然后根据类簇内的所有点重新计算类簇的中心点,迭代进行分配和更新,直至类簇中心点不再变化或达到指定的迭代次数。 此外,KNN没有明显的训练过程,而K-Means需要迭代计算类簇中心点。KNN是根据最近的K个样本来判断未知样本的类别,而K-Means是根据样本与聚类中心的距离来进行聚类。 总结来说,KNN是一种用于分类问题的监督学习算法,而K-Means是一种用于聚类问题的非监督学习算法。它们在问题类型、应用场景和算法过程上有所区别。 #### 引用[.reference_title] - *1* [KNN(K近邻)和K-means聚类)的区别](https://blog.csdn.net/weixin_43804047/article/details/128424463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [面试回答:KNNK-Means区别?](https://blog.csdn.net/qq_29168809/article/details/104221199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [KNNkmeans算法区别](https://blog.csdn.net/skyllerone/article/details/126954351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值