
聚類(lèi)算法之K均值
有時(shí)候,我們只有訓(xùn)練樣本的特征,而對(duì)其類(lèi)型一無(wú)所知。這種情況,我們只能讓算法嘗試在訓(xùn)練數(shù)據(jù)中尋找其內(nèi)部的結(jié)構(gòu),試圖將其類(lèi)別挖掘出來(lái)。這種方式叫做無(wú)監(jiān)督學(xué)習(xí)。由于這種方式通常是將樣本中相似的樣本聚集在一起,所以又叫聚類(lèi)算法。本文,中顥潤(rùn)將介紹一種最常用的聚類(lèi)算法:K均值聚類(lèi)算法(K-Means)。
1、K均值聚類(lèi)
K-Means算法思想簡(jiǎn)單,效果卻很好,是最有名的聚類(lèi)算法。聚類(lèi)算法的步驟如下:
a:初始化K個(gè)樣本作為初始聚類(lèi)中心;
b:計(jì)算每個(gè)樣本點(diǎn)到K個(gè)中心的距離,選擇最近的中心作為其分類(lèi),直到所有樣本點(diǎn)分類(lèi)完畢;
c:分別計(jì)算K個(gè)類(lèi)中所有樣本的質(zhì)心,作為新的中心點(diǎn),完成一輪迭代。
通常的迭代結(jié)束條件為新的質(zhì)心與之前的質(zhì)心偏移值小于一個(gè)給定閾值。
下面給一個(gè)簡(jiǎn)單的例子來(lái)加深理解。如下圖有4個(gè)樣本點(diǎn),坐標(biāo)分別為A(-1,-1),B(1,-1),C(-1,1),D(1,1)?,F(xiàn)在要將他們聚成2類(lèi),指定A、B作為初始聚類(lèi)中心(聚類(lèi)中心A0,B0),指定閾值0.1。K-Means迭代過(guò)程如下:
step 1.1:計(jì)算各樣本距離聚類(lèi)中心的距離:
樣本A:d(A,A0) = 0;d(A,B0) = 2;因此樣本A屬于A0所在類(lèi);
樣本B:d(B,A0) = 2;d(B,B0) = 0;因此樣本B屬于B0所在類(lèi);
樣本C:d(C,A0) = 2;d(C,B0) = 2.8;;因此樣本C屬于A0所在類(lèi);
樣本C:d(D,A0) =2.8; d(D,B0) = 2;;因此樣本C屬于B0所在類(lèi);
step 1.2:全部樣本分類(lèi)完畢,現(xiàn)在計(jì)算A0類(lèi)(包含樣本AC)和B0類(lèi)(包含樣本BD)的新的聚類(lèi)中心:
A1 =(-1, 0); B1 = (1,0);
step 1.3:計(jì)算聚類(lèi)中心的偏移值是否滿足終止條件:
|A1-A0|= |(-1,0)-(-1,-1) | = |(0,1)| = 1 >0.1,因此繼續(xù)迭代。
step 2.1:計(jì)算各樣本距離聚類(lèi)中心的距離:
樣本A:d(A,A1) = 1;d(A,B1) = 2.2;因此樣本A屬于A1所在類(lèi);
樣本B:d(B,A1) =2.2; d(B,B1) = 1;因此樣本B屬于B1所在類(lèi);
樣本C:d(C,A1) = 1;d(C,B1) = 2.2;;因此樣本C屬于A1所在類(lèi);
樣本D:d(D,A1) =2.2; d(D,B1) = 1;;因此樣本C屬于B1所在類(lèi);
step 2.2:全部樣本分類(lèi)完畢,現(xiàn)在計(jì)算A1類(lèi)(包含樣本AC)和B1類(lèi)(包含樣本BD)的新的聚類(lèi)中心:
A2 =(-1, 0); B2 = (1,0);
step 2.3:計(jì)算聚類(lèi)中心的偏移值是否滿足終止條件:
|A2-A1|= |B2-B1| = 0 <0.1,因此迭代終止。
2、測(cè)試數(shù)據(jù)
下面這個(gè)測(cè)試數(shù)據(jù)有點(diǎn)類(lèi)似SNS中的好友關(guān)系,假設(shè)是10個(gè)來(lái)自2個(gè)不同的圈子的同學(xué)的SNS聊天記錄。顯然,同一個(gè)圈子內(nèi)的同學(xué)會(huì)有更密切的關(guān)系和互動(dòng)。
數(shù)據(jù)如下所示,每一行代表一個(gè)好友關(guān)系。如第一行表示同學(xué)0與同學(xué)1的親密程度為9(越高表示聯(lián)系越密切)。
顯然,這個(gè)數(shù)據(jù)中并沒(méi)有告知我們這10個(gè)同學(xué)分別屬于哪個(gè)圈子。因此我們的目標(biāo)是使用K-Means聚類(lèi)算法,將他們聚成2類(lèi)。
[plain]view plaincopy
0 1 9
0 2 5
0 3 6
0 4 3
1 2 8
......
這個(gè)例子設(shè)計(jì)的很簡(jiǎn)單。我們使用上一篇文章中提到的關(guān)系矩陣,將其可視化出來(lái),會(huì)看到如下結(jié)果:
這是個(gè)上三角矩陣,因?yàn)檫@個(gè)數(shù)據(jù)中認(rèn)為好友關(guān)系是對(duì)稱(chēng)的。上圖其實(shí)很快能發(fā)現(xiàn),0,1,2,3,4用戶緊密聯(lián)系在一起,而5,6,7,8,9組成了另外一個(gè)圈子。
下面我們看看K-Means算法能否找出這個(gè)答案。
3、代碼與分析
K-Means算法的Python代碼如下:
[python]view plaincopy
# -*-coding: utf-8 -*-
frommatplotlib import pyplot
importscipy as sp
importnumpy as np
fromsklearn import svm
importmatplotlib.pyplot as plt
fromsklearn.cluster import KMeans
fromscipy import sparse
#數(shù)據(jù)讀入
data =np.loadtxt('2.txt')
x_p =data[:, :2] # 取前2列
y_p =data[:, 2] # 取前2列
x =(sparse.csc_matrix((data[:,2], x_p.T)).astype(float))[:, :].todense()
nUser =x.shape[0]
#可視化矩陣
pyplot.imshow(x,interpolation='nearest')
pyplot.xlabel('用戶')
pyplot.ylabel('用戶')
pyplot.xticks(range(nUser))
pyplot.yticks(range(nUser))
pyplot.show()
#使用默認(rèn)的K-Means算法
num_clusters= 2
clf =KMeans(n_clusters=num_clusters, n_init=1, verbose=1)
clf.fit(x)
print(clf.labels_)
#指定用戶0與用戶5作為初始化聚類(lèi)中心
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱(chēng) BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03