永不過時的 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%的聚類結果中,演算法則出現了聚類的錯誤。例如,下圖中錯將兩個不同部門的四隻股票聚為一類(圖中藍色菱形點和綠色正方形點),而將同一部門的兩隻股票分為兩類(圖中紅色圓點):http://weixin.qq.com/r/WkMCGqvEoPbfre959xZI (二維碼自動識別)
原文鏈接: 「K-Means never fails」, they said…原文作者:Fjrodriguez2
譯者:Vector推薦閱讀:
※《利用數據改進醫療質量指南》
※《R語言實戰》第1,2章 筆記
※聯合遊戲陀螺首發|最新電競行業數據報告
※obd 數據可以做怎麼樣的數據挖掘?
※測試數據集(Test Set) 和驗證數據集 (Validation Set) 之間的區別
TAG:数据分析 |