二分K-Means无监督学习实现


Main

第一步,对dataframe进行过滤.

第二步,对数据类型进行分类

第三步,构建模型,添加列

第四步,过滤出对应类型的DF,然后进行二分类计算

实现二分K-Means

静态变量

簇列:

scala
val clusterList:mutable.ListBuffer[DataFrame] = ListBufferDataFrame


参数:

  1. 簇表(mutable.Map[Double,DataFrame])(key: SSE,value:DF)
  2. 当前需要进行二分的DF(DataFrame)(簇表中SSE最大的DF)
  3. 需求分类数(不一定会分到这么多,如果所有簇的SSE都为0,即簇表为空,则可能中途结束分类)
  4. 基本K-Means算法最大迭代数(默认值为2)
  5. 迭代标记(默认值为1)

实现思路:

最大迭代数 = 需求分类数 - 1

case when 当迭代标记 <= 最大迭代数

  1. 删除列 e.g predction

  2. 使用基本K-Means算法,将该簇分为为两个簇,得到模型

  3. 将模型转为DF

  4. 根据prediciton将模型分为两个DF,放入list: ListBuffer

  5. 遍历list,计算每一个DF的SSE

    1. 如果 SSE == 0.0,则直接将该DF放入簇列clusterList中
    2. 否则:
      1. 判断簇表中时候包含该SSE的key,包含则给该SSE添加随机数以区分
      2. 将数据添加到簇表
  6. 判断簇表时候为空

    1. 为空,结束循环,使其进入处理阶段
    2. 获取簇表中最大SSE的对应DF,继续二分类计算.

case when 当迭代标记 > 最大迭代数,

  1. 将簇表中的元素放入簇列(mutable.ListBuffer[DataFrame])中
  2. 遍历簇列,将predection的值进行修改
  3. select md5对id进行加密作为rowKey字段,predection字段
  4. 结果写入hbase

文章作者: tzkTangXS
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 tzkTangXS !
  目录