|
聚類(lèi)分析是非監(jiān)督學(xué)習(xí)的很重要的領(lǐng)域。所謂非監(jiān)督學(xué)習(xí),就是數(shù)據(jù)是沒(méi)有類(lèi)別標(biāo)記的,算法要從對(duì)原始數(shù)據(jù)的探索中提取出一定的規(guī)律。而聚類(lèi)分析就是試圖將數(shù)據(jù)集中的樣本劃分為若干個(gè)不相交的子集,每個(gè)子集稱(chēng)為一個(gè)“簇”。下面是sklearn中對(duì)各種聚類(lèi)算法的比較。 KMeansKMeans算法在給定一個(gè)數(shù)k之后,能夠?qū)?shù)據(jù)集分成k個(gè)“簇”,不論這種分類(lèi)是否合理,或者是否有意義。算法需要最小化平方誤差: 其中是簇的均值向量,或者說(shuō)是質(zhì)心。其中代表每個(gè)樣本點(diǎn)到均值點(diǎn)的距離(其實(shí)也是范數(shù))。這里就稍微提一下距離度量。 距離度量最常用的就是閔可夫斯基距離(亦即p范數(shù)),即 當(dāng)p==2的時(shí)候,閔可夫斯基距離即為歐氏距離(2范數(shù)) 以上是對(duì)于數(shù)值屬性來(lái)說(shuō)的,對(duì)于一些離散屬性也有相關(guān)的距離的定義。最后在現(xiàn)實(shí)中的數(shù)據(jù)如果要確定合適的距離計(jì)算式,可以通過(guò)“距離度量學(xué)習(xí)”來(lái)實(shí)現(xiàn)。 也就是說(shuō)上面的式(1)的目的就是我們要找到k個(gè)簇,使得在每個(gè)簇內(nèi),所有的樣本點(diǎn)都盡量靠得比較近。 下面介紹KMeans的基本算法流程 可以看出KMeans的基本算法是很容易理解的,算法本身也挺簡(jiǎn)單,運(yùn)行較快,所以KMeans可用于非常大型的數(shù)據(jù)集。但是KMeans也有一些缺點(diǎn) 總體上KMeans以及它很多聚類(lèi)算法對(duì)于每一簇?cái)?shù)據(jù)分布都是凸的情況效果都很好。 密度聚類(lèi)(DBSCAN)密度聚類(lèi)的思想是不同于KMeans的,但是更符合我們?nèi)祟?lèi)的思維,基本的思想是通過(guò)是否緊密相連來(lái)判斷樣本點(diǎn)是否屬于一個(gè)簇。代表性的算法就是DBSCAN,它基于一組鄰域參數(shù)來(lái)表征某處樣本是否是緊密的。在介紹算法之前先介紹一些概念。 核心對(duì)象:若的-鄰域至少包含個(gè)樣本,即,那么是一個(gè)核心對(duì)象。其實(shí)也就是在核心對(duì)象周?chē)狞c(diǎn)相對(duì)鄰域參數(shù)來(lái)說(shuō)是致密的。 密度直達(dá)與可達(dá):直達(dá)的意思是點(diǎn)位于點(diǎn)的-鄰域中??蛇_(dá)的意思是存在這么一個(gè)樣本序列,到是直達(dá)的,到是直達(dá)的,就這樣不斷地借著這些樣本作為“跳板”,可以間接地“跳到”。 密度相連:對(duì)于樣本點(diǎn)和若存在點(diǎn)使得和均可由密度可達(dá),則稱(chēng)和密度相連。 最后由DBSCAN所定義的簇的概念為:由密度可達(dá)關(guān)系導(dǎo)出的最大的密度相連樣本集合。 下面是DBSCAN的基本算法步驟: 其實(shí)周志華老師的書(shū)《機(jī)器學(xué)習(xí)》上對(duì)算法的描述更清晰,感興趣的可以去看看。 這里提一個(gè)我的想法,我在看算法的時(shí)候就覺(jué)得這個(gè)算法有點(diǎn)眼熟,后來(lái)想起來(lái)發(fā)現(xiàn)跟廣度優(yōu)先搜索有點(diǎn)像,再想想發(fā)現(xiàn)DBSCAN的思路就是和廣度優(yōu)先很想。比如密度直連的兩個(gè)點(diǎn)之間可以看作這兩個(gè)點(diǎn)相連,密度可達(dá)可以看作兩個(gè)點(diǎn)之間存在一條路徑,找出所有的簇就可以看作找出整個(gè)圖中的連通分量。另外在數(shù)據(jù)結(jié)構(gòu)上DBSCAN和廣度優(yōu)先都使用了隊(duì)列來(lái)儲(chǔ)存訪(fǎng)問(wèn)到的點(diǎn)。只是由來(lái)確定兩個(gè)點(diǎn)是否相連。以上提供一個(gè)視角以供參考。 DBSCAN的優(yōu)點(diǎn): 缺點(diǎn): 層次聚類(lèi)(hierarchical clustering)層次聚類(lèi)是一類(lèi)算法的總稱(chēng),是通過(guò)從下往上不斷合并簇,或者從上往下不斷分離簇形成嵌套的簇。這種層次的類(lèi)通過(guò)“樹(shù)狀圖”來(lái)表示。AgglomerativeClustering算法是一種層次聚類(lèi)的算法。 算法的原理很簡(jiǎn)單,最開(kāi)始的時(shí)候?qū)⑺袛?shù)據(jù)點(diǎn)本身作為簇,然后找出距離最近的兩個(gè)簇將它們合為一個(gè),不斷重復(fù)以上步驟直到達(dá)到預(yù)設(shè)的簇的個(gè)數(shù)。 可以看到,一個(gè)很關(guān)鍵的地方就是判斷簇之間的距離。判斷的準(zhǔn)則叫做鏈接準(zhǔn)則。對(duì)于A(yíng)gglomerativeClustering算法,scikit-learn有三種準(zhǔn)則 · Ward minimizes the sum of squared differences within all clusters. It is a variance-minimizing approach and in 三種準(zhǔn)則有所不同,在后面的文章中再來(lái)探討他們的區(qū)別 左邊是沒(méi)有connectivity constraint的,可以看到有些藍(lán)色的簇橫跨了兩片(只能這么表述了),右邊有connectivity constraint的情況下,簇可以看到基本就是沿著彎曲的平面分布的,這種結(jié)果可能更合理,并且是可以加快計(jì)算速度的,尤其是在數(shù)據(jù)量很大的情況下。因?yàn)閷?duì)于每個(gè)點(diǎn)只需要考慮和它相鄰的點(diǎn),而不是考慮所有的點(diǎn)。但是connectivity constraint需要一個(gè)叫做connectivity matrix的東西,這個(gè)矩陣我也不清楚具體形式,寫(xiě)這些只是提醒有connectivity constraint這么個(gè)東西存在。 還有,從最上方的圖中也能夠看出AgglomerativeClustering算法對(duì)于形狀比較怪異的分布也有較好的效果 綜上就是我挑出的三個(gè)主要的聚類(lèi)算法進(jìn)行了大致的介紹,另外還有一個(gè)算法:高斯混合模型,我準(zhǔn)備把它和EM算法一起單獨(dú)寫(xiě)篇文章。聚類(lèi)算法可以作為一些監(jiān)督算法的前驅(qū)過(guò)程,又是非監(jiān)督學(xué)習(xí)的重要部分,還是很重要的。 |
|
|
來(lái)自: 鞅牛 > 《專(zhuān)利分析》