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

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

canopy具体描述可以参考这里

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

package main

import (
"fmt"
"math"
) const (
EARTH_RADIUS =
) type Point struct {
lat float64
lng float64
} func Pop(points []Point) (p Point, newPoints []Point) {
if len(points) > {
p = points[]
newPoints = points[:]
}
return
} func Push(p Point, points []Point) []Point {
points = append(points, p)
return points
} // Calculates the Haversine distance between two points in kilometers.
// Original Implementation from: http://www.movable-type.co.uk/scripts/latlong.html
func GreatCircleDistance(p1, p2 Point) float64 {
dLat := (p2.lat - p1.lat) * (math.Pi / 180.0)
dLon := (p2.lng - p1.lng) * (math.Pi / 180.0) lat1 := p1.lat * (math.Pi / 180.0)
lat2 := p2.lat * (math.Pi / 180.0) a1 := math.Sin(dLat/) * math.Sin(dLat/)
a2 := math.Sin(dLon/) * math.Sin(dLon/) * math.Cos(lat1) * math.Cos(lat2) a := a1 + a2 c := * math.Atan2(math.Sqrt(a), math.Sqrt(-a))
return EARTH_RADIUS * c
} /*
while(没有标记的数据点){
选择一个没有强标记的数据点p
把p看作一个新Canopy c的中心
离p距离<x1的所有点都认为在c中,给这些点做上弱标记 //纳入canopy,有可能会纳入其它canopy
离p距离<x2的所有点都认为在c中,给这些点做上强标记 //不会再纳入其它canopy
}
*/ //目前只实现了经纬度以及经纬度的距离计算,这里可以是一个向量
func CanopyCluster(points []Point, x1, x2 float64) {
var tmp []Point
var cluster [][]Point for len(points) > {
var center Point
center, points = Pop(points)
index := len(cluster)
var cpList []Point
cpList = append(cpList, center)
cluster = append(cluster, cpList)
var cur Point
for len(points) > {
cur, points = Pop(points)
distance := GreatCircleDistance(center, cur)
if distance <= x1 {
cluster[index] = append(cluster[index], cur)
if distance > x2 {
tmp = Push(cur, tmp)
}
} else {
tmp = Push(cur, tmp)
}
}
fmt.Printf("current number of items in this canopy %d\n", center)
var t []Point
points = tmp
tmp = t
}
for k, c := range cluster {
fmt.Println("canopy", k, "has", len(c), "items:")
for _, v := range c {
fmt.Println("\t", v.lat, v.lng)
}
}
} func main() {
pointsList := []Point{
{34.28637, -110.12059},
{34.28638, -110.1206},
{34.29077, -110.12078},
{34.29111, -110.11941},
{34.29113, -110.11938},
{34.29116, -110.1194},
{34.29145, -110.12043},
{34.29146, -110.12063},
{34.29154, -110.11873},
{34.3141, -110.11556},
{34.31411, -110.11557},
{34.31411, -110.11556},
{34.31412, -110.11556},
{34.31412, -110.11557},
{34.31415, -110.11552},
{34.31415, -110.11556},
}
CanopyCluster(pointsList, 1.0, 0.8)
}

对需要聚类的数据使用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. HA(High available)--Heartbeat高可用性集群(双机热备)菜鸟入门级

    HA(High available)--Heartbeat高可用性集群(双机热备)   1.理解:两台服务器A和B ,当A提供服务,B闲置待命,当A服务宕机,会自动切换至B机器继续提供服务.当主机恢复 ...

  2. python---str

    Python转义字符 \ (在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制 ...

  3. 动画---图形图像与动画(三)Animation效果的XML实现

    使用XML来定义Tween Animation 动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <trans ...

  4. java io流 运行错误时,保存异常到文件里面

    java io流 运行错误时,保存异常到文件里面 下面这个实例,运行后,输入数字,为正确,如果输入字符串,则报错,保存错误信息 //运行错误时,保存异常到文件里面 //下面这个实例,运行后,输入数字, ...

  5. [ActionScript 3.0] NetConnection建立客户端与服务器的双向连接

    一个客户端与服务器之间的接口测试的工具 <?xml version="1.0" encoding="utf-8"?> <!--- - - - ...

  6. android html 图片处理类--加载富文本工具类

    在android开发中,一些资讯类页面,里面有html标签和图片,html 标签一般通过Html.fromHtml方法,即可以解决,但是如果html 有图片标签,那么,Html.fromHtml 好像 ...

  7. JavaScript笔记基础篇(二)

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

  8. CAS 与.net 集成的 “循环重定向”问题分析

    转自:http://www.cnblogs.com/xingshao/archive/2011/09/29/2195746.html 近期的一个项目,项目包含了若干的子系统,因为人员配备的原因,项目会 ...

  9. U盘分区之后如何恢复

    操作步骤: 1.插入U盘. 2.按windows键,右键点击“运行”,再左键点击以管理员身份运行. 3.输入diskpart,按enter. 4.输入list disk,按enter. 5.之后会看到 ...

  10. oracle空表导出的问题

    之前再做项目的时候下载了一个开源的程序,数据库在移植的时候通过exp/imp导入导出,结果程序在启动时报错,对比过后发现两个数据库表相差了十几个,再排查问题,发现少掉的十几个表全部是空表,查了一下or ...