演算法積累 K均值聚類(Kmeans)

2021-07-15 06:08:13 字數 2652 閱讀 9283

碼字不易,**請註明出處:

mllib(機器學習)分兩種——監督學習,無監督學習。首先監督學習,類似普貝葉斯這樣的分類演算法。要求必須事先明確知道各個類別的資訊,並且斷言所有待分類項都有乙個類別與之對應。顯而眼見的是,這種需求另監督學習有很大的侷限性,尤其在海量資料處理時。要預先處理資料以滿足演算法需求得耗費大量資源與時間。此時,可以使用聚類演算法這樣的無監督學習,相比於分類,聚類不依賴預定義的類和類標號的訓練例項。本文將聚類演算法拆分開來。深刻理解其思想。

相異度計算——聚類,見名之意,便是將資料聚集起來,但是並非是將所有資料聚集到乙個點。而是根據需要聚集成多個點。而聚到哪個點的依據。便是元素與中心的相異度。其實可以將聚類簡單的理解為,通過相異度將資料劃分開來。然後各自聚集在一起。

設接下來說說一些常見型別的變數的相異度的計算方式:

標量也就是無方向意義的數字,也叫標度變數。例如:x,y。常用的計算方式是求其的歐幾里得距離作為相異度。歐幾里得距離定義如下:

其意義就是兩個元素在歐氏空間中的集合距離,因為其直觀易懂且可解釋性強,被廣泛用於標識兩個標量元素的相異度。

還有比較常用的方式是曼哈頓距離和閔可夫斯基距離。

閔可夫斯基距離:

歐氏距離和曼哈頓距離可以看做是閔可夫斯基距離在p=2和p=1下的特例。實際上都十分容易理解。

雖說上述的演算法計算能夠計算相異度。但是不難看出,在類似x1和y1的差距過大時,會對相異度有很大的影響。比如x,y使用歐幾里得距離計算後得到的相異度近似為100,這顯然是不正常的。所以,在使用上述演算法時,需要對資料進行規格化——所謂規格化就是將各個屬性值按比例對映到相同的取值區間,這樣是為了平衡各個屬性對距離的影響。通常將各個屬性均對映到[0,1]區間,對映公式為:

其中max(ai)和min(ai)表示所有元素項中第i個屬性的最大值和最小值。

所謂二元變數其實就是是只能取0和1兩種值變數,有點類似布林值,通常用來標識是或不是這種二值屬性。對於二元變數,一種常用的方法是用元素相同序位同值屬性的比例來標識其相異度。

設有x=,y=,可以看到,兩個元素第2、3、5、7和8個屬性取值相同,而第1、4和6個取值不同,那麼相異度可以標識為3/8=0.375。一般的,對於二元變數,相異度可用「取值不同的同位屬性數/單個元素的屬性位數」標識。

上面所說的相異度應該叫做對稱二元相異度。現實中還有一種情況,就是我們只關心兩者都取1的情況,而認為兩者都取0的屬性並不意味著兩者更相似。例如在根據病情對病人聚類時,如果兩個人都患有肺癌,我們認為兩個人增強了相似度,但如果兩個人都沒患肺癌,並不覺得這加強了兩人的相似性,在這種情況下,改用「取值不同的同位屬性數/(單個元素的屬性位數-同取0的位數)」來標識相異度,這叫做非對稱二元相異度。如果用1減去非對稱二元相異度,則得到非對稱二元相似度,也叫jaccard係數,是乙個非常重要的概念。

分類變數是二元變數的推廣,類似於程式中的列舉變數,但各個值沒有數字或序數意義,如顏色、民族等等,對於分類變數,用「取值不同的同位屬性數/單個元素的全部屬性數」來標識其相異度。

序數變數是具有序數意義的分類變數,通常可以按照一定順序意義排列,如冠軍、亞軍和季軍。對於序數變數,一般為每個值分配乙個數,叫做這個值的秩,然後以秩代替原值當做標量屬性計算相異度。

所謂聚類問題,就是給定乙個元素集合d,其中每個元素具有n個可觀察屬性,使用某種演算法將d劃分成k個子集,要求每個子集內部的元素之間相異度盡可能低,而不同子集的元素相異度盡可能高。其中每個子集叫做乙個簇。

演算法流程

k-means是乙個反覆迭代的過程,演算法分為四個步驟:

1) 選取資料空間中的k個物件作為初始中心,每個物件代表乙個聚類中心;

2) 對於樣本中的資料物件,根據它們與這些聚類中心的歐氏距離,按距離最近的準則將它們分到距離它們最近的聚類中心(最相似)所對應的類;

3) 更新聚類中心:將每個類別中所有物件所對應的均值作為該類別的聚類中心,計算目標函式的值;

4) 判斷聚類中心和目標函式的值是否發生改變,若不變,則輸出結果,若改變,則返回2)。

其實理解起來還是十分容易的:由於剛開始處理資料,對資料的資訊並不是十分了解,所以開始需要隨機取中心(k值根據現實需求定),而聚類的精髓在於根據相異度進行資料劃分。因此在選取中心點後,便是計算整個樣本中的所有資料物件與中心點的相異度進行資料劃分。

第一次資料劃分完畢。這是的聚類由於中心是隨機挑選的。因為並非十分準確。這時,求出該簇中的資料物件的算術平均值作為中心點。重新計算相異度。能夠有效地減少誤差。遞迴 這段操作,直到簇不變時,自然便是演算法收斂。

圖1:給定乙個資料集;

圖2:根據k = 5初始化聚類中心,保證 聚類中心處於資料空間內;

圖3:根據計算類內物件和聚類中心之間的相似度指標,將資料進行劃分;

圖4:將類內之間資料的均值作為聚類中心,更新聚類中心。

最後判斷演算法結束與否即可,目的是為了保證演算法的收斂。

K均值 K means 聚類演算法

j.b.macqueen 在 1967 年提出的k means演算法 22 到目前為止用於科學和工業應用的諸多聚類演算法中一種極有影響的技術。它是聚類方法中乙個基本的劃分方法,常常採用誤差平方和準則函式作為聚類準則函式,誤差平方和準則函式定義為 3 1 其中,是類 中資料物件的均值,即 j 1,2,...

K 均值聚類演算法 K means

k means是一種無監督的學習,將相似的物件歸到同乙個簇中.可以將一批資料分為k個不同的簇,並且每個簇的中心採用簇中所含樣本的均值計算而成.k means演算法的k值需要由使用者指定,演算法開始時隨機選擇k個初始點作為質心,然後將資料集中的每個點分配到乙個簇中.那麼,如何確定某一組資料歸於哪個簇中...

K均值聚類演算法 K Means

將資料集中的資料按照距離質心的遠近分到各個簇中 將各個簇中的資料求平均值,作為新的質心,重複上一步,直到所有的簇不再改變 from numpy import defloaddataset filename dataset f open filename for line in f.readlines...