Python实现简单层次聚类算法以及可视化


Posted in Python onMarch 18, 2019

本文实例为大家分享了Python实现简单层次聚类算法,以及可视化,供大家参考,具体内容如下

基本的算法思路就是:把当前组间距离最小的两组合并成一组。

算法的差异在算法如何确定组件的距离,一般有最大距离,最小距离,平均距离,马氏距离等等。

代码如下:

import numpy as np
import data_helper
np.random.seed(1)
def get_raw_data(n):
 _data=np.random.rand(n,2)
 #生成数据的格式是n个(x,y)
 _groups={idx:[[x,y]] for idx,(x,y) in enumerate(_data)}
 return _groups
def cal_distance(cluster1,cluster2):
 #采用最小距离作为聚类标准
 _min_distance=10000
 for x1,y1 in cluster1:
  for x2,y2 in cluster2:
   _distance=(x1-x2)**2+(y1-y2)**2
   if _distance<_min_distance:
    _min_distance=_distance
 return _distance
groups=get_raw_data(10)
count=0
while len(groups)!=1:#判断是不是所有的数据是不是归为了同一类
 min_distance=10000
 len_groups=len(groups)
 
 for i in groups.keys():
  for j in groups.keys():
   if i>=j:
    continue
   distance=cal_distance(groups[i],groups[j])
   if distance<min_distance:
    min_distance=distance
    min_i=i
    min_j=j#这里的j>i
 groups[min_i].extend(groups.pop(min_j))
 data_helper.draw_data(groups)
 #一共n个簇,共迭代n-1次

运行的效果就是迭代一次,组数就会少一次,调用画图方法,同一组的数据被显示为一个颜色。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中lambda的用法及其与def的区别解析
Jul 28 Python
Python全局变量操作详解
Apr 14 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
Django REST framework视图的用法
Jan 16 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
python和C++共享内存传输图像的示例
Oct 27 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
PyQt5实现简单数据标注工具
Mar 18 #Python
Python简单I/O操作示例
Mar 18 #Python
python实现简单图片物体标注工具
Mar 18 #Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 #Python
Python动态赋值的陷阱知识点总结
Mar 17 #Python
Python将字符串常量转化为变量方法总结
Mar 17 #Python
实例讲解Python中整数的最大值输出
Mar 17 #Python
You might like
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP比你想象的好得多
2014/11/27 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
js left,right,mid函数
2008/06/10 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
JavaScript错误处理
2015/02/03 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Django 外键的使用方法详解
2019/07/19 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
django中嵌套的try-except实例
2020/05/21 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
python实现银行账户系统
2021/02/22 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
什么是SCM(软件配置管理)
2014/08/16 面试题
三个Unix的命令面试题
2015/04/12 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
优秀党员推荐材料
2014/12/18 职场文书
新课程改革心得体会
2016/01/22 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL