1 K-mean
1.1 K-mean要做什么
- 根据要分成几类随机初始化几个点,称为聚类中心 。 而类别在聚类问题中称为簇
- 将样本根据与1中初始化点的距离远近进行归类
- 将代表类别的各聚类中心移到所属他们样本点的均值处
- 重复前三个步骤,直到聚类中心不再改变位置,此时我们称K-mean已经聚合了
1.2算法过程
###1.2.1 input:
- K(number of clusters)
- Training set {x1,x2,x3,x4…xm} 每个向量必须是同一维度
###1.2.2 Output:
-
随机初始化 μ 1 … … μ K \mu_1 ……\mu_K μ1……μK
-
for i = 1 to m c i : = m i n k ∣ ∣ x i − μ k ∣ ∣ 2 c^i := min^k||x^i- \mu_k||^2 ci:=mink∣∣xi−μk∣∣2
-
for k= 1 to K μ k : = 此 簇 中 所 有 样 本 的 均 值 \mu_k:=此簇中所有样本的均值 μk:=此簇中所有样本的均值
故最后某点 x i x_i xi所属的簇称为 μ c i \mu_{c^i} μci
###1.2.3 Cost Function:
J ( c 1 , . . . . , c m , μ 1 … . , μ K ) = 1 m ∑ 1 m ∣ ∣ x i − μ c i ∣ ∣ 2 J(c^1,....,c^m,\mu_1….,\mu_K)=\cfrac{1}{m}\sum_1^m||x^i-\mu_{c^i}||^2 J(c1,....,cm,μ1….,μK)=m11∑m∣∣xi−μci∣∣2 失真代价函数(distortion)
找出 m i n J min J minJ 的 c 1 − c m 和 μ 1 − μ K c^1-c^m和\mu_1-\mu_K c1−cm和μ1−μK .
数 学 证 明 可 证 明 2 过 程 中 两 个 f o r 循 环 实 际 上 就 是 在 选 择 c 和 μ 来 m i n i m i z e 损 失 函 数 J 数学证明可证明2过程中两个for循环实际上就是在选择c和\mu来minimize 损失函数J 数学证明可证明2过程中两个for循环实际上就是在选择c和μ来minimize损失函数J
1.3 Tricks
1.3.1 随机初始化方法
- 首先确认K是否小于样本数m,为了下面的选择
- 随机地选择K个训练样本
- 令 μ 1 , . . . , μ K \mu_1,...,\mu_K μ1,...,μK等于2中选到的K个样本。
1.3.2 局部最优的解决办法
由于聚类中心随机初始化的随机性,聚类最终有可能会得到局部最优解,通常的解决方案是随机初始化50-1000次,运行50-1000次K-mean,然后选择Cost Function最小的那一种结果。
这种方法更适用于K取值较小时(如2-10次),当K取值较大时,随机初始化不会有太大的改善效果。这是因为K值较大时,往往没那么容易取到局部最优。
1.3.3 选择聚类数量K
1. 通常我们会使用肘部法则(Elbow method)
我们取K为1,2,3,…并计算其代价函数J,如果得到下图所示的数据,那么K=3就是我们需要的K值了,因为K取3时,J在这里有个明显的转折点,很像人的肘部。
在实际过程中,得到的数据可能是如下图的曲线,那么Elbow method就不太管用了。
- 实际情况中,应该根据实际需要的情况选择K值。如我们要将一万件T恤衫的尺寸数据聚类,我们想分成xs,s,m,l,xl五个尺码,那么就选择K=5.
1.4 总结
K-mean是无监督学习的代表算法,优点有模型简单、参数少、收敛速度也还不错。但缺点是非凸函数容易造成局部最优的问题,K值的选取难以把握。