
244
|
第
7
章
图 7-5:在 XOM 和 CVX 的股票每日收益数据上使用 K-均值方法得到的簇(簇中心点使用粗黑符号
进行了突出显示)
7.2.2
K-
均值算法
通常,
K-
均值可以应用于有
p
个变量
X
1
,
…
,
X
p
的数据集。要得到
K-
均值的精确解,在计
算上非常困难,但可以使用启发式算法高效地算出一个局部最优解。
在这个算法中,首先需要用户确定
K
的值以及簇均值的一个初始集合,然后按以下步骤进
行迭代。
1.
将每条记录分配给按照距离的平方来测量的最近的簇均值。
2.
基于上面的记录分配,计算出新簇的均值。
当记录与簇的分配关系不再发生变化时,算法收敛。
对于第一次迭代,需要确定一个簇均值的初始集合。一般来说,可以随机地将每条记录分
配给
K
个簇中的一个,然后再算出这些簇的均值。
因为这种算法不能保证找到最优的解决方案,所以建议多次运行该算法,每次使用不同的
随机抽样来对算法进行初始化。进行了多次迭代之后,
K-
均值的结果就可以由具有最小的
簇内平方和的那次迭代给出。
R
函数
kmeans
的
nstart
参数可以指定算法随机启动的次数。例如,以下
R
代码使用
10
个
不同的簇均值启动算法,最后得到
5
个簇:
syms <- c( 'AAPL', 'MSFT', 'CSCO', 'INTC', 'CVX', 'XOM', 'SLB', 'COP',
'JPM', 'WFC', 'USB', 'AXP', 'WMT', 'TGT', 'HD', 'COST')