
无监督学习
|
201
7.2.2
K
-Means
算法
K
-Means
算法同样可以应用于具有
p
个变量
(
X
1
,
…
,
X
p
)
的数据集。要让
K
-Means
给出精确
解,计算难度很大,但启发式算法可以高效地计算出局部最优解。
在算法开始时,用户需要指定
K
值和一组初始的类均值,然后重复执行以下步骤。
(1)
根据距离的平方值,将每条记录分配给最近的类均值所在的类。
(2)
根据记录的分配情况,重新计算新的类均值。
一旦记录到类的分配情况不再改变,该算法就收敛。
在开始首次迭代前,需要指定一组初始的类均值。一般做法是将每个记录随机分配给
K
个
类中的一个,然后计算类均值。
由于该算法并不保证能给出最优解,所以推荐做法是在初始化时使用不同的随机样本多次
运行算法。当使用了多组迭代时,
K
-Means
的结果由类内平方和最低的一组迭代给出。
可以通过设置
R
函数 kmeans 的 nstart 参数,指定随机启动初始化的尝试次数。例如,下
面的代码使用
10
个不同的初始类均值运行
K
-Means
,以找出
5
个类。
syms <- c( 'AAPL', 'MSFT', 'CSCO', 'INTC', 'CVX', 'XOM', 'SLB', 'COP',
'JPM', 'WFC', 'USB', 'AXP', 'WMT', 'TGT', 'HD', 'COST')
df <- sp500_px[row.names(sp500_px)>='2011-01-01', syms]
km <- kmeans(df, centers=5, nstart=10) ...