摘要:其實(shí)聚類算法還有一個(gè)妙用就是,當(dāng)數(shù)據(jù)集過于龐大,并且原始數(shù)據(jù)并不存在信息,你又需要跑一個(gè)有監(jiān)督學(xué)習(xí)的算法的時(shí)候,你想要人為的給數(shù)據(jù)打顯然是不合適的,這時(shí)先跑一次聚類,記錄好聚類的情況,再直接跑有監(jiān)督學(xué)習(xí)的算法就可以了。
前言
在本系列前面的內(nèi)容中,講述了一系列的機(jī)器學(xué)習(xí)方法。要知道機(jī)器學(xué)習(xí)算法中,比較常用的主要分成有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)(其實(shí)還有一個(gè)叫半監(jiān)督學(xué)習(xí),在這里先不作討論),簡單點(diǎn)來說,所謂的有監(jiān)督學(xué)習(xí),就是人類會給訓(xùn)練集指明label,自然的無監(jiān)督學(xué)習(xí)就是不為訓(xùn)練集指明label。所以本系列前段時(shí)間所說的就屬于有監(jiān)督學(xué)習(xí)。
站在使用者的角度來說,兩種模型的使用方法大致相同,都是我將測試樣本輸入模型,模型輸出該樣本所屬的類別(這里以分類問題為例),但模型產(chǎn)生的方式是不同的。對于有監(jiān)督學(xué)習(xí)來說,你重新訓(xùn)練一次樣本1類還是那個(gè)1類,而對于無監(jiān)督學(xué)習(xí)來說,你重新訓(xùn)練一次1類說不定就不是上次那個(gè)1類了,正是因?yàn)檫@個(gè)原因,所以在輸出類別后,必要時(shí)需要輸出同類別的其他樣本,以作參考。
正如當(dāng)你老師跟你說了一堆三角形的例子你就知道這堂課說的就是三角形一樣,沒錯,接下來就是為了講述最基本的無監(jiān)督學(xué)習(xí)的算法,K-Means聚類算法。
在這篇文章中,作者舉了一個(gè)例子,將近年來各國球隊(duì)的戰(zhàn)績進(jìn)行聚類,分出世界一流,二流,三流球隊(duì),那么,顯然當(dāng)有一只新球隊(duì)需要分類時(shí),將他的戰(zhàn)績?nèi)舆M(jìn)模型里跑一跑就ok了。
其實(shí)聚類算法還有一個(gè)妙用就是,當(dāng)數(shù)據(jù)集過于龐大,并且原始數(shù)據(jù)并不存在label信息,你又需要跑一個(gè)有監(jiān)督學(xué)習(xí)的算法的時(shí)候,你想要人為的給數(shù)據(jù)打label顯然是不合適的,這時(shí)先跑一次聚類,記錄好聚類的情況,再直接跑有監(jiān)督學(xué)習(xí)的算法就可以了。
K-Means回到正題上,本文主要介紹K-Means方法,和為了彌補(bǔ)K-Means不足而產(chǎn)生的二分K-Means方法
以下講解以二維數(shù)據(jù)為例。
普通的K-Means方法隨機(jī)產(chǎn)生n個(gè)點(diǎn)為簇心,n的取值為用戶需要的類別個(gè)數(shù)。
計(jì)算所有樣本離簇心的距離,計(jì)算方法有多種,其中包括最易理解的歐式距離sqrt((x1-y1)^2 +(x2-y2)^2)
每一個(gè)樣本都?xì)w納到距離最近的簇心所在的類別。
產(chǎn)生新的簇心,新的簇心計(jì)算方法為每一個(gè)簇內(nèi)所有的樣本的算術(shù)平均數(shù)。新簇心坐標(biāo)(((x1+x2+……xn)/n),(y1+y2+……yn)/n))(x,y)為同一簇內(nèi)樣本點(diǎn)的坐標(biāo)
產(chǎn)生新的簇心后,按照新的簇心進(jìn)行分類,若分類結(jié)果不變,則結(jié)束聚類,否則重復(fù)該過程至分類結(jié)果不變或超出用戶指定的迭代次數(shù)。
普通K-Means有一個(gè)比較明顯的缺陷,就是他的起始簇心是隨機(jī)的。
隨機(jī)意味這什么呢?一切皆有可能??!
因?yàn)楹罄m(xù)的質(zhì)心迭代都是基于首次質(zhì)心的選取,因此整體算法的結(jié)果和質(zhì)心的選取極度敏感,雖然退一步來說,第一次聚類不理想,就重來算法一次好了,你可以重復(fù)運(yùn)行至結(jié)果可接受位置,但這種方法顯然是不能接受。于是便出現(xiàn)了二分K-Means算法。
二分K-Means方法以所有樣本點(diǎn)的中心為第一個(gè)簇心
判斷當(dāng)前簇心數(shù)是否滿足要求,若滿足則退出算法
若不滿足,則選取劃分后誤差最小的點(diǎn)一分為二(只有一個(gè)點(diǎn)時(shí)則選取自身)(一分為二的操作是指對該簇進(jìn)行普通的K-Means方法)
直至簇心個(gè)數(shù)滿足要求。
代碼實(shí)現(xiàn)后話github
自從開始這個(gè)機(jī)器學(xué)習(xí)從入門到放棄系列后,也多了一些關(guān)注者,最近文章更新緩慢我也有些抱歉,其實(shí)在github上已有其他算法的實(shí)現(xiàn),心癢的同學(xué)可以先自行學(xué)習(xí),因文章需要知識上的梳理和總結(jié)加上一些私事,所以更新會較慢,各位關(guān)注者見諒哈。
文章如有不足或不明白的地方,歡迎留言指教或探討。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38188.html
摘要:摘要前文數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門實(shí)戰(zhàn)與大家分享了分類算法,在本文中將為大家介紹聚類算法和關(guān)聯(lián)分析問題。比如,聚類算法可以實(shí)現(xiàn)公司客戶價(jià)值自動劃分,網(wǎng)頁自動歸類等。 摘要:前文數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門實(shí)戰(zhàn)與大家分享了分類算法,在本文中將為大家介紹聚類算法和關(guān)聯(lián)分析問題。分類算法與聚類到底有何區(qū)別?聚類方法應(yīng)在怎樣的場景下使用?如何使用關(guān)聯(lián)分析算法解決個(gè)性化推薦問題?本文就為大家揭曉答...
閱讀 1613·2021-09-23 11:31
閱讀 929·2021-09-23 11:22
閱讀 1353·2021-09-22 15:41
閱讀 4085·2021-09-03 10:28
閱讀 2918·2019-08-30 15:55
閱讀 3549·2019-08-30 15:55
閱讀 1966·2019-08-30 15:44
閱讀 2728·2019-08-30 13:50