99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線(xiàn)電話(huà):13121318867

登錄
2018-10-18 閱讀量: 1824
聚類(lèi)最優(yōu)K值怎么選?

一、問(wèn)題描述

在做項(xiàng)目是需要用到K-means聚類(lèi)時(shí),有一個(gè)選取最優(yōu)K值的步驟需要我們?nèi)プ?,有兩個(gè)方法時(shí)我們經(jīng)常會(huì)用到的:手肘法和輪廓系數(shù)法。

1、手肘法描述及應(yīng)用

1.1 理論

手肘法的核心指標(biāo)是SSE(sum of the squared errors,誤差平方和),

其中,Ci是第i個(gè)簇,p是Ci中的樣本點(diǎn),mi是Ci的質(zhì)心(Ci中所有樣本的均值),SSE是所有樣本的聚類(lèi)誤差,代表了聚類(lèi)效果的好壞。

?????? 手肘法的核心思想是:隨著聚類(lèi)數(shù)k的增大,樣本劃分會(huì)更加精細(xì),每個(gè)簇的聚合程度會(huì)逐漸提高,那么誤差平方和SSE自然會(huì)逐漸變小。并且,當(dāng)k小于真實(shí)聚類(lèi)數(shù)時(shí),由于k的增大會(huì)大幅增加每個(gè)簇的聚合程度,故SSE的下降幅度會(huì)很大,而當(dāng)k到達(dá)真實(shí)聚類(lèi)數(shù)時(shí),再增加k所得到的聚合程度回報(bào)會(huì)迅速變小,所以SSE的下降幅度會(huì)驟減,然后隨著k值的繼續(xù)增大而趨于平緩,也就是說(shuō)SSE和k的關(guān)系圖是一個(gè)手肘的形狀,而這個(gè)肘部對(duì)應(yīng)的k值就是數(shù)據(jù)的真實(shí)聚類(lèi)數(shù)。當(dāng)然,這也是該方法被稱(chēng)為手肘法的原因。

1.2 實(shí)踐

我們對(duì)預(yù)處理后數(shù)據(jù).csv 中的數(shù)據(jù)利用手肘法選取最佳聚類(lèi)數(shù)k。具體做法是讓k從1開(kāi)始取值直到取到你認(rèn)為合適的上限(一般來(lái)說(shuō)這個(gè)上限不會(huì)太大,這里我們選取上限為8),對(duì)每一個(gè)k值進(jìn)行聚類(lèi)并且記下對(duì)于的SSE,然后畫(huà)出k和SSE的關(guān)系圖(毫無(wú)疑問(wèn)是手肘形),最后選取肘部對(duì)應(yīng)的k作為我們的最佳聚類(lèi)數(shù)。python實(shí)現(xiàn)如下:

顯然,肘部對(duì)于的k值為4,故對(duì)于這個(gè)數(shù)據(jù)集的聚類(lèi)而言,最佳聚類(lèi)數(shù)應(yīng)該選4。

2. 輪廓系數(shù)法

2.1 理論

該方法的核心指標(biāo)是輪廓系數(shù)(Silhouette Coefficient),某個(gè)樣本點(diǎn)Xi的輪廓系數(shù)定義如下:

??????????????????????

其中,a是Xi與同簇的其他樣本的平均距離,稱(chēng)為凝聚度,b是Xi與最近簇中所有樣本的平均距離,稱(chēng)為分離度。而最近簇的定義是:

???????????????????????????????????????? ? ? ?

其中p是某個(gè)簇Ck中的樣本。事實(shí)上,簡(jiǎn)單點(diǎn)講,就是用Xi到某個(gè)簇所有樣本平均距離作為衡量該點(diǎn)到該簇的距離后,選擇離Xi最近的一個(gè)簇作為最近簇。

?????? 求出所有樣本的輪廓系數(shù)后再求平均值就得到了平均輪廓系數(shù)。平均輪廓系數(shù)的取值范圍為[-1,1],且簇內(nèi)樣本的距離越近,簇間樣本距離越遠(yuǎn),平均輪廓系數(shù)越大,聚類(lèi)效果越好。那么,很自然地,平均輪廓系數(shù)最大的k便是最佳聚類(lèi)數(shù)。

2.2 實(shí)踐

我們同樣使用2.1中的數(shù)據(jù)集,同樣考慮k等于1到8的情況,對(duì)于每個(gè)k值進(jìn)行聚類(lèi)并且求出相應(yīng)的輪廓系數(shù),然后做出k和輪廓系數(shù)的關(guān)系圖,選取輪廓系數(shù)取值最大的k作為我們最佳聚類(lèi)系數(shù),python實(shí)現(xiàn)如下:

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt

df_features = pd.read_csv(r'C:\Users\61087\Desktop\項(xiàng)目\爬蟲(chóng)數(shù)據(jù)\預(yù)處理后數(shù)據(jù).csv',encoding='gbk')
Scores = [] # 存放輪廓系數(shù)
for k in range(2,9):
estimator = KMeans(n_clusters=k) # 構(gòu)造聚類(lèi)器
estimator.fit(df_features[['R','F','M']])
Scores.append(silhouette_score(df_features[['R','F','M']],estimator.labels_,metric='euclidean'))
X = range(2,9)
plt.xlabel('k')
plt.ylabel('輪廓系數(shù)')
plt.plot(X,Scores,'o-')
plt.show()

得到聚類(lèi)數(shù)k與輪廓系數(shù)的關(guān)系圖:

可以看到,輪廓系數(shù)最大的k值是2,這表示我們的最佳聚類(lèi)數(shù)為2。但是,值得注意的是,從k和SSE的手肘圖可以看出,當(dāng)k取2時(shí),SSE還非常大,所以這是一個(gè)不太合理的聚類(lèi)數(shù),我們退而求其次,考慮輪廓系數(shù)第二大的k值4,這時(shí)候SSE已經(jīng)處于一個(gè)較低的水平,因此最佳聚類(lèi)系數(shù)應(yīng)該取4而不是2。

?????? 但是,講道理,k=2時(shí)輪廓系數(shù)最大,聚類(lèi)效果應(yīng)該非常好,那為什么SSE會(huì)這么大呢?在我看來(lái),原因在于輪廓系數(shù)考慮了分離度b,也就是樣本與最近簇中所有樣本的平均距離。為什么這么說(shuō),因?yàn)閺亩x上看,輪廓系數(shù)大,不一定是凝聚度a(樣本與同簇的其他樣本的平均距離)小,而可能是b和a都很大的情況下b相對(duì)a大得多,這么一來(lái),a是有可能取得比較大的。a一大,樣本與同簇的其他樣本的平均距離就大,簇的緊湊程度就弱,那么簇內(nèi)樣本離質(zhì)心的距離也大,從而導(dǎo)致SSE較大。所以,雖然輪廓系數(shù)引入了分離度b而限制了聚類(lèi)劃分的程度,但是同樣會(huì)引來(lái)最優(yōu)結(jié)果的SSE比較大的問(wèn)題,這一點(diǎn)也是值得注意的。

總結(jié)

從以上兩個(gè)例子可以看出,輪廓系數(shù)法確定出的最優(yōu)k值不一定是最優(yōu)的,有時(shí)候還需要根據(jù)SSE去輔助選取,這樣一來(lái)相對(duì)手肘法就顯得有點(diǎn)累贅。因此,如果沒(méi)有特殊情況的話(huà),我還是建議首先考慮用手肘法。

7.0693
2
關(guān)注作者
收藏
評(píng)論(0)

發(fā)表評(píng)論

暫無(wú)數(shù)據(jù)
推薦帖子