聚類分析是一種靜態(tài)數(shù)據(jù)分析方法,常被用于數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、模式識(shí)別等領(lǐng)域,聚類是一種無監(jiān)督式的學(xué)習(xí)方法。它是在未知樣本類別的情況下,通過計(jì)算樣本彼此間的距離(歐式距離,馬式距離,漢明距離,余弦距離等)來估計(jì)樣本所屬類別。從結(jié)構(gòu)性來劃分,聚類方法分為自上而下和自下而上兩種方法。聚類的算法有很多種,大約幾十種,K-means算法是十大經(jīng)典數(shù)據(jù)挖掘算法之一。
K-means算法是最為經(jīng)典的基于劃分的聚類方法,是十大經(jīng)典數(shù)據(jù)挖掘算法之一。它是一種自下而上的聚類方法。K-means算法最大的優(yōu)點(diǎn)是好理解、簡單、運(yùn)行速度快,但只能應(yīng)用于連續(xù)性的數(shù)據(jù);缺點(diǎn)是聚類的結(jié)果與我們初始設(shè)置的中心點(diǎn)的選擇有直接關(guān)系,并且需要我們自己提供聚類的數(shù)目,但是可以通過多次聚類取最佳的結(jié)果來設(shè)定初始的聚類數(shù)目,如果當(dāng)我們不知道樣本集將要聚成多少個(gè)類別的時(shí)候,那么這時(shí)候不適合用kmeans算法,推薦使用其他方法來聚類,如(hierarchical 或meanshift)。
K-means算法的基本思想是:以空間中k個(gè)點(diǎn)為中心進(jìn)行聚類,對(duì)最靠近他們的對(duì)象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結(jié)果,大概就是這個(gè)意思,“物以類聚、人以群分”。具體流程如下:
首先輸入一個(gè)k的值,此值是我們自己設(shè)定的,k表示將數(shù)據(jù)集經(jīng)過聚類得到的分組個(gè)數(shù)。
從數(shù)據(jù)集中隨機(jī)選擇k個(gè)數(shù)據(jù)點(diǎn)作為初始中心點(diǎn)。
對(duì)集合中每一個(gè)數(shù)據(jù)點(diǎn),分別計(jì)算與每一個(gè)初始中心點(diǎn)的距離,數(shù)據(jù)點(diǎn)離哪一個(gè)中心的越近,就歸類此類。
通過均值等方法對(duì)聚成的類再進(jìn)行新的中心點(diǎn)確定。
若新的中心點(diǎn)與原來的中心點(diǎn)之間的距離小于一個(gè)閾值(設(shè)置好的一個(gè)閾值),說明比較穩(wěn)定,那么此聚類達(dá)到了我們的期望,算法結(jié)束。
如果新的中心點(diǎn)與原來的中心點(diǎn)之間的距離很大,那么需要迭代以上的3-5步驟。

K-means算法的關(guān)鍵點(diǎn)在于初始中心的選擇和距離公式。
KMeans的應(yīng)用場景非常多,除了一般的聚類場景(例如對(duì)用戶進(jìn)行分群組等)外,我們還可以用KMeans實(shí)現(xiàn)單變量的離散化,因?yàn)橐话愕牡阮l和等距的離散化方法往往會(huì)忽略變量中潛在的分布特征,而基于聚類的離散化可以一定程度地保留變量的分布特征。