《機(jī)器學(xué)習(xí)》第9章 聚類

關(guān)鍵字

Q1:分類和聚類有什么不同瞻离?

第一秉溉,它們面對(duì)的根本問題不同。分類的根本問題是判斷給定的某一個(gè)樣本屬于那一個(gè)類別跑筝;聚類的根本問題是探索給定的數(shù)據(jù)集可以分成哪幾種類別燃异。

第二,兩者使用的訓(xùn)練數(shù)據(jù)集有差異继蜡。分類任務(wù)使用的訓(xùn)練數(shù)據(jù)集中每個(gè)樣本除了有屬性數(shù)據(jù)外回俐,還必須有一個(gè)標(biāo)記值,用以表示該樣本屬于哪一類稀并;聚類任務(wù)的數(shù)據(jù)集中每個(gè)樣本可以只有屬性值仅颇,沒有標(biāo)記值(當(dāng)然也可以有)。這也可以認(rèn)為是我們常說(shuō)的碘举,監(jiān)督學(xué)習(xí)與無(wú)監(jiān)督學(xué)習(xí)忘瓦。

Q2:聚類的一般方法有哪些?

有三類:基于原型的聚類引颈、基于密度的聚類耕皮、和基于層次的聚類。

補(bǔ)充:算法多種多樣蝙场,但是萬(wàn)變不離其宗凌停,最基本的思想還是先提出一中衡量樣本之間相似程度的的手段,如距離售滤、相關(guān)系數(shù)等罚拟,然后逐一計(jì)算數(shù)據(jù)集中各樣本之間的相似度,盡量把相似度高的樣本放到同一類完箩。


1赐俗、聚類

聚類試圖將數(shù)據(jù)集中的樣本劃分為若干個(gè)通常是不相交的子集,每個(gè)子集成為一個(gè)“簇”弊知。通過(guò)這樣的劃分阻逮,每個(gè)簇可能對(duì)應(yīng)于一些潛在的概念(也就是類別),如“淺色瓜” “深色瓜”秩彤,“有籽瓜” “無(wú)籽瓜”叔扼,甚至“本地瓜” “外地瓜”等事哭;需說(shuō)明的是,這些概念對(duì)聚類算法而言事先是未知的币励,聚類過(guò)程僅能自動(dòng)形成簇結(jié)構(gòu)慷蠕,簇對(duì)應(yīng)的概念語(yǔ)義由使用者來(lái)把握和命名。

2食呻、聚類和分類的區(qū)別

聚類是無(wú)監(jiān)督的學(xué)習(xí)算法流炕,分類是有監(jiān)督的學(xué)習(xí)算法。所謂有監(jiān)督就是有已知標(biāo)簽的訓(xùn)練集(也就是說(shuō)提前知道訓(xùn)練集里的數(shù)據(jù)屬于哪個(gè)類別)仅胞,機(jī)器學(xué)習(xí)算法在訓(xùn)練集上學(xué)習(xí)到相應(yīng)的參數(shù)每辟,構(gòu)建模型,然后應(yīng)用到測(cè)試集上干旧。而聚類算法是沒有標(biāo)簽的渠欺,聚類的時(shí)候,我們并不關(guān)心某一類是什么椎眯,我們需要實(shí)現(xiàn)的目標(biāo)只是把相似的東西聚到一起挠将。

3、性能度量

聚類的目的是把相似的樣本聚到一起编整,而將不相似的樣本分開舔稀,類似于“物以類聚”,很直觀的想法是同一個(gè)簇中的相似度要盡可能高掌测,而簇與簇之間的相似度要盡可能的低内贮。
性能度量大概可分為兩類: 一是外部指標(biāo), 二是內(nèi)部指標(biāo) 汞斧。
外部指標(biāo):將聚類結(jié)果和某個(gè)“參考模型”進(jìn)行比較夜郁。
內(nèi)部指標(biāo):不利用任何參考模型,直接考察聚類結(jié)果粘勒。

4竞端、K-Means的原理

對(duì)于給定的樣本集,按照樣本之間的距離大小仲义,將樣本集劃分為K個(gè)簇婶熬。讓簇內(nèi)的點(diǎn)盡量緊密的連在一起,而讓簇間的距離盡量的大

5埃撵、K-Means算法

給定樣本集D,k-means算法針對(duì)聚類所得簇劃分C最小化平方誤差虽另。

這條公式在一定程度上刻畫了簇內(nèi)樣本圍繞簇均值向量的緊密程度暂刘,E值越小則簇內(nèi)樣本相似度越高。
最小化上面的公式并不容易捂刺,找到它的最優(yōu)解需考察樣本集D內(nèi)所有可能的簇劃分谣拣,這是一個(gè)NP難問題募寨。因此,k-means算法采用了貪心策略森缠,通過(guò)迭代優(yōu)化來(lái)近似求解上面的公式拔鹰。
算法流程如下:

其中第一行對(duì)均值向量進(jìn)行初始化,在第4-8行與第9-16行依次對(duì)當(dāng)前簇劃分及均值向量迭代更新贵涵,若迭代更新后聚類結(jié)果保持不變列肢,則在第18行將當(dāng)前簇劃分結(jié)果返回。

下面以西瓜數(shù)據(jù)集4.0為例來(lái)演示k-means算法的學(xué)習(xí)過(guò)程宾茂。我們將編號(hào)為i的樣本稱為xi瓷马,這是一個(gè)包含“密度”與“含糖率”兩個(gè)屬性值的二維向量。

假定簇?cái)?shù)k=3跨晴,算法開始是隨機(jī)選取三個(gè)樣本x6,x12,x27作為初始均值向量欧聘,即

考察樣本x1=(0.697;0.460)端盆,它與當(dāng)前均值向量u1怀骤,u2,u3的距離分別是0.369焕妙,0.506蒋伦,0.166,因此x1將被劃入簇C3中访敌。類似的凉敲,對(duì)數(shù)據(jù)集中所有的樣本考察一遍后,可得當(dāng)前簇劃分為

于是寺旺,可從C1爷抓,C2,C3分別求出新的均值向量

更新當(dāng)前均值向量后阻塑,不斷重復(fù)上述過(guò)程蓝撇,如下圖所示,第五輪迭代產(chǎn)生的結(jié)果與第四輪迭代相同陈莽,于是算法停止渤昌,得到最終的簇劃分。

6走搁、K-Means與KNN

K-Means是無(wú)監(jiān)督學(xué)習(xí)的聚類算法独柑,沒有樣本輸出;而KNN是監(jiān)督學(xué)習(xí)的分類算法私植,有對(duì)應(yīng)的類別輸出忌栅。KNN基本不需要訓(xùn)練,對(duì)測(cè)試集里面的點(diǎn)曲稼,只需要找到在訓(xùn)練集中最近的k個(gè)點(diǎn)索绪,用這最近的k個(gè)點(diǎn)的類別來(lái)決定測(cè)試點(diǎn)的類別湖员。而K-Means則有明顯的訓(xùn)練過(guò)程,找到k個(gè)類別的最佳質(zhì)心瑞驱,從而決定樣本的簇類別娘摔。
當(dāng)然,兩者也有一些相似點(diǎn)唤反,兩個(gè)算法都包含一個(gè)過(guò)程凳寺,即找出和某一個(gè)點(diǎn)最近的點(diǎn)。兩者都利用了最近鄰(nearest neighbors)的思想拴袭。

7读第、K-Means的優(yōu)點(diǎn)與缺點(diǎn)

優(yōu)點(diǎn):
簡(jiǎn)單,易于理解和實(shí)現(xiàn)拥刻;收斂快怜瞒,一般僅需5-10次迭代即可,高效
缺點(diǎn):
1般哼,對(duì)K值得選取把握不同對(duì)結(jié)果有很大的不同
2吴汪,對(duì)于初始點(diǎn)的選取敏感,不同的隨機(jī)初始點(diǎn)得到的聚類結(jié)果可能完全不同
3蒸眠,對(duì)于不是凸的數(shù)據(jù)集比較難收斂
4漾橙,對(duì)噪點(diǎn)過(guò)于敏感,因?yàn)樗惴ㄊ歉鶕?jù)基于均值的
5楞卡,結(jié)果不一定是全局最優(yōu)霜运,只能保證局部最優(yōu)
6,對(duì)球形簇的分組效果較好蒋腮,對(duì)非球型簇淘捡、不同尺寸、不同密度的簇分組效果不好池摧。

8焦除、代碼部分

讀取數(shù)據(jù)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dataset = pd.read_csv('watermelon_4.csv', delimiter=",")
data = dataset.values
print(dataset)

K-Means算法

import random
def distance(x1, x2):
    return sum((x1-x2)**2)
def Kmeans(D,K,maxIter):
    m, n = np.shape(D)
    if K >= m:
        return D
    initSet = set()
    curK = K
    while(curK>0):  # 隨機(jī)選取k個(gè)樣本
        randomInt = random.randint(0, m-1)
        if randomInt not in initSet:
            curK -= 1
            initSet.add(randomInt)
    U = D[list(initSet), :]  # 均值向量
    C = np.zeros(m)
    curIter = maxIter
    while curIter > 0:
        curIter -= 1
        for i in range(m):
            p = 0
            minDistance = distance(D[i], U[0])
            for j in range(1, K):
                if distance(D[i], U[j]) < minDistance:
                    p = j
                    minDistance = distance(D[i], U[j])
            C[i] = p
        newU = np.zeros((K, n))
        cnt = np.zeros(K)
        for i in range(m):
            newU[int(C[i])] += D[i]
            cnt[int(C[i])] += 1
        changed = 0
        for i in range(K):
            newU[i] /= cnt[i]
            for j in range(n):
                if U[i, j] != newU[i, j]:
                    changed = 1
                    U[i, j] = newU[i, j]
        if changed == 0:
            return U, C, maxIter-curIter
    return U, C, maxIter-curIter

作圖查看結(jié)果

U, C, iter = Kmeans(data,3,10)
# print(U)
# print(C)
# print(iter)

f1 = plt.figure(1)
plt.title('watermelon_4')
plt.xlabel('density')
plt.ylabel('ratio')
plt.scatter(data[:, 0], data[:, 1], marker='o', color='g', s=50)
plt.scatter(U[:, 0], U[:, 1], marker='o', color='r', s=100)
# plt.xlim(0,1)
# plt.ylim(0,1)
m, n = np.shape(data)
for i in range(m):
    plt.plot([data[i, 0], U[int(C[i]), 0]], [data[i, 1], U[int(C[i]), 1]], "c--", linewidth=0.3)
plt.show()

輸出如下:

上圖劃分了三個(gè)簇,每個(gè)簇的命名都是由我們來(lái)命名作彤,例如膘魄,我們可以把它們分別命名為:好瓜、中等瓜竭讳、壞瓜创葡。

完整代碼參考碼云
參考文獻(xiàn)
http://www.reibang.com/p/1f8fb959e013

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绢慢,隨后出現(xiàn)的幾起案子蹈丸,更是在濱河造成了極大的恐慌,老刑警劉巖呐芥,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逻杖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡思瘟,警方通過(guò)查閱死者的電腦和手機(jī)荸百,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滨攻,“玉大人够话,你說(shuō)我怎么就攤上這事」馊疲” “怎么了女嘲?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诞帐。 經(jīng)常有香客問我欣尼,道長(zhǎng),這世上最難降的妖魔是什么停蕉? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任愕鼓,我火速辦了婚禮,結(jié)果婚禮上慧起,老公的妹妹穿的比我還像新娘菇晃。我一直安慰自己,他們只是感情好蚓挤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布磺送。 她就那樣靜靜地躺著,像睡著了一般灿意。 火紅的嫁衣襯著肌膚如雪估灿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天脾歧,我揣著相機(jī)與錄音甲捏,去河邊找鬼。 笑死鞭执,一個(gè)胖子當(dāng)著我的面吹牛司顿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兄纺,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼大溜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了估脆?” 一聲冷哼從身側(cè)響起钦奋,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后付材,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朦拖,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年厌衔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了璧帝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡富寿,死狀恐怖睬隶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情页徐,我是刑警寧澤苏潜,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站变勇,受9級(jí)特大地震影響恤左,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贰锁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一赃梧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧豌熄,春花似錦授嘀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至芯肤,卻和暖如春巷折,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崖咨。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工锻拘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人击蹲。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓署拟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親歌豺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子推穷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 聚類算法 前面介紹的集中算法都是屬于有監(jiān)督機(jī)器學(xué)習(xí)方法,這章和前面不同类咧,介紹無(wú)監(jiān)督學(xué)習(xí)算法馒铃,也就是聚類算法蟹腾。在無(wú)監(jiān)...
    飄涯閱讀 41,322評(píng)論 3 52
  • 1. 章節(jié)主要內(nèi)容 “聚類”(clustering)算法是“無(wú)監(jiān)督學(xué)習(xí)”算法中研究最多、應(yīng)用最廣的算法区宇,它試圖將數(shù)...
    閃電隨筆閱讀 5,038評(píng)論 1 24
  • 一生的等待萧锉,相思珊随,在最深的紅塵相遇,在最美時(shí)分別柿隙,冥冥之中,提起曾滑落的筆鲫凶,畫下了篆刻在淚花里的痛楚 禀崖。 靜靜地聆...
    生財(cái)之道郭家剛教練閱讀 305評(píng)論 0 4
  • 這個(gè)世界上,從來(lái)不缺少螟炫,突如其來(lái)的波附,讓你覺得無(wú)法相信的事情。你或許昼钻,在此之前掸屡,不喜歡他,不關(guān)注他然评,但也一定沒想過(guò)仅财,...
    despicable不二閱讀 208評(píng)論 0 0
  • 122222
    一個(gè)最萌的召喚師閱讀 125評(píng)論 0 0