K 均值聚類

K 均值聚類

算法交替執(zhí)行以下兩個(gè)步驟:

  • 將每個(gè)數(shù)據(jù)點(diǎn)分配給最近的簇中心
  • 將每個(gè)簇中心設(shè)置為所分配的所有數(shù)據(jù)點(diǎn)的平均值,如果簇的分配不再發(fā)生改變错览,那么算法結(jié)束。

優(yōu)點(diǎn)

  • K 均值不僅相對(duì)容易理解和實(shí)現(xiàn)纲辽,而且運(yùn)行速度也相對(duì)較快啦吧。
  • K 均值可以輕松擴(kuò)展到大型數(shù)據(jù)集
  • scikit-learn 甚至在 MiniBatchKMeans 類中包含了一種更具可擴(kuò)展性的變體您觉,可以處理非常大的數(shù)據(jù)集。

缺點(diǎn)

  • 需要人工預(yù)先確定初始 K 值授滓,且該值和真實(shí)的數(shù)據(jù)未必吻合顾犹。
  • 分類結(jié)果嚴(yán)重依賴于分類中心的初始化。通常進(jìn)行多次k-means褒墨,然后選擇最優(yōu)的那次作為最終聚類結(jié)果。
  • 結(jié)果不一定是全局最優(yōu)的擎宝,只能保證局部最優(yōu)郁妈。
  • 對(duì)噪聲敏感。因?yàn)榇氐闹行氖侨∑骄苌辏虼司垲惔睾苓h(yuǎn)地方的噪音會(huì)導(dǎo)致簇的中心點(diǎn)偏移噩咪。
  • 無法解決不規(guī)則形狀的聚類。
  • 無法處理離散特征极阅,如:國籍胃碾、性別 等。

k-means 性質(zhì):

  • k-means 實(shí)際上假設(shè)數(shù)據(jù)是呈現(xiàn)球形分布筋搏,實(shí)際任務(wù)中很少有這種情況仆百。與之相比,GMM 使用更加一般的數(shù)據(jù)表示奔脐,即高斯分布俄周。
  • k-means 假設(shè)各個(gè)簇的先驗(yàn)概率相同吁讨,但是各個(gè)簇的數(shù)據(jù)量可能不均勻。
  • k-means 使用歐式距離來衡量樣本與各個(gè)簇的相似度峦朗。這種距離實(shí)際上假設(shè)數(shù)據(jù)的各個(gè)維度對(duì)于相似度的作用是相同的建丧。
  • k-means 中,各個(gè)樣本點(diǎn)只屬于與其相似度最高的那個(gè)簇波势,這實(shí)際上是硬 分簇翎朱。
  • k-means 算法的迭代過程實(shí)際上等價(jià)于EM 算法。具體參考EM 算法章節(jié)尺铣。

3拴曲、算法調(diào)優(yōu)

  • 數(shù)據(jù)歸一化和離群點(diǎn)處理
  • 合理選擇 K 值

K 值選擇方法:

  • 手肘法:是一個(gè)經(jīng)驗(yàn)方法,缺點(diǎn)就是不能夠自動(dòng)化迄埃。
  • Gap Statistic 方法:只需要找到最大的 Gap Statistic 所對(duì)應(yīng)的 K 即可疗韵。Gap(K)可以視為隨機(jī)樣本的損失和實(shí)際樣本的損失之差。
  • 采用核函數(shù):通過一個(gè)非線性映射侄非,將輸入空間中的數(shù)據(jù)點(diǎn)映射到高位的特征空間中蕉汪,并在新的特征空間進(jìn)行聚類。非線性映射增加了數(shù)據(jù)點(diǎn)線性可分的概率逞怨,從而在經(jīng)典聚類算法失效的情況下者疤,通過引入核函數(shù)可以達(dá)到更為準(zhǔn)確的聚類結(jié)果。

4叠赦、算法改進(jìn)

  • K-means++:解決 k-means 嚴(yán)重依賴于分類中心初始化的問題
  • k-modes:解決 k-means 無法處理離散特征的問題
  • k-medoids:解決k-means 對(duì)噪聲敏感的問題驹马。
  • mini-batch k-means:主要用于減少 k-means 的計(jì)算時(shí)間
  • ISODATA:K值不確定可以使用
  • 二分均值聚類:層次聚類

K-means++

它主要解決 k-means 嚴(yán)重依賴于分類中心初始化的問題。 已經(jīng)選取了 n(0<n<k) 個(gè)初始聚類中心除秀,距離當(dāng)前 n 個(gè)聚類中心越遠(yuǎn)的點(diǎn)會(huì)有更高的概率被選為第 n+1 個(gè)聚類中心糯累。在選取第一個(gè)聚類中心(n=1)時(shí)同樣通過隨機(jī)的方法。

image.png

k-modes

主要解決 k-means 無法處理離散特征的問題

image.png

k-medoids
主要解決k-means 對(duì)噪聲敏感的問題册踩。

image.png

mini-batch k-means
主要用于減少 k-means 的計(jì)算時(shí)間泳姐。mini-batch k-means 算法每次訓(xùn)練時(shí)隨機(jī)抽取小批量的數(shù)據(jù),然后用這個(gè)小批量數(shù)據(jù)訓(xùn)練暂吉。這種做法減少了 k-means 的收斂時(shí)間胖秒,其效果略差于標(biāo)準(zhǔn)算法。

image.png

二分均值聚類

  • 一種用于度量聚類效果的指標(biāo)是 SSE慕的,SSE 值越小表示數(shù)據(jù)點(diǎn)越接近于它們的質(zhì)心阎肝,聚類效果也越好。因?yàn)閷?duì)誤差取了平方肮街,因此更加重視那些遠(yuǎn)離中心的點(diǎn)风题。
  • 一種肯定可以降低 SSE值的方式是增加簇的個(gè)數(shù),但違背了聚類的目標(biāo),聚類的目標(biāo)是在保持簇?cái)?shù)目不變的情況下提高簇的質(zhì)量俯邓。
  • 一種方法是將具有最大 SSE 值的簇分為兩個(gè)簇骡楼。具體實(shí)現(xiàn)時(shí)可以將最大簇包含的點(diǎn)過濾出來并在這些點(diǎn)上運(yùn)行 K-均值算法,其中 k 設(shè)為 2.
def biKmeans(dataSet,k,distMeas=distEclud):
    m=np.shape(dataSet)[0]
    clusterAssment=np.mat(np.zeros((m,2)))
    centroid0=np.mean(dataSet,axis=0).tolist()[0]
    centList=[centroid0]
    for j in range(m):
        clusterAssment[j,1]=distMeas(np.mat(centroid0),dataSet[j,:])**2
    while(len(centList)<k):
        lowestSSE=np.inf
        for i in range(len(centList)):
            ptsInCurrCluster=dataSet[np.nonzero(clusterAssment[:,0].A==i)[0],:]
            centroidMat,splistClusterAss=kMeans(ptsInCurrCluster,2,distMeas)
            sseSplist=np.sum(splistClusterAss[:,1])
            sseNotSplit=np.sum(clusterAssment[np.nonzero(clusterAssment[:,0].A!=i)[0],1])
            print('sseSplit, and notSplit:',sseSplist,sseNotSplit)
            if(sseSplist+sseNotSplit<lowestSSE):
                bestCentToSplit=i
                bestNewCents=centroidMat
                bestClustAss=splistClusterAss.copy()
                lowestSSE=sseSplist+sseNotSplit
        bestClustAss[np.nonzero(bestClustAss[:,0].A==1)[0],0]=len(centList)
        bestClustAss[np.nonzero(bestClustAss[:,0].A==0)[0],0]=bestCentToSplit
        print('the bestCentToSplit is: ',bestCentToSplit)
        print('the len of bestClustAss is:',len(bestClustAss))
        centList[bestCentToSplit]=bestNewCents[0,:]
        centList.append(bestNewCents[1,:])
        clusterAssment[np.nonzero(clusterAssment[:,0].A==bestCentToSplit)[0],:]=bestClustAss
    return centList , clusterAssment

通過迭代方式尋找 K 個(gè)簇的一種劃分方案稽鞭,使得聚類結(jié)果對(duì)應(yīng)的代價(jià)函數(shù)最小鸟整。

ISODATA

當(dāng) K 值的大小不確定時(shí),可以使用 ISODATA 算法朦蕴。
ISODATA 的全稱是迭代自組織數(shù)據(jù)分析法篮条。當(dāng)屬于某個(gè)類別的樣本數(shù)過少,把該類別去除吩抓;當(dāng)屬于某個(gè)類別的樣本數(shù)過多涉茧、分散度較大時(shí),把該類分為兩個(gè)子類別疹娶。在 K-means 基礎(chǔ)上增加兩個(gè)操作伴栓,一是分裂操作,對(duì)應(yīng)著增加聚類中心數(shù)雨饺;二是合并操作钳垮,對(duì)應(yīng)著減少聚類中心數(shù)。

超參數(shù)設(shè)定:

  • 預(yù)期的聚類中心數(shù)目 K 额港。具體地饺窿,最終輸出的聚類中心數(shù)目常見范圍是 K 的一半或兩倍 K。
  • 每個(gè)類別要求的最少樣本數(shù)目 N移斩。如果分裂后會(huì)導(dǎo)致某個(gè)子類別所包含樣本數(shù)目小于該閾值肚医,就不會(huì)對(duì)該類別進(jìn)行分裂操作
  • 最大方差 Sigma。用于控制某個(gè)類別中樣本的分散程度向瓷。當(dāng)樣本分散程度超過這個(gè)閾值肠套,且分裂后滿足上條規(guī)則,進(jìn)行分裂操作猖任。
  • 兩個(gè)聚類中心之間所允許最小距離 D糠排。如果兩個(gè)類靠的非常近,小于該閾值時(shí)超升,則對(duì)這兩個(gè)類進(jìn)行合并操作。

算法實(shí)現(xiàn)

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

X,y=make_blobs(random_state=1)

kmeans=KMeans(n_clusters=3)
kmeans.fit(X)
print('Cluster memberships:\n{}'.format(kmeans.labels_))
# 預(yù)測
print(kmeans.predict(X))
# 質(zhì)心
print(kmeans.cluster_centers_)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哺徊,一起剝皮案震驚了整個(gè)濱河市室琢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌落追,老刑警劉巖盈滴,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡巢钓,警方通過查閱死者的電腦和手機(jī)病苗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來症汹,“玉大人硫朦,你說我怎么就攤上這事”痴颍” “怎么了咬展?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞒斩。 經(jīng)常有香客問我破婆,道長,這世上最難降的妖魔是什么胸囱? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任祷舀,我火速辦了婚禮,結(jié)果婚禮上烹笔,老公的妹妹穿的比我還像新娘。我一直安慰自己箕宙,他們只是感情好嚎朽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柬帕,像睡著了一般哟忍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陷寝,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天锅很,我揣著相機(jī)與錄音,去河邊找鬼凤跑。 笑死爆安,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仔引。 我是一名探鬼主播扔仓,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咖耘!你這毒婦竟也來了翘簇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤儿倒,失蹤者是張志新(化名)和其女友劉穎版保,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彻犁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年叫胁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汞幢。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驼鹅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出急鳄,到底是詐尸還是另有隱情谤民,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布疾宏,位于F島的核電站张足,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坎藐。R本人自食惡果不足惜为牍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岩馍。 院中可真熱鬧碉咆,春花似錦、人聲如沸蛀恩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双谆。三九已至壳咕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顽馋,已是汗流浹背谓厘。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寸谜,地道東北人竟稳。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像熊痴,于是被迫代替她去往敵國和親他爸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一.SVM 什么是SVM? SVM主要針對(duì)小樣本數(shù)據(jù)進(jìn)行學(xué)習(xí)果善、分類和預(yù)測(有時(shí)也叫回歸)的一種方法讲逛,能解決神經(jīng)網(wǎng)絡(luò)...
    鄭元吉閱讀 5,877評(píng)論 0 1
  • 在數(shù)據(jù)挖掘中,聚類是一個(gè)很重要的概念岭埠。傳統(tǒng)的聚類分析計(jì)算方法主要有如下幾種:劃分方法、層次方法、基于密度的方法惜论、基...
    周二鴨閱讀 38,628評(píng)論 1 10
  • 聚類是一種無監(jiān)督的學(xué)習(xí)许赃,它將相似的對(duì)象歸為同一個(gè)簇中。之所以成為k均值是因?yàn)樗梢园l(fā)現(xiàn)k個(gè)不同的簇馆类,且每個(gè)簇的中心...
    1597830b3381閱讀 1,273評(píng)論 1 2
  • 2018年1月31日的夜晚混聊,天空出現(xiàn)了所有人抬頭可見的奇觀——藍(lán)血月亮。還是這一天乾巧,在我的書房發(fā)生了一件事兒句喜,我發(fā)...
    安蘇雅閱讀 291評(píng)論 0 1
  • 越長大越發(fā)現(xiàn),最不怕得罪的沟于,是自己咳胃。 小時(shí)候期盼著長大,長大后懷念小時(shí)候旷太,人真是一種奇怪的生物展懈。從不能體會(huì)當(dāng)前的幸...
    繆繆J森閱讀 449評(píng)論 0 2