聚類是一種很常見的資料處理方式,為的就是把具有相同型別的資料聚集在一起,再做處理,聚類屬於無監督學習演算法的一種,沒有正確的結果可供檢驗。書中介紹了兩種聚類的方法,一種是層次聚類,另一種是是k-均值聚類。
層次聚類可以看做是在乙個圖中找出最小代價樹的kruskal演算法,每次處理時會將兩個相聚最近的不同類聚集在一起,這個過程一直重複直到整個資料集屬於乙個類,當然也可以等有k個類別的時候就停止聚類操作。初始資料集中的每個資料都屬於不同的類別,經過一次操作後兩個最接近的資料點會被劃分成同乙個類別,這個時候就會出現乙個問題,這乙個類別中包含了多個點,當計算這個類別和其他類別的相似度時該如何計算呢?
聚類操作是將資料集中的每個資料,對映到n維空間中的乙個點,計算兩點間的相似性可以使用歐氏距離,也可以使用相關係數(計算n維空間中兩點間不同分量的趨勢是否一致)。計算單獨兩個點間的距離的資料非常明顯,但是計算兩個點集合之間的相似性則不太明了,這是可以選用很多不同的方式,不同選取兩個集合之間所有的點對之間距離最近的兩個點間的相似性來作為兩點間的相似性,選取兩個集合中相距最遠的兩個點對之間的相似性作為兩個集合的相似性,也可以先計算乙個類的中心(所有點先求和,再平均),再計算兩個中心之間的距離。但是在這本書中這幾種方法都沒有使用到,使用的是另外一種方法。首先假設每個類都有乙個中心,當這個類中只有單個資料點時,很明顯這個資料點就是這個類的中心,當將兩個類別聚合成乙個類時,新的類的中心,取這兩個類中心的均值作為新的類的中心,按照這種方式,不同資料點在聚類中的效果不同,最早的被歸入類中的資料點相比於後來的聚合的資料點的權值偏低,不知道這有什麼道理~
另乙個就是k-均值聚類。k-均值聚類的想法就是直接假定k個類別的中心,對每個資料,計算這個資料點跟k個類別的距離,跟哪個類別中心的距離最近,就將它歸入那個類中。將所有資料處理完後再重新計算類中心,重複以上的過程,知道類別中心不再發生變化為止。這個方法相對於層次聚類來說就是計算量得以減小了,層次聚類方法每次聚類需要計算每兩個點之間的距離,選取其中最小的,這種消耗為o(n2),為了減小計算量可以將前次的結果儲存起來,後面的如果用到了這個資料可以直接使用,無需計算,大大的減少了時間。而k-均值聚類,每次的計算量為o(nk),而且需要的迭代次數比較少,相比起來就比較好些。
《集體智慧型程式設計》讀書筆記 1 聚類簡介
1 聚類演算法的目的是採集資料,然後從中找出不同的群組。2 universal feed parser 3 皮爾遜相關度其實判斷的是兩組資料與某條直線的擬合程度,當兩者完全匹配時,計算結果為1.0,當兩者毫無關係時,計算結果為0.0.4 分級聚類 分級聚類的結果會產生一棵樹 分級聚類雖然會返回一棵形...
集體智慧型程式設計的筆記
從evernote搬家過來,希望可以分享給更多的同學。euclidean distance and pearson correlation score from imp import reload 來定義reload。經過recommendations.py,可以發現 選擇不同的相似性度量方法,對結...
集體智慧型程式設計 第三章 分級聚類演算法
工作原理 分級聚類通過連續不斷將最為相似的集群兩兩合併,來構造出乙個群組的層級結構。其中的每個群組都是從單一元素開始的。每次迭代的過程中,分級聚類演算法會計算每2個 集群間的距離,並將距離最近的兩個集群合併為乙個新的集群,這一過程會一直繼續下去,直到只剩乙個群組為止 分級聚類的過程 從圖中可以看出,...