聚类算法是一种无监督学习任务,用于将对象分到具有高度相似性的聚类中,聚类算法的思想简单的说就是物以类聚的思想,相同性质的点在空间中表现的较为紧密和接近,主要用于数据探索与异常检测,最常用的一种聚类算法是K均值(K-means)聚类算法

算法原理
kmeans的计算方法如下:
1 选取k个中心点
2 遍历所有数据,将每个数据划分到最近的中心点中
3 计算每个聚类的平均值,并作为新的中心点
4 重复2-3,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代

算法的时间复杂度上界为O(n*k*t), 其中k为输入的聚类个数,n为数据量,t为迭代次数。一般t,k,n均可认为是常量,时间和空间复杂度可以简化为O(n),即线性的

spark ml编码实践

可在spark-shell环境下修改参数调试以下代码,可以用实际的业务数据做测试评估,业务数据一般是多列,可以把维度列用VectorAssembler组装成向量列做为Kmeans算法的输入列,考虑现实的应用场景,比如做异常数据检测,正常数据分为一类,异常数据分为几类,分别统计正常数据与异常数据的数据量,求百分比等

<span style="font-size:18px;">import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectorsval dataset = sqlContext.createDataFrame(Seq(
(1, Vectors.dense(0.0, 0.0, 0.0)),
(2, Vectors.dense(0.1, 0.1, 0.1)),
(3, Vectors.dense(0.2, 0.2, 0.2)),
(4, Vectors.dense(9.0, 9.0, 9.0)),
(5, Vectors.dense(1.1, 1.1, 0.1)),
(6, Vectors.dense(12, 14, 100)),
(6, Vectors.dense(1.1, 0.1, 0.2)),
(6, Vectors.dense(-2, -3, -4)),
(6, Vectors.dense(1.6, 0.6, 0.2))
)).toDF("id", "features")// Trains a k-means model
val kmeans = new KMeans().setK(3).setMaxIter(20).setFeaturesCol("features").setPredictionCol("prediction")
val model = kmeans.fit(dataset)// Shows the result
println("Final Centers: ")
model.clusterCenters.foreach(println)
model.clusterCenters.zipWithIndex.foreach(println)val myres = model.transform(dataset).select("features","prediction")
myres.show()</span>

聚类算法是一类无监督式机器学习算法,聚类效果怎么评估,模型训练参数怎么调优,是否能用管道来训练模型来比较各种不同组合的参数的效果,即网格搜索法(grid search),先设置好待测试的参数,MLLib就会自动完成这些参数的不同组合,管道搭建了一条工作流,一次性完成了整个模型的调优,而不是独立对每个参数进行调优,这个还要再确认一下,查看SPARK-14516好像目前还没有一个聚类效果通用的自动的度量方法
像这种代码(不过现在这个代码有问题):

<span style="font-size:18px;">import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.ml.tuning.{ ParamGridBuilder, CrossValidator }
import org.apache.spark.ml.{ Pipeline, PipelineStage }val dataset = sqlContext.createDataFrame(Seq(
(1, Vectors.dense(0.0, 0.0, 0.0)),
(2, Vectors.dense(0.1, 0.1, 0.1)),
(3, Vectors.dense(0.2, 0.2, 0.2)),
(4, Vectors.dense(9.0, 9.0, 9.0)),
(5, Vectors.dense(1.1, 1.1, 0.1)),
(6, Vectors.dense(12, 14, 100)),
(6, Vectors.dense(1.1, 0.1, 0.2)),
(6, Vectors.dense(-2, -3, -4)),
(6, Vectors.dense(1.6, 0.6, 0.2))
)).toDF("id", "features")val kmeans = new KMeans().setK(2).setMaxIter(20).setFeaturesCol("features").setPredictionCol("prediction")
//主要问题在这里,没有可用的评估器与label列设置
val evaluator = new BinaryClassificationEvaluator().setLabelCol("prediction")
val paramGrid = new ParamGridBuilder().addGrid(kmeans.initMode, Array("random")).addGrid(kmeans.k, Array(3, 4)).addGrid(kmeans.maxIter, Array(20, 60)).addGrid(kmeans.seed, Array(1L, 2L)).build()
val steps: Array[PipelineStage] = Array(kmeans)
val pipeline = new Pipeline().setStages(steps)val cv = new CrossValidator().setEstimator(pipeline).setEvaluator(evaluator).setEstimatorParamMaps(paramGrid).setNumFolds(10)
// Trains a model
val pipelineFittedModel = cv.fit(dataset)</span>

spark机器学习-聚类相关推荐

  1. 基于大数据的Uber数据实时监控(Part 1:Spark机器学习)

    导言 据Gartner称:到2020年,25亿辆联网汽车将成为物联网的主要对象.联网车辆预计每小时可以生成25GB的数据,对这些数据进行分析实现实时监控.大数据目前是10个主要领域之一,利用它可以使城 ...

  2. Spark机器学习9· 实时机器学习(scala with sbt)

    Spark机器学习 1 在线学习 模型随着接收的新消息,不断更新自己:而不是像离线训练一次次重新训练. 2 Spark Streaming 离散化流(DStream) 输入源:Akka actors. ...

  3. Spark机器学习库(MLlib)指南

    spark-1.6.1 机器学习库(MLlib)指南 MLlib是Spark的机器学习(ML)库.旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib由一些通用的学习算法和工具组成,包括分 ...

  4. Spark机器学习实战 (十二) - 推荐系统实战

    0 相关源码 将结合前述知识进行综合实战,以达到所学即所用.在推荐系统项目中,讲解了推荐系统基本原理以及实现推荐系统的架构思路,有其他相关研发经验基础的同学可以结合以往的经验,实现自己的推荐系统. 1 ...

  5. 《Spark机器学习》通读

    title: <Spark机器学习>通读 date: 2019-09-18 17:20:35 categories: 技术 tags: 整理 最近,花了三天时间通读了Nick Pentre ...

  6. 手把手带你玩转Spark机器学习-使用Spark构建回归模型

    系列文章目录 手把手带你玩转Spark机器学习-专栏介绍 手把手带你玩转Spark机器学习-问题汇总 手把手带你玩转Spark机器学习-Spark的安装及使用 手把手带你玩转Spark机器学习-使用S ...

  7. 手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换

    系列文章目录 手把手带你玩转Spark机器学习-专栏介绍 手把手带你玩转Spark机器学习-问题汇总 手把手带你玩转Spark机器学习-Spark的安装及使用 手把手带你玩转Spark机器学习-使用S ...

  8. Apache Spark机器学习

    推荐电子书:Apache Spark 2.x入门 - 从入门到制作 前言: 使用Apache Spark 2.0及更高版本,实现了很大的改进,使Spark更容易编程和执行更快: Spark SQL和D ...

  9. 《Spark机器学习》-笔记(持续更新)

    目录 概述 环境准备 搭建Spark项目的代码工程 创建maven项目工程 创建scala测试类 整合spark环境 机器学习基础知识 机器学习流程 机器学习模型的分类 评估模型效果的指标 分类算法模 ...

最新文章

  1. 【转】关于Apache与Nginx的优势比较
  2. hyperopt中文文档:Scipy2013
  3. Spring Cloud/Dubbo 应用无缝迁移到 Serverless 架构
  4. 2018-2019 20165227《信息安全系统设计基础》第三周学习总结
  5. java 字符串缓冲池 String缓冲池
  6. javascript --- 非交互、交互、协作、任务
  7. Java查看字节码工具
  8. bzoj1024 [SCOI2009]生日快乐 结论+dfs
  9. win10电脑ip地址怎么设置?几步就能学会
  10. python新手常犯的17个错误
  11. hibernate(二)annotation第一个示例
  12. 【图像目标检测】电力图像数据集:电力巡检智能缺陷检测(有下载链接)
  13. hadoop2.6.0 - eclipse插件下载、编译、安装、配置
  14. 怎样使用WP Review Pro插件?
  15. [转] 浅谈视频基础知识、视频编码、压制
  16. [内附完整源码和文档] 基于VS2013实现的弹弹堂小游戏
  17. 手机视频监控解决方案(客户端)
  18. 微博做内容和收入来源
  19. python随机库函数_python标准库中的随机分布函数
  20. 论坛数据库设计与性能优化

热门文章

  1. BO与BW的权限角色映射
  2. idea中的backspace无法使用的问题
  3. c 访问mysql 乱码_c语言连接mysql中文乱码怎么办
  4. nginx部署dist包
  5. 打扮家能否将齐家网变成过去时?
  6. uni-app渲染Markdown之Towxml
  7. SAXReader 获取指定值
  8. 【精荐一】山地车变速器调整;变速异响(变速不到位)调节方法
  9. 微信小程序自制轮播图(仿京粉轮播)
  10. 投中观点:在线视频平台创造视频行业B2B盈利新模式