7 聚類演算法

2021-08-20 10:12:01 字數 2349 閱讀 9885

聚類演算法是無監督學習,因為它不需要結果.

其實聚類並不是特別準,因為它沒有標準答案,就表示有很多種可能,那麼實際機器判斷的準確度可能就並不高了.

聚類主要有:k-means聚類, 層次聚類,混合高斯模型

有監督學習下的答案y,對應於聚類裡面的相關性

聚類的好壞分析:

類內相似度高,類間相似度低,類內距離近,類間距離遠,相關係數一般相關係數越低相關度越高

一般來說距離就用歐式距離,相關係數就用person相關係數

輸入1:n個樣本點

輸入2:擬定的聚類個數

初始化n維的樣本,隨機生成k個聚類中心,然後開始迴圈迭代,往各個中心收斂,邊收斂別計算新的中心點

面試點:迭代到什麼情況能算收斂,或者說迭代收斂怎麼定義

答1.聚類中心不需要重新計算,2.每個樣本點到中心的距離和,不會有太大變化

聚類會遇到收斂到區域性最低點的問題,解決方式

1.找到乙個距離中心點最遠距離的新點1,找到和它們兩個點距離最遠的新點2...

2.重新選初始點,然後多嘗試幾次,然後選擇到聚類中心之後最小的

3.k-means++

聚類數目k的選擇方式

肘點法畫出k取值和損失函式對應的圖,根據圖找到拐角最大的點,那個點就叫肘點,那個值就是k的最佳值

那個圖類似於這樣

比如圖中的明顯就是取2最合適

工業經驗:實際選取可以根據分類的樣本數目,比如數目太大的時候沒法迴圈個幾十萬次來選,就先選個相對合適的值,進行分類,如果裡面的值都差不多,那就不用管了,如果有些聚類特別小,可以適當的降一點,具體的合適多少,具體降多少都要根據實際情況來

k-means的不足

1.'硬聚類',乙個樣本就必須是乙個類的,不能是其它類.哪怕它可以屬於其它類

2.異常值處理不佳,要乙個值離樣本聚類很遠,可能把中心點拉到乙個鳥不拉屎的地方去比如

這種情況可以找均值最近的樣本點替代均值

3.團狀聚類無法支援,只能用其它聚類方法替代

層次聚類分為bottom - top和top-bottom

先從bottom-top說吧

假如我們有10個樣本,把裡面最近的樣本22取出來進行聚類,得到五個聚類,然後重複這操作,如果遇到奇數就不進行聚類,判斷和其它聚類的距離,再新增到相應聚類裡面去.

這樣分配出來的聚類,不會像k-means一樣出現聚類特別少的情況,但每個時間節點需要遍歷的次數都是恐怖的

top-bottom

和bottom-topx相反一開始就是拆,把距離相對比較遠的,一步步拆掉

缺點:計算量比較恐怖

優點:精準度很高,因為每個值它都能考慮到,比較適合做基因工程之類的

就是多個正態分佈嫁接在一起形成的一種分布形式

因為是聚類所以有k個正態分佈,也就是k個聚類p(c=i) = w1樣本點c在第i個高斯分布的概率w1

p(x|c=i)  = u(x;u,σ)

而實際的p(x) = w1 * u(x;u,σ)  

求解模式為e-step和m-step

e-step

首先用上述公式把概率pij求解出來,

然後用i把所有j遍歷一遍

e-step就是用已知的樣本估出樣本的分布

m-step

在知道樣本分佈的情況下擬合出正態分佈的均值和方差,得到乙個完整的正態分佈

w1 = ni/n,n為總體數目,ni為樣本數目,w1是落入該樣本的概率

ui = 1/ni sum(x) 把樣本所有值相加然後除以樣本數量ni就得到樣本均值ui

方差就是樣本的每個值減去均值的平方相加然後除以樣本個數

然後得到的最優解並不是分類,而是每個點的概率,可以憑分析去判斷落在哪個聚類

解決有些值的權重不一樣導致硬聚類並不十分正確

em演算法比較快,所以比較高效

三個聚類的比對圖,hierarchical代表層次聚類,k-means不用說,gmm是高斯混合模型一般和em演算法一起用gmm+em

1.效率來說層次聚類慢的要死,每步操作都是數量驚人的迭代,k-means一般來說是最快,高斯混合模型其次前提是兩者的k值一樣

2.後兩者需要k值,第乙個是二叉樹形式的,所以不需要k值

3.第乙個以執行者生成的聚類為主,後兩個則根據k來

聚類演算法 近鄰聚類演算法

time is always too short for those who need it,but for those who love,it lasts forever.dracula untold 近鄰聚類法同樣是一種基於距離閾值的聚類演算法。coding utf 8 近鄰聚類演算法的pyth...

聚類演算法 層次聚類演算法

層次聚類演算法 hierarchical clustering method 又稱為系統聚類法 分級聚類法。層次聚類演算法又分為兩種形式 凝聚層次聚類 首先將每個物件作為乙個簇,然後合併這些原子簇為越來越大的簇,直到某個終結條件被滿足。層次聚類 首先將所有物件置於乙個簇中,然後逐漸細分為越來越小的簇...

聚類演算法 什麼是聚類

聚類分析或聚類演算法就是通過一些方法或手段使資料集集聚成不同的類別,或者叫 簇。簇內部每乙個單位都是相似的。簇與簇之間都是不相似的。但是聚類其實是一種思想,它不是一種具體的方法。這裡千萬不要搞混。但是可以實現聚類的演算法有很多種。我們通常就使用這些演算法來實現聚類的。比如 k means就是最為經典...