引言
众所周知,数据挖掘算法并非十全十美,在某些情况下他们也会失效。 使用 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%的正确聚类率。这表明在聚类时,似乎使用重心会比用均值来衡量距离,效果更好。
原文链接:
http://quantdare.com/2016/04/k-means-vs-k-medoids/
原文作者:Fjrodriguez2
译者:Vector