初探K-means聚类算法(附与KNN算法的比较))

Hello! 七月的小李又上线啦~
今天看视频的时候看到K-means算法 想到之前写过的K-近邻算法的学习(附Python和Matlab实现)就打算把这个算法也整理一下并和之前的KNN对比一下。
——————
在正式写K-means之前需要先了解一个名词:聚类

聚类

聚类,顾名思义,从字面上可以简单的理解为相似元素的一个集合。那么实际上,聚类是属于无监督学习的算法。对于聚类来说,我们不需要有label即标签,只需要有数据(事先不存在类别之分),这些数据通过一定的学习和训练,完成共同的群体聚类。K-means算法是聚类中常用的算法之一。

K-means算法

定义

K-means算法从实现的原理上可以说是基于距离的聚类算法。此算法选取距离作为判断相似性的评价指标,即如果两个元素的距离越近,那么在一定程度上它们的相似度就越大。除此,该算法认为类簇是由距离靠近的元素组成的,因此把得到紧凑且独立的簇作为最终目标,即完成聚类。其主要特点为:各个聚类本身紧凑,且聚类之间要尽可能的分开,有一定的距离。

原理

K-means算法的原理就是通过迭代寻找k个类簇的一种划分方案,使得用这k个类簇的均值来代表相应各类样本时所得的总体误差最小
k-means算法的基础是最小误差平方和准则。
具体的式子如下,其中μc(i)表示第i个聚类的均值。

各类簇内的样本越相似,其与该类均值间的误差平方越小,对所有类所得到的误差平方求和,即可验证分为k类时,各聚类是否是最优的。
(更为详细的解释参见:https://blog.csdn.net/qq_32892383/article/details/80107795

算法步骤

以下图为例说明:初始下为(a)即没有任何labels的数据集,需要达到(f)即分成两个分开的类簇。

1.先随机挑选两个点作为聚类中心(cluster centroids)即(b),K-均值算法是一个迭代过程,分为两部分,第一为簇分类,第二为移动聚类中心。​ 簇分类是将(b)所有的绿色样本点根据其距离蓝色、红色中心点距离,分配到簇中,染成相应的红色或者蓝色(c)。
2.之后计算染色的点的平均值(平均下来的位置)此时将相应的聚类中心移动到这个均值处(d)。而后再反复进行迭代最终得到(f)。
迭代详细:

因而我们可以概括一下, 也就是主要是计算质心与数据点的距离 ,将数据点分配到距离最近的簇。对每一个簇,计算簇中所有点的均值,并将均值作为质心。这样一个反复迭代的过程。
代码
这边可以利用利用scikit-learn里面的KMeans函数来简单实现

from sklean.cluster import KMeans
kmeans = KMeans(n_clusters=5) # 获取模型
kmeans.fit(X_train)  #这里不需要给他答案 只把要分类的数据给他 即可

更为详细的代码可参考机器学习算法-K-means聚类

K-means算法 VS KNN算法

画个重点!从本质上来说 KNN算法是属于监督学习算法,即有存在Labels,而K-means算法是无监督学习算法,不存在labels.
KNN用于分类,K-means用于聚类。图解对比如下

K-means算法的步骤上面已经写过,下面补充KNN步骤进行对比:
通过对比可以简单概括:这两个算法都是基于距离去计算的、都是需要进行迭代的。但K-means需要选取质心并且改变质心,KNN不存在质心选取,它的训练数据集需要有label或者类别,它额是把没有标签的数据点(样本)自动打上标签或者预测所属类别。

几个问题

1..K-Means算法K值如何选择?
首先,k的取值是没有固定的,不同的k得到的结果会有挺大的不同。如下图所示,左边是k=3的结果,这个就太稀疏了,蓝色的那个簇其实是可以再划分成两个簇的。而右图是k=5的结果,可以看到红色菱形和蓝色菱形这两个簇应该是可以合并成一个簇的。

那么我们可以怎么去选取这个 k更合适?对k的选择可以先用一些算法分析数据的分布,如重心和密度等,然后选择合适的k。
2.如何确定K个簇的初始质心?
选择批次距离尽可能远的K个点。首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
参考(http://www.csuldw.com/2015/06/03/2015-06-03-ml-algorithm-K-means/

其余参考K-means聚类算法及python代码实现

————————————
合格搬运的一天 七月也要努力鸭!顺心yeah!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,302评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,563评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,433评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,628评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,467评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,354评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,777评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,419评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,725评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,768评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,543评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,387评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,794评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,032评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,305评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,741评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,946评论 2 336