尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
人工智能入门 | K-means聚类算法的应用案例实战(含代码+图示)
前言Hello大家好我是小哥谈。K-means算法是很典型的基于距离的聚类算法采用距离作为相似性的评价指标即认为两个对象的距离越近其相似度就越大。该算法认为簇是由距离靠近的对象组成的因此把得到紧凑且独立的簇作为最终目标。目录1.k-means算法优缺点2.算法思想3.解决的问题4.k-means原理介绍5.k-means算法实战1.k-means算法优缺点优点容易实现缺点可能收敛到局部最小值在大规模数据集上收敛较慢.使用数据类型数值型数据2.算法思想k-means算法实际上就是通过计算不同样本间的距离来判断他们的相 近关系的相近的就会放到同一个类别中去。3.解决的问题k-means算法属于无监督学习的一种聚类算法其目的为在不知数据所属类别及类别数量的前提下依据数据自身所暗含的特点对数据 进行聚类。对于聚类过程中类别数量 k 的选取需要一定的先验知识 也可根据“类内间距小类间间距大“一种聚类算法的理想情况 为目标进行实现。4.k-means原理介绍k-means算法以数据间的距离作为数据对象相似性度量的标准因此选择计算数据间距离的计算方式对最后的聚类效果有显著的影响常用计算距离的方式有余弦距离、欧式距离、曼哈顿距离等。5.k-means算法实战实现效果如下代码每一步都已经清楚的进行了说明from numpy import * import pandas as pd import matplotlib.pyplot as plt #距离度量函数 def calc_distance(vec1,vec2): return sqrt(sum(power(vec1-vec2,2))) #创建初始聚类中心 def creat_centroid(data,k): centroids zeros((k,n)) centroids[0,0] 2 centroids[0,1] 10 centroids[1, 0] 5 centroids[1, 1] 8 centroids[2, 0] 1 centroids[2, 1] 2 return centroids # k-means聚类 def kMeans(data,k,distcalc_distance,creat_center creat_centroid): # 初始化cluster_assment存储中间结果 #第一列存储索引第二列存储距离 # 样本的个数 m shape(data)[0] init zeros((m,2)) cluster_assment mat(init) # 初始化聚类中心矩阵 centroids creat_centroid(data,k) for epoch in range(1): # 对数据集合中每个样本点进行计算 for i in range(m): min_dist inf min_index -1 # 对每个样本点到每个中心的距离进行计算 for j in range(k): dist_ij calc_distance(centroids[j, :],data[i, :]) # 找到距离最近的中心的距离和索引 if dist_ij min_dist: min_dist dist_ij min_index j cluster_assment[i,:] min_index,min_dist # 对所有节点聚类之后重新更新中心 for i in range(k): # .A把矩阵转成数组 pts_in_cluster data[nonzero(cluster_assment[:,0].A i)[0]] centroids[i,:] mean(pts_in_cluster,axis0) return centroids,cluster_assment if __name__ __main__: # 创建数据集 data array([[2,10],[2,5],[8,4],[5,8], [7,5] ,[6,4],[1,2],[4,9]]) k 3 # k为聚类个数 n 2 # n为特征个数 centroids,cluster_assment kMeans(data,k,dist calc_distance,creat_centercreat_centroid) predict_label cluster_assment[:,0] data_and_pred column_stack((data,predict_label)) # df是原样数据样本和预测出来的类别 df pd.DataFrame(data_and_pred,columns[data1,data2,pred]) df0 df[df.pred 0].values df1 df[df.pred 1].values df2 df[df.pred 2].values #画图 plt.scatter(df0[:,0],df0[:,1],c turquoise,marker o,label label0) plt.scatter(df1[:, 0], df1[:, 1], cgreen, marker*, labellabel1) plt.scatter(df2[:, 0], df2[:, 1], cblue, marker, labellabel2) plt.scatter(centroids[:,0].tolist(),centroids[:,1].tolist(),cred) plt.legend(loc 2) plt.show()具体实现效果小伙伴们可以根据需求添加数据集本文只是简单添加了几组数据集做一下演示。
RELATED

相关推荐

计算机网络-概论

计算机网络-概论

物理媒体 (1). 双绞铜线 常用于建筑内网络. (2). 同轴电缆 常用于电缆电视系统. (3). 光纤 优势:速度快,不受电磁干扰,低衰减,难窃听 常用于长途传输媒体,因特网主干. (4). 陆地无线…

📅 2026/9/11 10:53:44
提示工程核心原则与AI交互设计实践

提示工程核心原则与AI交互设计实践

1. 为什么提示设计能决定用户体验成败在AI交互领域,提示(prompt)就是用户与系统对话的"第一句话"。一个糟糕的提示设计,就像让用户面对一台没有按钮的老式收音机——明明功能强大,却不知从何下手。去年我们团…

📅 2026/9/11 10:53:44
树莓派Pico低功耗实战:lightsleep深度优化与GPIO22唤醒避坑指南

树莓派Pico低功耗实战:lightsleep深度优化与GPIO22唤醒避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/11 10:48:43
MORE NEWS

更多资讯

📰

嵌入式Linux下Modbus RTU串口配置与协议解析实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

stm32 heap stack “两面包夹芝士”的堆栈模型 --转

【说在前面的话】 在中文嵌入式环境中,时不时的总能看到不少朋友”堆”“栈“傻傻分不清楚,我很早之前在文章《漫谈C变量——夏虫不可语冰》介绍过二者的区别,这里就不再深入展开,总之: 栈(Stack&#xff…

📰

k6 v0.57.0 特性详解:功能测试断言库、k6 new 模板化脚手架与 CSV 对象解析

k6 v0.57.0 特性详解:功能测试断言库、k6 new 模板化脚手架与 CSV 对象解析 【免费下载链接】k6 A modern load testing tool, using Go and JavaScript 项目地址: https://gitcode.com/GitHub_Trending/k6/k6 本指南以 k6 官方 v0.57.0 发布说明为核心&…

📰

Playwright Python 自动化测试:如何一套代码跑通 Chromium、Firefox 与 WebKit

Playwright Python 自动化测试:如何一套代码跑通 Chromium、Firefox 与 WebKit 【免费下载链接】playwright-python Python version of the Playwright testing and automation library. 项目地址: https://gitcode.com/GitHub_Trending/pl/playwright-python …

📰

换掉奥创中心只需 3 步:GHelper 性能模式、风扇曲线与独显直连完整上手指南

换掉奥创中心只需 3 步:GHelper 性能模式、风扇曲线与独显直连完整上手指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, V…

📰

TVBoxOSC:三步装好开源电视盒子控制应用,搭起家庭媒体中心

TVBoxOSC:三步装好开源电视盒子控制应用,搭起家庭媒体中心 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC TVBoxOSC是一款…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬