2.1 kmeans算法要点
(1) $ k $ 值的选择
$ k $ 的选择一般是按照实际需求进行决定,或在实现算法时直接给定 $ k $ 值。
(2) 距离的度量
给定样本 $ x^{(i)} = \lbrace x_1^{(i)},x_2^{(i)},,...,x_n^{(i)}, \rbrace 与 x^{(j)} = \lbrace x_1^{(j)},x_2^{(j)},,...,x_n^{(j)}, \rbrace ,其中 i,j=1,2,...,m,表示样本数,n表示特征数 $ 。距离的度量方法主要分为以下几种:
(2.1)有序属性距离度量(离散属性 $ \lbrace1,2,3 \rbrace $ 或连续属性):
闵可夫斯基距离(Minkowski distance): \[ dist_{mk}(x^{(i)},x^{(j)})=(\sum_{u=1}^n |x_u^{(i)}-x_u^{(j)}|^p)^{\frac{1}{p}} \]
欧氏距离(Euclidean distance),即当 $ p=2 $ 时的闵可夫斯基距离: \[ dist_{ed}(x^{(i)},x^{(j)})=||x^{(i)}-x^{(j)}||_2=\sqrt{\sum_{u=1}^n |x_u^{(i)}-x_u^{(j)}|^2} \]
曼哈顿距离(Manhattan distance),即当 $ p=1 $ 时的闵可夫斯基距离: \[ dist_{man}(x^{(i)},x^{(j)})=||x^{(i)}-x^{(j)}||_1=\sum_{u=1}^n |x_u^{(i)}-x_u^{(j)}| \]
(2.2)无序属性距离度量(比如{飞机,火车,轮船}):
VDM(Value Difference Metric): \[ VDM_p(x_u^{(i)},x_u^{(j)}) = \sum_{z=1}^k \left|\frac{m_{u,x_u^{(i)},z}}{m_{u,x_u^{(i)}}} - \frac{m_{u,x_u^{(j)},z}}{m_{u,x_u^{(j)}}} \right|^p \]
其中 $ m_{u,x_u^{(i)}} $ 表示在属性 $ u $ 上取值为 $ x_u^{(i)} $ 的样本数, $ m_{u,x_u^{(i)},z} $ 表示在第 $ z $ 个样本簇中属性 $ u $ 上取值为 $ x_u^{(i)} $ 的样本数, $ VDM_p(x_u^{(i)},x_u^{(j)}) $ 表示在属性 $ u $ 上两个离散值 $ x_u^{(i)} 与 x_u^{(i)} $ 的 $ VDM $ 距离 。
(2.3)混合属性距离度量,即为有序与无序的结合: \[ MinkovDM_p(x^{(i)},x^{(j)}) = \left( \sum_{u=1}^{n_c} | x_u^{(i)} - x_u^{(j)} | ^p + \sum_{u=n_c +1}^n VDM_p (x_u^{(i)},x_u^{(j)}) \right) ^{\frac{1}{p}} \]
其中含有 $ n_c $ 个有序属性,与 $ n-n_c $ 个无序属性。
本文数据集为连续属性,因此代码中主要以欧式距离进行距离的度量计算。
(3) 更新“簇中心”
对于划分好的各个簇,计算各个簇中的样本点均值,将其均值作为新的簇中心。