人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介

Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。

Canopy聚类很少单独使用, 一般是作为k-means前不知道要指定k为何值的时候,用Canopy聚类来判断k的取值

2.算法步骤

输入:所有点的集合D, 超参数:T1 , T2 , 且 T1 > T2 

输出:聚类好的集合

注意

  • 当T1过大时,会使许多点属于多个Canopy,可能会造成各个簇的中心点间距离较近,各簇间区别不明显;
  • 当T2过大时,增加强标记数据点的数量,会减少簇个个数;
  • T2过小,会增加簇的个数,同时增加计算时间;

一幅图说明算法:

内圈的一定属于该类, 外圈的一定不属于该类, 中间层的可能属于别的类(因为不止一个聚类中心, 他可能属于别的类的内圈);

3.python实现

对iris数据集做Canopy聚类, 半径分别设置为1和2

#%% Canopy聚类
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import copyclass Solution(object):def Canopy(self, x, t1, t2):'''Parameters----------x : array数据集.t1 : float外圈半径.t2 : float内圈半径.Returns-------result: list.聚好类的数据集'''if t1 < t2:return print("t1 应该大于 t2")x = copy.deepcopy(x)result = []  # 用于存放最终结果index = np.zeros((len(x),))   # 用于标记外圈外的点 1表示强标记, 2表示弱标记while (index == np.zeros((len(x),))).any():alist = []  # 用于存放某一类的数据集choice_index = Nonefor i, j in enumerate(index):if j == 0:choice_index = ibreakC = copy.deepcopy(x[choice_index])alist.append(C)x[choice_index] = np.zeros((1, len(x[0])))index[choice_index] = 1for i,a in enumerate(x):if index[i] != 1:distant = (((a-C)**2).sum())**(1/2)if distant <= t2:  # 打上强标记alist.append(copy.deepcopy(x[i]))x[i] = np.zeros((1, len(x[0])))index[i] = 1elif distant <= t1:index[i] = 2result.append(alist)return resultdef pint(r, x, y, c):# 点的横坐标为aa = np.arange(x-r,x+r,0.0001)# 点的纵坐标为bb = np.sqrt(np.power(r,2)-np.power((a-x),2))plt.plot(a,y+b,color=c,linestyle='-')plt.plot(a,y-b,color=c,linestyle='-')plt.scatter(x, y, c='r',marker='*')if __name__ == '__main__':data = pd.read_csv(r'C:/Users/潘登/Documents/python全系列/人工智能/iris.csv')X = np.array(data.iloc[:, 2:4])Y = data['species']result = Solution().Canopy(X, 2, 1)x1 = []y1 = []for i in result[0]:x1.append(i[0])y1.append(i[1])x2 = []y2 = []for i in result[1]:x2.append(i[0])y2.append(i[1])x3 = []y3 = []for i in result[2]:x3.append(i[0])y3.append(i[1])plt.figure(figsize=(16,12))plt.scatter(X[:,0], X[:,1], s=50, c='violet', marker='s')plt.scatter(x1, y1, s=50, c='orange', marker='s')plt.scatter(x2, y2, s=50, c='lightblue', marker='s')plt.scatter(x3, y3, s=50, c='blue', marker='s')pint(2, x1[0], y1[0], 'b')pint(1, x1[0], y1[0], 'y')pint(2, x2[0], y2[0], 'b')pint(1, x2[0], y2[0], 'y')pint(2, x3[0], y3[0], 'b')pint(1, x3[0], y3[0], 'y')plt.xlim([0, 8])plt.ylim([-3, 5])plt.show()

+结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专题一 - 双指针 - leetcode 202. 快乐数 | 简单难度

leetcode 202. 快乐数 leetcode 202. 快乐数 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 202. 快乐数 | 简单难度 1. 题目详情 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」…

简单BFF架构设计

又到周五了有了一个小时的闲暇时间简单写点东西&#xff0c;介绍一个简单的BFF的架构。BFF:Backends For Frontends,其实现在是个比较常见的前端架构设计的方案&#xff0c;其最大的优势便在于前端可以高度自由的在Node层做一些server端才可以做的东西&#xff0c;比如SSR、登录…

SSH安全协议介绍

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; SSH&#xff08;Secure Shell&#xff0c;安全外壳&#xff09;是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业…

气象数据免费下载(超级好用)

你是不是做实验经常性的需要一些气象数据&#xff0c;例如PM2.5、相对湿度、月均温度等等…… 但是当你开始寻找数据时就遇到困难了&#xff0c;由于权限、数据网站之类的麻烦你会花费大量无用时间&#xff0c;甚至有时候一无所获得不偿失&#xff0c;这就很头疼了&#xff01;…

服务器配置禁止IP直接访问,只允许域名访问

联网信息系统需设置只允许通过域名访问&#xff0c;禁止使用IP地址直接访问&#xff0c;建议同时采用云防护技术隐藏系统真实IP地址且只允许云防护节点IP访问服务器&#xff0c;提升网络安全防护能力。 一、Nginx 修改配置文件nginx.conf&#xff0c;在server段里插入正则表达式…

智昊电气推出RCL-0923U型光伏并网点电压自动控制装置/分布式光伏并网点电压自动控制设备/电压控制器

一&#xff1a;行业背景分析 在新型电网的发展的业态下&#xff0c;随着以光伏&#xff0c;风电等可再生能源为代表的新型能源的大量并网接入&#xff0c;配电网从单向电网走向双向电网&#xff0c;从无源电网走向有源电网的演进。但新能源在并网过程对大电网带来诸多影响&…

2024甘肃事业单位报名流程,注意,超全超详细!

✔️报名时间&#xff1a;3月8日9:00-3月12日18:00 ✔️资格审查&#xff1a;3月8日9:00-3月13日18:00 ✔️报名缴费&#xff1a;3月8日9:30-3月14日18:00 ✔️打印准考证&#xff1a;4月16日9:00-4月21日9:00 ✔️笔试时间&#xff1a;2024年4月21日上午 8:30-10:00 职业能力倾…

RT-DETR优化改进:特征融合篇 | GELAN(广义高效层聚合网络)结构来自YOLOv9

🚀🚀🚀本文改进:使用GELAN改进架构引入到RT-DETR 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 🚀🚀🚀学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 🚀🚀🚀RT-DETR模型创新优化,涨点技巧分享,科研小助手; 1.YOLOv9介绍 论…

【vue.js】文档解读【day 3】 | 列表渲染

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 文章目录 列表渲染v-forv-for 与对象在 v-for 里使用范围值template 上的 v-forv-for与v-if通过key管理状态组件上使用v-for数组变化侦测 列表渲染 v-for 在我们想要渲染出一个数组中的元素时&#xf…

C# 中 Math.Round 数学函数

在 C# 中&#xff0c;Math.Round 是一个数学函数&#xff0c;用于对一个浮点数进行四舍五入操作。它接受一个浮点数作为输入&#xff0c;并返回一个最接近输入值的整数或指定小数位数的浮点数。 Math.Round 方法有多个重载&#xff0c;其中最常用的重载有以下两种形式&#xf…

C语言数据结构之二叉堆

愿你千山暮雪 海棠依旧 不为岁月惊扰平添忧愁 &#x1f3a5;前期回顾-二叉树 &#x1f525;数据结构专栏 期待小伙伴们的支持与关注&#xff01;&#xff01;&#xff01; 目录 前期回顾 二叉堆的概念及结构 二叉堆的创建 顺序表的结构声明 顺序表的创建与销毁 二叉堆的插入 …

qtCreator可以全局包含。VSqt中千万不能全局包含,你的控件头文件会自己变成<>括号,编译就报错

qtCreator可以全局包含。 VSqt中千万不能全局包含&#xff0c;你的控件头文件会自己变成&#xff1c;&#xff1e;括号&#xff0c;编译就报错

【fastllm】学习框架,本地运行,速度还可以,可以成功运行chatglm2模型,估计chatglm3模型应该也可以运行,但是并没有现成的模型文件

1&#xff0c;关于 fastllm 项目 https://github.com/ztxz16/fastllm &#x1f680; 纯c实现&#xff0c;便于跨平台移植&#xff0c;可以在安卓上直接编译 &#x1f680; ARM平台支持NEON指令集加速&#xff0c;X86平台支持AVX指令集加速&#xff0c;NVIDIA平台支持CUDA加速…

pytest教程-15-多个fixture以及重命名

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了fixture的yield关键字&#xff0c;本小节我们讲解一下使用多个fixture的方法。 使用多个fixture 如果用例需要用到多个fixture的返回数据&#xff0c;fixture也可以return一个元组、list或字…

数据中台驱动:高效交付之道

如何保证数据中台高效交付&#xff1f; 在数据行业中&#xff0c;项目交付难题尤为突出&#xff0c;尤其在数据中台领域。数据中台项目交付面临诸多挑战&#xff0c;若不妥善解决&#xff0c;将会降低服务质量&#xff0c;影响企业数字化建设的顺利开展&#xff0c;甚至影响项目…

容器(0)-DOCKERFILE-安装-常用命令-部署-迁移备份-仓库

1.安装 启动 systemclt start docker //启动 systemctl status docker //状态 docker info systemclt stop docker systemctl status docker systemctl enable docker //开机启动 2.常用命令 镜像查看 docker images 镜像查看 docker status 镜像拉取 docker pull centos:…

Git 远程操作

1.分布式版本控制系统 我们目前所说的所有内容&#xff08;工作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统&#xff01;什么意思呢 可以简单理解为&am…

Reset Verification IP

Reset Verification IP IP 参数及接口 IP 例化界面 相关函数 assert_reset //置位复位信号 < hierarchy_path>.assert_reset();deassert_reset //取消置位复位信号 < hierarchy_path>.deassert_reset();set_master_mode //设置 RST_VIP 模式为 Master < hi…

仿射变换下的点位纠偏

点位偏差一直是一个很头疼的问题&#xff0c;但是由于摄像头和实际环境的局限性&#xff0c;我们不得不面对这个问题。对此&#xff0c;使用判别的方式进行一个仿射变换&#xff0c;是一种非常有效的方式&#xff0c;下图中图1是基准图&#xff0c;图2是目标图&#xff0c;图3是…

【嵌入式高级C语言】11:C语言Makefile

文章目录 1 makefile的概述【只针对Linux有效】1.1 make1.2 makefile1.3 采用makefile的好处 2 Makefile的语法规则3 makefile变量3.1 自定义变量3.2 系统环境变量3.3 预定义变量 4 伪目标5 最终版本Makefile 1 makefile的概述【只针对Linux有效】 1.1 make make是个命令&…