我對K-Means的工作方式感到迷茫和困惑。我所知道的,到目前爲止是K-Means如何工作?
- 情節n個點,說7點
- 隨機選擇k個點,說3點,這將作爲重心
- 重心將是類的類型,所以我們有3個班
- 從所選擇的3將分類點拾取
我已經執行克選取一個點進行分類其類
這是我想知道:
1.I想知道接下來的事情,我應該繪製點之後,因爲我不知道,我上述的算法做。
2.我想知道迭代如何工作,獲得每個點的最終類的迭代。我很困惑,因爲我不知道如果從類別最近的點獲得班級,如何選擇更改班級
任何幫助將不勝感激。
我對K-Means的工作方式感到迷茫和困惑。我所知道的,到目前爲止是K-Means如何工作?
我已經執行克選取一個點進行分類其類
這是我想知道:
1.I想知道接下來的事情,我應該繪製點之後,因爲我不知道,我上述的算法做。
2.我想知道迭代如何工作,獲得每個點的最終類的迭代。我很困惑,因爲我不知道如果從類別最近的點獲得班級,如何選擇更改班級
任何幫助將不勝感激。
K-Means的輸入是一組點(觀察值)和一個整數K.目標是將輸入點劃分爲K個不同的集合(集羣)。
第一步是通過選擇K初始集羣質心位置來初始化算法。這通常通過從輸入集合中隨機選擇K個點來完成。與這些初始k-質心,則算法前進通過重複以下兩個主要步驟:
1)集羣分配 - 在這裏,每個觀測(例如,在該數據集合中的每個點)被分配給一個集羣的質心,使得WCSS目標函數被最小化。這通常可以轉化爲將每個觀察值分配給最近的羣集質心(其恰巧使很多距離度量的WCSS最小化),但對於某些距離度量和空間而言,情況並非如此。
2)更新質心 - 將所有輸入觀察值都分配到聚類質心後,重新計算每個質心。對於每個簇,新的質心通過對分配給它的觀測值進行平均來計算(例如,計算觀測值的「均值」)。
重複這些步驟直到算法「收斂」。有幾種方法可以檢測收斂。最典型的方式是運行,直到沒有觀察結果改變集羣成員。作爲附加提示,如果您爲每次迭代計算WCSS(如下所述),則應該看到它降低(例如,算法運行時誤差應該變小)。如果沒有,你的實現可能有一個錯誤。
瞭解K-Means因在當地最低限度卡住而臭名昭着也很重要。這意味着最終的結果可能不是最好的結果。爲了克服這個問題,K-Means經常運行多次,不同的起點(初始質心),選擇錯誤率最低的運行。
羣內平方和(WCSS)用於測量誤差(在維基百科上有解釋:http://en.wikipedia.org/wiki/K-means_clustering)。 WCSS被計算爲
totalError = 0;
foreach(Point p in inputData)
{
// compute p's error
pError = someDistanceFunc(p, p_centroid)^2
totalError += pError;
}
從本質上講,每一個點,你計算基於它是如何接近它的質心的誤差測量。所有這些錯誤都加起來計算總誤差。
在互聯網上有很多K-Means信息可用。對於更深入的描述,我推薦Andrew Ng的Coursera講座: http://www.youtube.com/watch?v=Ao2vnhelKhI
你如何確定錯誤? –
這是對算法的非常模糊的描述 - 我懷疑它會特別有用。 – Dukeling
@SotiriosDelimanolis我補充說明了如何計算錯誤。 – mattnedrich
您是否在關注[this](http://nlp.stanford.edu/IR-book/html/htmledition/k-means-1。 HTML)? –
這對於java來說究竟是什麼? – mikea
@SotiriosDelimanolis我讀過很多關於它的文章,我甚至要求某人向我解釋這個,但我仍然不明白。好網站btw – ThisGuy