本文基于《X-means》和《BIC-notes》(原论文中BIC公式有误,这是对BIC的补充)

K-means的缺点
  • 每一轮迭代的计算花费大
  • 需要用户指定K
  • 易于收敛到局部最优解
X-means的改进
  • 使用kd-tree加速原K-means的每一轮迭代
  • 用户指定K所属的范围,根据BIC score选到最优K
  • 每一轮迭代只进行2-means(2-means对局部最优解不敏感

X-means算法步骤

  • 用户输入 \(k\_{min},k\_{max}\),数据集 \(D\)
  1. 运行\(K_{min}\)-means
  2. 在每个聚类上,运行2-means
    根据BIC score(只在该聚类上计算,即只计算本聚类数据只分成1类和两类时的BIC score)决定是否二分聚类
  3. 如果\(K<K_{max}\),继续进行步骤2,否则返回结果
  • 样例
  1. 首先将\(D\)分成3个聚类
  2. 再将每个子聚类分成2个聚类
    计算BIC score决定是否二分

BIC score(Bayesian Information Criterion)

  • \(BIC(\phi)=\hat{l_{\phi}}(D)-\frac{p_{\phi}}{2}\cdot log\ R\)
    其中\(\phi\)表示模型,\(\hat{l_{\phi}}(D)\)为likelihood,\(p_{\phi}\)为模型的复杂度(自由参数个数)
  • X-means的假设:identical spherical assumption
    数据由X个高斯函数残生,每个高斯函数有一样的方差\(\sigma\)(每个维度上的变量不相关,协方差矩阵为\(diag(\sigma)\))、不同的\(\mu_i\);
    数据生成时,根据概率\(p_i\)选择一个高斯函数\(g_i\),然后生成一个点
    所以似然函数为:
    \(l_{\phi}(D) = \sum_{i=1}^R [log\ p(g_{(i)})+log\ p(x_i)]\)
    其中\(p(g_{(i)})\)为生成点\(x_i\)的高斯函数被选到的概率
  • 计算BIC,需要计算最大化的\(\hat{l_{\phi}}(D)\),所以需要对参数进行估计
    \(p(g_k)=\frac{R_k}{R}\)
    \(\sigma^2=\frac{1}{MR}\sum_{k=1}^{K}\sum_{x_i\in D_k}{\left\|x_i-\mu_k\right\|}^2\)
    文中使用无偏估计,即\(\sigma^2=\frac{1}{M(R-K)}\sum_{k=1}^{K}\sum_{x_i\in D_k}{\left\|x_i-\mu_k\right\|}^2\)
  • \(p_{\phi}\)自由参数个数
    K-1个高斯函数选择到的概率,MK 个每个高斯函数每个维度上的mean,1个方差
    所以\(p_{\phi}=(M+1)K\)

KD-tree加速K-means

最新文章

  1. 设置Form窗体中的控件的属性
  2. knockoutjs中使用mapping插件绑定数据列表
  3. LNMP源码安装
  4. java 异常处理 Throwable Error 和Exception
  5. Sqlite中使用rowid来表示行号,用于分页。
  6. linux自己带的apache重新启动
  7. hdoj 3665 Seaside【最短路】
  8. 针对苹果最新审核要求:应用兼容IPv6
  9. Git使用笔记(一)
  10. android自定义viewgroup初步之一----抽屉菜单
  11. C#判断远程计算机的指定端口是否打开的代码
  12. js列表添加内容清除内容,时钟
  13. 批量查杀该死的VBscript “svchost.exe” 脚本挂马
  14. 修复svn hook导致的字符集错误
  15. 线程的使用方法start run sleep join
  16. windows 常用dos命令
  17. as3 文本竖排效果实现
  18. python yaml文件读写
  19. JUC中Executor基本知识
  20. Win8.1下运行环境/配置问题解决方案总结

热门文章

  1. css3的transition效果和transfor效果
  2. UVA_埃及分数(Hard Version) UVA 12588
  3. 操作系统基本概念(内核态与用户态、操作系统结构)-by sixleaves
  4. C++ classics
  5. 如何把apache和nginx 加入到系统服务,用service 命令来控制启动、停止
  6. hibernate Restrictions用法
  7. Red and Black(简单dfs)
  8. WIN7 64位系统安装JDK并配置环境变量
  9. android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题
  10. 转:Xshell显示找不到匹配的outgoing encryption算法怎么办