機器學習演算法總結之聚類 K means

2021-08-19 15:49:11 字數 3567 閱讀 9691

在前面學習的ml演算法中,基本都是有監督學習型別,即存在樣本標籤。然而在機器學習的任務中,還存在另外一種訓練樣本的標籤是未知的,即「無監督學習」。此類任務中研究最多、應用最廣泛的是「聚類」(clustering),常見的無監督學習任務還有密度估計、異常檢測等。本文將首先介紹聚類基本概念,然後具體地介紹幾類細分的聚類演算法。

聚類試圖將資料集中的樣本劃分為若干個通常是不相交的子集,每個子集稱為乙個「簇」(cluster),不同的簇分布代表著聚類演算法對這組資料集觀測的不同角度。聚類就是將資料物件分組成多個類簇,劃分的原則就是使得同乙個簇內的物件之間具有較高的相似度,而不同簇之間物件之間的差異最大,乙個類簇內的任意兩點之間的距離小於不同類簇的任意兩個點之間的距離。

在介紹聚類的具體演算法之前,我們得要先討論聚類演算法涉及的最基本的問題:如何判斷乙個聚類演算法結果的好壞?這就主要涉及了兩個問題:效能度量和距離計算。

1.1 效能度量

聚類效能度量亦稱聚類「有效性指標」(validity index),與監督學習一樣,它的目的是為了用來評估聚類結果的好壞,當我們能通過效能度量來評估聚類的好壞時,我們就可以通過將這個效能度量作為優化目標來生成更好的聚類結果。

(1)外部指標

將聚類結果與某個「參考模型」(reference model)進行比較,比如與領域專家的劃分結果進行比較(其實這已經算是某種程度上對資料進行標註了)

基於上述可以得到下面常用的聚類效能度量外部指標:

顯然上述效能度量的結果值均在【0,1】區間,且值越大越好。

(2)內部指標

直接考察聚類結果而不利用任何參考模型

顯然dbi的值越小越好,而di則相反。

1.2 距離計算

主要是基於某種形式的距離來定義「相似度」,距離越大,相似度越小。

k-means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。k-means演算法有大量的變體,本文就從最傳統的k-means演算法講起,在其基礎上講述k-means的優化變體方法。包括初始化優化k-means++, 距離計算優化elkan k-means演算法和大資料情況下的優化mini batch k-means演算法。

2.1 k-means原理

k-means演算法的思想很簡單,對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為k個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。

如果用資料表示式表示,假設簇劃分為(c1,c2,...ck),則我們的目標是最小化平方誤差e:

其中μi是簇ci的均值向量,有時也稱為質心,表示式為:

2.2 k-means演算法流程

2.3 k-means初始化優化k-means++

k個初始化質心的選擇對最後演算法結果以及執行時間都有很重大的影響,所以需要選擇合適的質心。

k-means++演算法就是對k-means隨機初始化質心的方法的優化。

2.4k-means距離計算優化elkan k-means

在傳統的k-means演算法中,我們在每輪迭代時,要計算所有的樣本點到所有的質心的距離,這樣會比較的耗時。那麼,對於距離的計算有沒有能夠簡化的地方呢?elkan k-means演算法就是從這塊入手加以改進。它的目標是減少不必要的距離的計算。那麼哪些距離不需要計算呢?

elkan k-means利用了兩邊之和大於等於第三邊,以及兩邊之差小於第三邊的三角形性質,來減少距離的計算。

第一種規律是對於乙個樣本點x和兩個質心μj1,μj2。如果我們預先計算出了這兩個質心之間的距離d(j1,j2),則如果計算發現2d(x,j1)≤d(j1,j2),我們立即就可以知道d(x,j1)≤d(x,j2)。此時我們不需要再計算d(x,j2),也就是說省了一步距離計算。

第二種規律是對於乙個樣本點x和兩個質心μj1,μj2。我們可以得到d(x,j2)≥max。這個從三角形的性質也很容易得到。

利用上邊的兩個規律,elkan k-means比起傳統的k-means迭代速度有很大的提高。但是如果我們的樣本的特徵是稀疏的,有缺失值的話,這個方法就不使用了,此時某些距離無法計算,則不能使用該演算法。

2.5 大樣本優化mini batch k-means

在統的k-means演算法中,要計算所有的樣本點到所有的質心的距離。如果樣本量非常大,比如達到10萬以上,特徵有100以上,此時用傳統的k-means演算法非常的耗時,就算加上elkan k-means優化也依舊。在大資料時代,這樣的場景越來越多。此時mini batch k-means應運而生。

顧名思義,mini batch,也就是用樣本集中的一部分的樣本來做傳統的k-means,這樣可以避免樣本量太大時的計算難題,演算法收斂速度大大加快。當然此時的代價就是我們的聚類的精確度也會有一些降低。一般來說這個降低的幅度在可以接受的範圍之內。

在mini batch k-means中,我們會選擇乙個合適的批樣本大小batch size,我們僅僅用batch size個樣本來做k-means聚類。那麼這batch size個樣本怎麼來的?一般是通過無放回的隨機取樣得到的。

為了增加演算法的準確性,我們一般會多跑幾次mini batch k-means演算法,用得到不同的隨機取樣集來得到聚類簇,選擇其中最優的聚類簇。

k-means是個簡單實用的聚類演算法,這裡對k-means的優缺點做乙個總結。

k-means的主要優點有:

1)原理比較簡單,實現也是很容易,收斂速度快。

2)聚類效果較優。

3)演算法的可解釋度比較強。

4)主要需要調參的引數僅僅是簇數k。

k-means的主要缺點有:

1)k值的選取不好把握

2)對於不是凸的資料集比較難收斂

3)如果各隱含類別的資料不平衡,比如各隱含類別的資料量嚴重失衡,或者各隱含類別的方差不同,則聚類效果不佳。

4) 採用迭代方法,得到的結果只是區域性最優。

5) 對噪音和異常點比較的敏感。

以上~

Scikit learn實戰之聚類 Kmeans

在scikit learn中,對於未標記資料的執行聚類需要使用 sklearn.cluster 模組。每乙個聚類演算法有兩個變數組成 乙個是類,它實現了fit方法從未標記的訓練資料中學習類簇 還有乙個就是函式,該函式的功能就是給它一批訓練資料,它能夠返回與每一批訓練資料相對應的類標的結果的整數集合。...

機器學習之聚類演算法

聚類就是將乙個物件的集合 樣本集合 分割成幾個不想交的子集 每個子集所代表的語義需要使用者自己進行解釋 每個類內的物件之間是相似的,但與其他類的物件是不相似的.分割的類的數目可以是指定的 例如k means 也可以是有演算法生成的 dbscan 聚類是無監督學習的乙個有用工具。1原型聚類 原型聚類是...

機器學習之聚類演算法 K Means

參考 聚類演算法可以分為 中心點方法 層次聚類方法 基於密度方法 基於網格 基於模型方法。其中最為經典的是k means演算法 k means屬於中心點方法 也有叫劃分方法 演算法經典簡單。演算法 人工選取k值,並選取k個點作為k個簇的質心 對所有樣本分別計算到k個簇的質心的距離 歐式或者曼哈頓 取...