2014-02-07 55 views
1

我對K-Means的工作方式感到迷茫和困惑。我所知道的,到目前爲止是K-Means如何工作?

  1. 情節n個點,說7點
  2. 隨機選擇k個點,說3點,這將作爲重心
  3. 重心將是類的類型,所以我們有3個班
  4. 從所選擇的3將分類點拾取

我已經執行克選取一個點進行分類其類

  • 最近的類設置包含點的文本文件。一旦我選擇一個文件,點將被繪製。現在我停在那裏。

    這是我想知道:

    1.I想知道接下來的事情,我應該繪製點之後,因爲我不知道,我上述的算法做。

    2.我想知道迭代如何工作,獲得每個點的最終類的迭代。我很困惑,因爲我不知道如果從類別最近的點獲得班級,如何選擇更改班級

    任何幫助將不勝感激。

  • +0

    您是否在關注[this](http://nlp.stanford.edu/IR-book/html/htmledition/k-means-1。 HTML)? –

    +0

    這對於java來說究竟是什麼? – mikea

    +0

    @SotiriosDelimanolis我讀過很多關於它的文章,我甚至要求某人向我解釋這個,但我仍然不明白。好網站btw – ThisGuy

    回答

    9

    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

    +0

    你如何確定錯誤? –

    +0

    這是對算法的非常模糊的描述 - 我懷疑它會特別有用。 – Dukeling

    +0

    @SotiriosDelimanolis我補充說明了如何計算錯誤。 – mattnedrich