面向数据规模可扩展的并行优化KMeans算法

如何解决大规模数据聚类的问题?
基于Hadoop Map-Reduce的改进算法,要求较高的硬件资源配置,否则因为Hadoop分布式框架本身的通信,调度开销,甚至会低于单台机器的聚类效率

传统的KMeans算法及背景
NP-Hard问题:NP是指非确定性多项式(non-deterministic polynomial,缩写NP)。所谓的非确定性是指,可用一定数量的运算去解决多项式时间内可解决的问题。

改进的KMeans算法

  1. 将聚类数据预处理为二进制向量块
  2. 按批次读入样本向量到内存更新类中心
    1. 解决因数据规模大而不能运行的问题
    2. 更新类中心过程,各个样本向量同类中心间的计算距离是独立的

基于Canopy预处理的Canopy-Kmeans算法
该算法思想是针对一个数据集,将原始数据集集合List按照一定的规则进行排序

初始化阀值为T1、T2,且T1>T2,在List中随机挑选一个数据向量A,计算A与List中其他样本数据向量之间的距离d,将数据点距离初始中心(d

将数据点距离初始中心的d(T1

再使用KMeans算法对预处理数据进一步处理

缺点:Canopy中心点选取过密容易导致算法陷入局部最优解,其区域半径大小直接影响算法的执行效率和分类准确性,具有较大的盲目性与随机性,并没有从根本上解决初始选值的问题

Spark程序中,数据在处理前,被预先写入内存,由于内存的读取速度远快于磁盘,同时,Spark程序执行过程中使用有向无环图(DAG)的方式,并不计算程序的各个中间结果

Spark在面对海量数据处理时具有运行速度快、容错能力强等优势

Spark计算模型中有两个重要概念:

  1. 弹性分布式数据集(RDD)
  2. DAG 有向无环图

弹性分布式数据集可以在任意RAM中缓存

非均匀采样的KMeans聚类算法

  1. 从数据集总选择一个点作为初始聚类中心,并计算初始代价
  2. 然后启动log fai 次的迭代 目的:根据初始值选择的好坏自动确定本次算法的迭代次数
  3. 距离当前聚类中心越远的数据点被采样的概率越高
  4. 使新聚类中心尽可能远离当前聚类中心

结论:基于Spark的KMeans模型并行是可行的

你可能感兴趣的:(项目分析)