本文基于《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

[x-means] 1.x-means简介的更多相关文章

  1. linux命令getopts

    一.getopts 简介 由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为: getopts options va ...

  2. <airsim文档学习> Street View Image, Pose, and 3D Cities Dataset

    原文地址:  https://github.com/amir32002/3D_Street_View 说明:个人学习笔记,翻译整理自github/airsim. 简介 该存储库共享包含6DOF相机姿态 ...

  3. JavaScript 日期权威指南

    简介 JavaScript通过强大的对象为我们提供日期处理功能:日期. 本文确实_不是_谈论 Moment.js ,我认为它是处理日期的最佳库,你应该在处理日期时几乎总是使用它. Date对象 Dat ...

  4. MS4W安装教程

    简介 欢迎使用MS4W,这是由Gateway Geomatics开发的快速简便的安装程序,用于为Windows及其附带应用程序(如Geomoose.MapBender.Openlayers等)设置Ma ...

  5. 【4】蛋白质组学鉴定软件之MSGFPlus

    目录 1.简介 2.安装运行 3.结果 1.简介 MSGF+也是近年来应用得比较多的蛋白鉴定软件.java写的,2008年初次发表JPR,2014年升级发表NC,免费开源,持续更新维护,良心软件.而且 ...

  6. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  7. 恢复SQL Server被误删除的数据

    恢复SQL Server被误删除的数据 <恢复SQL Server被误删除的数据(再扩展)> 地址:http://www.cnblogs.com/lyhabc/p/4620764.html ...

  8. 数据库中数据DELETE了怎样恢复

    USE [BBDAS_FP_DATA] GO /****** Object: StoredProcedure [dbo].[Recover_Deleted_Data_Proc] Script Date ...

  9. Linux File Recovery Study

    Background Today I did stupid things that I went into the ~/Downloads/ and pressed [Alt] + [A] then ...

  10. Python2.7.6标准库内建函数

        Built-in Functions     abs() divmod() input() open() staticmethod() all() enumerate() int() ord( ...

随机推荐

  1. HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查

    转自: http://blog.csdn.net/shootyou/article/details/6615051 今天解决了一个HttpClient的异常,汗啊,一个HttpClient使用稍有不慎 ...

  2. 一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

    转:http://tivan.iteye.com/blog/1487855 前言 在平时开发.测试过程中.甚至是生产环境中,有时会遇到OutOfMemoryError,Java堆溢出了,这表明程序有严 ...

  3. nginx监听端口和反向代理端口的权限问题

    Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口 ...

  4. javadoc 生成帮助文档时,注意以下几点

    参考:http://www.w3school.com.cn/tags/tag_pre.asp javadoc 生成帮助文档时,注意以下几点: 1.函数功能描述的结尾一定要有句号,英文句号或中文句号均可 ...

  5. 徐汉彬:亿级Web系统搭建—单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  6. 总结一下用caffe跑图片数据的研究流程

    近期在用caffe玩一些数据集,这些数据集是从淘宝爬下来的图片.主要是想研究一下对女性衣服的分类. 以下是一些详细的操作流程,这里总结一下. 1 爬取数据.写爬虫从淘宝爬取自己须要的数据. 2 数据预 ...

  7. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...

  8. H5页面之iphone6的适配

    兼容iphone各版本机型最佳的方式就是自适应. 1.viewport 简单粗暴的方式: 1 <meta name="viewport" content="widt ...

  9. mysql密码忘记如何处理

    1,修改/etc/my.cnf添加添加skip-grant参数,重启mysql. 2,登录mysql  mysql -uroot 3, 更新user中root的密码  use mysql;   upd ...

  10. 【Java基础】构造方法调用构造方法

    从一个程序开始: class dog { private String name; private String color; private int age; dog(String name) // ...