1. K-Means原理解析


1. K-Means原理解析

2. K-Means的優化

3. sklearn的K-Means的使用

4. K-Means和K-Means++實現

1. 前言

我們在一開始的時候應該就說過,機器學習按照有無標簽可以分為“監督學習”和“非監督學習”。

監督學習里面的代表算法就是:SVM、邏輯回歸、決策樹、各種集成算法等等。

非監督學習主要的任務就是通過一定的規則,把相似的數據聚集到一起,簡稱聚類。我們今天講的K-Means算法是在非監督學習比較容易理解的一個算法,也是聚類算法中最著名的算法。

2. K-Means原理

K-Means是典型的聚類算法,K-Means算法中的k表示的是聚類為k個簇,means代表取每一個聚類中數據值的均值作為該簇的中心,或者稱為質心,即用每一個的類的質心對該簇進行描述。

2.1 K-Means步驟

  1. 創建k個點作為起始質心。
  2. 計算每一個數據點到k個質心的距離。把這個點歸到距離最近的哪個質心。
  3. 根據每個質心所聚集的點,重新更新質心的位置。
  4. 重復2,3,直到前后兩次質心的位置的變化小於一個閾值。

整個變化的過程如果用圖呈現出來會形象很多,下面的圖就是k=2的K-Means的過程:

image

2.2 K值的確定

K-Means算法一般都只有一個超參數,就是K。那我們拿到一個數據后,要吧數據分成幾類呢?我們就來討論下這個問題。

  1. 首先一個具體的問題肯定有它的具體的業務場景,K值需要根據業務場景來定義。
  2. 如果業務場景無法確定K值,我們也有技術手段來找一個合適的K。這個方法就是手肘法。

2.3 手肘法

K-Means算法中每一步都可以計算出loss值又稱為SSE。loss值的計算方式就是每個聚類的點到它們質心的距離的平方。

\[SSE = \sum\limits_{i=1}^k\sum\limits_{x \in C_i} |x-\mu_i|^2 \]

指定一個Max值,即可能的最大類簇數。然后將類簇數K從1開始遞增,一直到Max,計算出Max個SSE。根據數據的潛在模式,當設定的類簇數不斷逼近真實類簇數時,SSE呈現快速下降態勢,而當設定類簇數超過真實類簇數時,SSE也會繼續下降,當下降會迅速趨於緩慢。通過畫出K-SSE曲線,找出下降途中的拐點,即可較好的確定K值。

image

這樣手肘圖的拐點應該是k=4的時候,所以我們可以定k=4的時候聚類效果比較好。

3. K-Means與KNN

初學者很容易把K-Means和KNN搞混,兩者其實差別還是很大的。

K-Means是無監督學習的聚類算法,沒有樣本輸出;而KNN是監督學習的分類算法,有對應的類別輸出。KNN基本不需要訓練,對測試集里面的點,只需要找到在訓練集中最近的k個點,用這最近的k個點的類別來決定測試點的類別。而K-Means則有明顯的訓練過程,找到k個類別的最佳質心,從而決定樣本的簇類別。

當然,兩者也有一些相似點,兩個算法都包含一個過程,即找出和某一個點最近的點。兩者都利用了最近鄰(nearest neighbors)的思想。

4. 總結

K-Means的原理是很簡單,但是我們仔細想想我們處理K-Means的思想好想和別的方法不太一樣。我們是先去猜想我們想要的結果,然后根據這個猜想去優化損失函數,再重新調整我們的猜想,一直重復這兩個過程。

其實這個猜想就是我們要求出的隱藏變量,優化損失函數的過程,就是最大化釋然函數的過程。K-Means的算法就是一個EM算法的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM