【python机器学习】K-Means算法详解及给坐标点聚类实战(附源码和数据集 超详细)

news2025/1/12 10:40:09

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

人们在面对大量未知事物时,往往会采取分而治之的策略,即先将事物按照相似性分成多个组,然后按组对事物进行处理。机器学习里的聚类就是用来完成对事物进行分组的任务

一、样本处理

聚类算法是对样本集按相似性进行分簇,因此,聚类算法能够运行的前提是要有样本集以及能对样本之间的相似性进行比较的方法。

样本的相似性差异也称为样本距离,相似性比较称为距离度量。

设样本特征维数为n,第i个样本表示为x_i={x_i^(1),x_i^(2),…,x_i^(n)}。因此,样本也可以看成n维空间中的点。当n=2时,样本可以看成是二维平面上的点。

二维平面上两点x_i和x_j之间的欧氏距离: 

K均值聚类算法常采用欧氏距离作为样本距离度量准则。

二维平面上两点间欧氏距离的计算公式推广到n维空间中两点x_i和x_j的欧氏距离计算公式:

 

二、基本思想

设样本总数为m,样本集为S={x_1,x_2,…,x_m}。K均值聚类算法对样本集分簇的个数是事先指定的,即k。设分簇后的集合表示为C={C_1,C_2,…,C_k},其中每个簇都是样本的集合。

K均值聚类算法的基本思想是让簇内的样本点更“紧密”一些,也就是说,让每个样本点到本簇中心的距离更近一些。

常采用该距离的平方之和作为“紧密”程度的度量标准,因此,使每个样本点到本簇中心的距离的平方和尽量小是k-means算法的优化目标。每个样本点到本簇中心的距离的平方和也称为误差平方和(Sum of Squared Error, SSE)。

从机器学习算法的实施过程来说,这类优化目标一般统称为损失函数(loss function)或代价函数(cost function)。

三、簇中心的计算

当采用欧氏距离,并以误差平方和SSE作为损失函数时,一个簇的簇中心按如下方法计算:

对于第i个簇C_i,簇中心u_i=(u_i^(1),u_i^(2),…,u_i^(n))为簇C_i内所有点的均值,簇中心u_i第j个特征为

 SSE的计算方法为:

四、算法流程

 

 五、对坐标点聚类实战

坐标点存在txt文件中 需要源码和数据集请点赞关注收藏后评论区留言私信~~~

K均值聚类算法以计算簇中心并重新分簇为一个周期进行迭代,直到簇稳定,分配结果不再变化为止,下面来看一个对二维平面上的点进行聚类的例子

效果展示如下

经过不断的迭代SSE误差在不断的减小,图像中的聚类也变得更为清晰,直到最后一个图变为三个较为稳定的簇

 

 

 部分代码如下

def L2(vecXi, vecXj):
    return np.sqrt(np.sum(np.power(vecXi - vecXj, 2)))
 
from sklearn.metrics import silhouette_score, davies_bouldin_score
def kMeans(S, k, distMeas=L2):
    m = np.shape(S)[0] # 样本总数
    sampleTag = np.zeros(m)
    n = np.shape(S)[1] # 样本向量的特征数
    clusterCents = np.mat([[-1.93964824,2.33260803],[7.79822795,6.72621783],[10.64183154,0.20088133]])
    #clusterCents = np.mat(np.zeros((k,n)))
    #for j in range(n):
    #    minJ = min(S[:,j]) 
    #    rangeJ = float(max(S[:,j]) - minJ)
    #    clusterCents[:,j] = np.mat(minJ + rangeJ * np.random.rand(k,1))

plt.scatter(clusterCents[:,0].tolist(),clusterCents[:,1].tolist(),c='r',marker='^',linewidths=7)
        plt.scatter(S[:,0],S[:,1],c=sampleTag,linewidths=np.power(sampleTag+0.5, 2)) # 用不同大小的点来表示不同簇的点
        plt.show()
        print("SSE:"+str(SSE))
        print("SC:"+str(silhouette_score(S, sampleTag, metric='euclidean')))
        print("DBI:"+str(davies_bouldin_score(S, sampleTag)))

        print("- - - - - - - - - - - - - - - - - - - - - - - -")
        
        # 重新计算簇中心
        for i in range(k):
            ClustI = S[np.nonzero(sampleTag[:]==i)[0]]
            clusterCents[i,:] = np.mean(ClustI, axis=0) 
    return clusterCents, sampleTag, SSE

创作不易 觉得有帮助请点赞关注收藏~~~

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

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

相关文章

技术原理|Hologres Binlog技术原理揭秘

作者:张高迪(花名杳天),Hologres研发。 同传统MySQL数据库,Hologres支持Hologres binlog,记录数据库中所有数据的变化事件日志。通过Hologres binlog,可以非常方便灵活的实现数据之间的复制、同…

“电池黑马”瑞浦兰钧增速惊人,动储双起飞

撰稿 | 多客 来源 | 贝多财经 12月14日,“电池黑马”瑞浦兰钧能源股份有限公司(以下简称“瑞浦兰钧”)向港交所主板提交上市申请,摩根士丹利和中信证券为其联席保荐人。至此,国内动力电池装机量排名前十的企业均已上…

DB Optimizer Multiplatform SQL评测和调优IDE

DB Optimizer Multiplatform SQL评测和调优IDE 增加了对最新版本Log4j的支持。 改进了分析会话功能,可提前提醒用户可能有问题的SQL。 DB Optimizer可以快速发现、诊断和优化性能较差的SQL。DBOptimizer使DBA和开发人员能够在整个开发生命周期中优化SQL性能&#xf…

合并多个有序数组

合并多个有序数组题目描述思想代码实现变形题目题目描述 我们现在有多个已经有序的数组,我们知道每个有序数组的元素个数和总共的有序数组的个数,现在请设计一个算法来实现这多个有序数组的合并(合并成一个数组); 例如&#xff1a…

Chrome浏览器可以用ChatGPT了?

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 最近这段时间想必 和我一样,都被chatGPT刷屏了。 在看到网上给出的一系列chatGPT回答问题的例子和自己亲自体验之后,的确发现它效果非常令人惊艳。 chatGPT的火热程度在开源社…

turbo编码原理

一、原理 Turbo的编码器由两个并行的分量编码器组成。分量编码器的选择一般是卷积码。在Turbo码中,输入序列在进入第二个编码器时须经过一个交织器 ,用于将序列打乱。两个编码器的输出共同作为冗余信息添加到信息序列之后,对抗信道引起的错误…

实战SupersetBI报表之数据集图表配置

上集已经安装完Superset -实战SupersetBI报表之安装 本集开始讲解 根据数据集配置图表:以简单的员工花名册 为例 1、首先配置数据库 上次安装的时候也提到过 如果服务之间都是docker 安装。必须保证能够通信 下面根据实际参数配置即可 当我们配置好数据库之后 就可以…

如何保证TCP传输的可靠性

重传机制,流量控制,拥塞控制 1.重传机制: 序列号确认应答 当发送端的数据到达接收主机的时候,接收端主机会返回一个确认应答消息,表示已经收到消息 当数据发生丢包时,用重传机制解决 重传机制有好几种…

【Anime.js】——用Anime.js实现动画效果

目录 目标: ​编辑1、确定思路 2、创建网格 3、设置随机位置 4、创建时间轴动画 完整代码: 目标: 实现自动选点,对该点进行先缩小后放大如何回到比其他点大一点的状态,并以该点从外向内放大 1、确定思路 2、创建网…

第12届嵌入式蓝桥杯真题-停车场管理系统的设计与实现

目录 实验要求: 实验思路: 核心代码: (1)主函数 (2)lcd显示 (3)按键函数 (4)LED显示函数 (5)业务处理函数 &…

深度理解取模

深度理解取模一.取模概念二.负数取模三.进一步的解释四.取模和取余是一样的吗?一.取模概念 二.负数取模 上面的代码一目了然就不再多少啦,但如果是负数取模又该怎么办呢? 以上a/b-3是很好理解的,那为什么取模后的值是-1呢&#xf…

useEffect 和 useLayoutEffect 的源码解读

文章目录useEffect 和 useLayoutEffect 的源码解读useEffect源码解读mountEffectImplpushEffectupdateEffectImpl疑惑:useLayOutEffect源码解读mountLayoutEffectupdateLayoutEffect总结useEffect 和 useLayoutEffect 的源码解读 useEffect 文件在 packages/react…

毕业设计-基于深度学习的交通标识识别-opencv

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

叠氮-聚乙二醇-羧基,N3-PEG-COOH 异双功能PEG衍生物COOH-PEG-N3又名Azide-PEG-acid,可用于修饰蛋白质

英文名称:N3-PEG-COOH;COOH-PEG-N3 Azide-PEG-acid 中文名称:叠氮-聚乙二醇-羧基;羧基-聚乙二醇-叠氮 存储条件:-20C,避光干燥 用 途:仅用于科学研究,不能用于人体 外观: 固体或…

【OpenFeign】【源码+图解】【一】HelloWorld及其工作原理

目录1. HelloWorld1.1 pom.xml1.2 yml配置1.3 开启OpenFeign1.4 创建Product的FeignClient1.5 Controller2. OpenFeign的工作原理1. HelloWorld 服务中心以及Product微服务继续使用LoadBalance中的HelloWorld,新建一个client作为OpenFeign的例子 1.1 pom.xml 引入…

【视觉高级篇】26 # 如何绘制带宽度的曲线?

说明 【跟月影学可视化】学习笔记。 如何用 Canvas2D 绘制带宽度的曲线? Canvas2D 提供了相应的 API,能够绘制出不同宽度、具有特定连线方式(lineJoin)和线帽形状(lineCap)的曲线,绘制曲线非…

力扣(1053.115)补9.13

1053.不相交的线 不会,这题和1143题代码一样,只不过题意不太能懂,难想,难想。 115.不同的子序列 难想,这种题就跟该画dp图去理解,太难了。 跟着图去模拟一下,要不然真的答案都看不懂。 dp[i][j…

Servlet知识

1、什么是Servlet? Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据&…

机器学习笔记:scikit-learn pipeline使用示例

0. 前言 在机器学习中,管道机制是指将一系列处理步骤串连起来自动地一个接一个地运行的机制。Scikit-Learn提供了pipeline类用于实现机器学习管道,使用起来十分方便。 既然要将不同处理步骤串联起来,首先必须确保每个步骤的输出与下一个步骤的…

java计算机毕业设计基于安卓Android的数字猎头招聘管理APP

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把数字猎头招聘管理与现在网络相结合,利用java技术建设数字猎头招聘管理APP,实现数字猎头招聘管理的信息化。则对于进一步提高数字猎头招聘管理发展,丰富数字猎头招聘管理经验能起到不少的促进作用。 数字猎头招聘管理APP能…