假設有下面這樣乙個資料集,想要對其中的資料進行分類,分為兩個聚類。例如
k-means演算法是個迭代演算法,其迭代過程分為兩步:聚類分配和中心移動。首先隨機生成兩個點,即聚類中心,如下圖所示。
然後開始演算法的迭代過程:
(1)首先進行聚類分配,遍歷所有樣本,按照樣本與兩個聚類中心的距離大小來將每個樣本分配給兩個聚類中心。即把樣本分配到離他最近的那個聚類中心。
(2)然後進行聚類中心的移動。計算出同類所有資料的均值,然後將該類資料的聚類中心移動到那個均值上。
然後重複(1)和(2),直到聚類中心不再變化,這時就產生了最後的分類結果。如下圖所示:
首先定義三個符號:
其中第一行是優化目標,1/m乘以每個樣本與其聚類中心聚類的平方的總和。k-means演算法的目標就是要找到合適的
事實上,k-means演算法迭代過程的第一步聚類分配,是在通過選擇
假設演算法要將資料分為k個聚類,那麼首先在訓練集中隨機選取k個點作為聚類中心,但是這樣可能會出現區域性最優解的問題。如下圖所示:
此時只能通過多次初始化,得到多個不同的c引數和μ引數,再從中選取效果最好的那個,即選出代價函式值最小的那個。在聚類數較小時,多次初始化的效果更佳。
聚類數量有時是很難確定的,例如下面這個例子:
這個訓練集可以被分為4個聚類,也可以被分為2個聚類,所以有時聚類數量並沒有標準答案。
但有乙個肘部法則,可以幫助我們在選擇盡量好的聚類數量。對於乙個資料集,我們設定聚類數量為1,2,3…,8,9,10,並分別求出這些聚類數量所對應的代價值,然後可能得到下圖這種曲線:
曲線中那個趨勢變化最明顯的點就是「肘部」,那麼我們就可以選擇肘部這個點來作為聚類數量。但在實際情況中,我們很難得到這樣的曲線,可能得到的曲線是非常模糊的,相鄰兩點間的差別也很小,這是肘部法則就很難應用了。
在我們應用k-means演算法進行資料聚類時,往往會用這些分類後的資料進行下一步工作,那麼最好的方法就是根據下一步工作的需要來選取聚類數量。
K means演算法簡介
k means 演算法是無監督的 聚類演算法,演算法簡單,有效。指定聚類數目 k,訓練集 x k 個聚類 k means 演算法 是乙個 迭代演算法,每次迭代分成兩個步驟 1 指定聚類步驟 計算每個樣本到 k 個 聚類中心的 距離,將樣本歸類到 距離 聚類中心 最小的那個類別 2 移動聚類中心步驟 ...
聚類演算法 K Means 簡介與入門
k means 演算法是最簡單的一種聚類演算法,屬於無監督學習演算法。聚類和分類最大的不同在於 分類的目標是事先已知的,而聚類則不一樣,聚類事先不知道目標變數是什麼,類別沒有像分類那樣被預先定義出來。假設我們的樣本是 每個 x i r n,即它是乙個維向量。現在使用者給定乙個 k 值,要求將樣本聚類...
k means演算法不足
a.k 不確定 對於初始條件和聚類的個數 k 並沒有乙個標準的方法來給定。初始條件不同會對結果產生比較大的影響,因為有時演算法會跳入區域性最優。所以解決方法之一,就是多次執行演算法,隨機分割,比較結果之間的差異。b.區域性最優 如果要達到全域性最優,需要用到其他一些技術,比如模擬退火或者遺傳演算法等...