標籤:

永不過時的 K 均值演算法

引言

眾所周知,數據挖掘演算法並非十全十美,在某些情況下他們也會失效。 使用 K 均值演算法(K-Means)時就可能會出現這種情況,當然此時你可以嘗試一下另一種方法—— K 中心聚類演算法(K-Medoids),也許效果會更好。

在該網站之前的文章《揭開機器學習的面紗》中,已經指出, K 均值演算法用於聚類時效果良好,而且在數據挖掘和機器學習領域,它也有著重要的地位。Psanchezcri 就曾在他的文章《將 K 均值方法用於金融時序回報率聚類》中,將 K 均值演算法用於分析金融時間序列的趨勢。

然而,即使在網路上有關演算法的文檔浩如煙海的情況下,關於機器學習演算法有時會失效的討論卻並不多見。

因此,本文藉由一個金融案例來反映這個問題。

思路

1)首先,我們在歐洲斯托克600指數的成分股中選擇三組共6隻股票(在三個不同的部門中各選兩隻):

  • 金融部門:

      西班牙畢爾巴鄂比斯開銀行 & 桑坦德銀行

  • 非必需消費品:

      法國酩悅·軒尼詩-路易·威登 & 迪奧
  • 能源部門:

      英國石油公司 & 錫尼什港能源公司

2)搜集數據,並繪出在2013/01/01至2015/12/31期間這六隻股票的價格走勢曲線。如下所示:

3)選擇日回報率作為計算指標,我們算出三組股票序列的相關距離。然後通過距離矩陣降維的方法,在二維歐氏空間中繪出每個點。

結果顯示這六隻股票可以按部門進行分類效果顯著。下圖以藍色菱形點、綠色正方形點、紅色圓點來標記六隻股票,明顯可以按部門分為三類:

4)最後,我們將 K 均值演算法運用於距離矩陣,聚類目標預先設定分成3類。由於 K 均值演算法是從隨機點開始的,每次運行結果可能有所不同,本文我們預先設定運行這個演算法15次,即產生15個結果。當然,我們希望得到聚類結果符合股票所屬部門的實際情況。

結論

1)在約80%的聚類結果中,K 均值聚類演算法取得了理想的結果,聚類結果與這六隻股票所屬部門相符,如下圖所示:

2)在剩下的20%的聚類結果中,演算法則出現了聚類的錯誤。例如,下圖中錯將兩個不同部門的四隻股票聚為一類(圖中藍色菱形點和綠色正方形點),而將同一部門的兩隻股票分為兩類(圖中紅色圓點):

如果我們使用與之思想類似的 K 中心聚類演算法,結果則可以達到100%的正確聚類率。這表明在聚類時,似乎使用重心會比用均值來衡量距離,效果更好。

weixin.qq.com/r/WkMCGqv (二維碼自動識別)

原文鏈接: 「K-Means never fails」, they said…

原文作者:Fjrodriguez2

譯者:Vector
推薦閱讀:

《利用數據改進醫療質量指南》
《R語言實戰》第1,2章 筆記
聯合遊戲陀螺首發|最新電競行業數據報告
obd 數據可以做怎麼樣的數據挖掘?
測試數據集(Test Set) 和驗證數據集 (Validation Set) 之間的區別

TAG:数据分析 |