K值聚类的时候,需要自己指定cluster的数目。

这个cluster数目一般是通过canopy算法进行预处理来确定的。

canopy具体描述可以参考这里

下面是 golang语言的一个实现(对经纬度距离计算进行cluster)。

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8. const (
  9. EARTH_RADIUS =
  10. )
  11.  
  12. type Point struct {
  13. lat float64
  14. lng float64
  15. }
  16.  
  17. func Pop(points []Point) (p Point, newPoints []Point) {
  18. if len(points) > {
  19. p = points[]
  20. newPoints = points[:]
  21. }
  22. return
  23. }
  24.  
  25. func Push(p Point, points []Point) []Point {
  26. points = append(points, p)
  27. return points
  28. }
  29.  
  30. // Calculates the Haversine distance between two points in kilometers.
  31. // Original Implementation from: http://www.movable-type.co.uk/scripts/latlong.html
  32. func GreatCircleDistance(p1, p2 Point) float64 {
  33. dLat := (p2.lat - p1.lat) * (math.Pi / 180.0)
  34. dLon := (p2.lng - p1.lng) * (math.Pi / 180.0)
  35.  
  36. lat1 := p1.lat * (math.Pi / 180.0)
  37. lat2 := p2.lat * (math.Pi / 180.0)
  38.  
  39. a1 := math.Sin(dLat/) * math.Sin(dLat/)
  40. a2 := math.Sin(dLon/) * math.Sin(dLon/) * math.Cos(lat1) * math.Cos(lat2)
  41.  
  42. a := a1 + a2
  43.  
  44. c := * math.Atan2(math.Sqrt(a), math.Sqrt(-a))
  45. return EARTH_RADIUS * c
  46. }
  47.  
  48. /*
  49. while(没有标记的数据点){
  50. 选择一个没有强标记的数据点p
  51. 把p看作一个新Canopy c的中心
  52. 离p距离<x1的所有点都认为在c中,给这些点做上弱标记 //纳入canopy,有可能会纳入其它canopy
  53. 离p距离<x2的所有点都认为在c中,给这些点做上强标记 //不会再纳入其它canopy
  54. }
  55. */
  56.  
  57. //目前只实现了经纬度以及经纬度的距离计算,这里可以是一个向量
  58. func CanopyCluster(points []Point, x1, x2 float64) {
  59. var tmp []Point
  60. var cluster [][]Point
  61.  
  62. for len(points) > {
  63. var center Point
  64. center, points = Pop(points)
  65. index := len(cluster)
  66. var cpList []Point
  67. cpList = append(cpList, center)
  68. cluster = append(cluster, cpList)
  69. var cur Point
  70. for len(points) > {
  71. cur, points = Pop(points)
  72. distance := GreatCircleDistance(center, cur)
  73. if distance <= x1 {
  74. cluster[index] = append(cluster[index], cur)
  75. if distance > x2 {
  76. tmp = Push(cur, tmp)
  77. }
  78. } else {
  79. tmp = Push(cur, tmp)
  80. }
  81. }
  82. fmt.Printf("current number of items in this canopy %d\n", center)
  83. var t []Point
  84. points = tmp
  85. tmp = t
  86. }
  87. for k, c := range cluster {
  88. fmt.Println("canopy", k, "has", len(c), "items:")
  89. for _, v := range c {
  90. fmt.Println("\t", v.lat, v.lng)
  91. }
  92. }
  93. }
  94.  
  95. func main() {
  96. pointsList := []Point{
  97. {34.28637, -110.12059},
  98. {34.28638, -110.1206},
  99. {34.29077, -110.12078},
  100. {34.29111, -110.11941},
  101. {34.29113, -110.11938},
  102. {34.29116, -110.1194},
  103. {34.29145, -110.12043},
  104. {34.29146, -110.12063},
  105. {34.29154, -110.11873},
  106. {34.3141, -110.11556},
  107. {34.31411, -110.11557},
  108. {34.31411, -110.11556},
  109. {34.31412, -110.11556},
  110. {34.31412, -110.11557},
  111. {34.31415, -110.11552},
  112. {34.31415, -110.11556},
  113. }
  114. CanopyCluster(pointsList, 1.0, 0.8)
  115. }

对需要聚类的数据使用canopy做初步的计算的更多相关文章

  1. 抓取摩拜单车API数据,并做可视化分析

    抓取摩拜单车API数据,并做可视化分析 纵聊天下 百家号|04-19 15:16 关注 警告:此篇文章仅作为学习研究参考用途,请不要用于非法目的. 摩拜是最早进入成都的共享单车,每天我从地铁站下来的时 ...

  2. 领导满意,客户喜欢的数据报表怎么做,交给Smartbi!

    财务分析是以会计核算和报表资料及其他相关资料为依据,采用一系列专门的分析技术和方法,对企业等经济组织过去和现在有关筹资活动.投资活动.经营活动.分配活动的盈利能力.营运能力.偿债能力和增长能力状况等进 ...

  3. 从 Hadoop 到云原生, 大数据平台如何做存算分离

    Hadoop 的诞生改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变:随着云计算时代的到来, 存算分离的架构受到青睐,企业开开始对 Hado ...

  4. Java中浮点型数据Float和Double进行精确计算的问题

    Java中浮点型数据Float和Double进行精确计算的问题 来源  https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失     ...

  5. 斯坦福机器学习视频笔记 Week8 无监督学习:聚类与数据降维 Clusting & Dimensionality Reduction

    监督学习算法需要标记的样本(x,y),但是无监督学习算法只需要input(x). 您将了解聚类 - 用于市场分割,文本摘要,以及许多其他应用程序. Principal Components Analy ...

  6. 关于淘宝的数据来源,针对做淘宝客网站的淘宝api调用方法

    上次写了个淘宝返利模式的博客,直接被移除首页,不知道何故啊.可能是真的跟技术不太刮边. 众所周知,能够支撑一个网站运营的最基础不是程序写的多么好.也不是有多么牛X的运营人员,最主要的是数据,如果没有数 ...

  7. 基于Kafka Connect框架DataPipeline在实时数据集成上做了哪些提升?

    在不断满足当前企业客户数据集成需求的同时,DataPipeline也基于Kafka Connect 框架做了很多非常重要的提升. 1. 系统架构层面. DataPipeline引入DataPipeli ...

  8. 单细胞数据高级分析之初步降维和聚类 | Dimensionality reduction | Clustering

    个人的一些碎碎念: 聚类,直觉就能想到kmeans聚类,另外还有一个hierarchical clustering,但是单细胞里面都用得不多,为什么?印象中只有一个scoring model是用kme ...

  9. freemarker 数据做加减计算

    controller的部分: @Controller@RequestMapping("/ContactsFrameIndex")public class ContactsFrame ...

随机推荐

  1. android数据存储之Sqlite(二)

    SQLite学习笔记 前言:上一章我们介绍了sqlite的一些基本知识以及在dos命令下对sqlite进行的增删改查的操作,这一章我们将在android项目中实际来操作sqlite. 1. SQLit ...

  2. R中,去掉dataframe中的NA行

    R中使用complete.cases 和 na.omit来去掉包含NA的行 现在有个一data.frame  datafile如下所示 Date        sulfate nitrate ID 1 ...

  3. winform中DataGrid控件的宽度设置

    最近修改一个win5.0的PDA程式,碰到一个问题.就是给DataGrid控件绑定数据的时候,这个控件的宽度不能调整,有时候数据较长,就显示不全.然后想在程式里自定义它的宽度,设置不成功.然后网上没找 ...

  4. [MongoDB] 高可用架构方案

    一.缘由: 众所周知,Mongodb是在高速发展期,一些特性架构难免会发生变化.这里就总结下,我目前所知道的Mongodb 的高可用架构都有哪些.目前Mongodb版本3.2. 二.结构介绍: 1.R ...

  5. python(24)urlencode和urldecode

    当url地址含有中文,或者参数有中文的时候,这个算是很难正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至‘/’做一下编码转换. 一.urlencode ur ...

  6. linux 安装软件程序

    1.用aptitude管理软件包 查看已安装的/未安装的等软件包 无法通过aptitude看到一个细节是所有跟某个特定软件包关联的所有文件的列表.利用dpkg命令能看到这个列表. dpkg -L pa ...

  7. 更改RAC日志组

    alter database add logfile thread 1 group 5 ('+DATA/idb/onlinelog/group5.log') size 256m;alter datab ...

  8. 在silverlight中通过WCF连接ORACLE DB数据库(转)

    转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4 这不是我的原创,我也是上网学习的~ How to get data f ...

  9. JavaScript笔记基础篇(二)

    基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt ...

  10. '<', hexadecimal value 0x3C, is an invalid 问题解决

    你的web.config 里面一定有个节点的不完整,如 错误如下: 正确的如下: