当前位置: 首页 > news >正文

吴恩达机器学习作业九:kmeans聚类

数据集在作业一

Kmeans聚类

K-means 是一种无监督聚类算法,其核心思想是将数据集划分为 k 个不同的簇(Cluster),使得每个簇内的数据点尽可能相似,而不同簇的数据点尽可能差异较大。

算法流程

这个过程其实有点像梯度下降,都是一点一点向最优值逼近。

代码

读取数据及可视化

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio# 读取数据
data=sio.loadmat("ex7data2.mat")
X=data['X']
# print(X.shape)(300, 2)# 可视化
def plot_data(X):plt.scatter(X[:,0],X[:,1],marker='o',c='y',edgecolors='g')plt.show()# plot_data(X)

簇分配

def find_centres(X,centers):m=X.shape[0]idx=np.zeros(m)for i in range(m):min_dist=np.inffor j in range(len(centers)):dist=np.sum((X[i]-centers[j])**2)if dist<min_dist:min_dist=distidx[i]=jreturn idx

作用是对所有的点按照新的中心进行划分。

初始聚类中心

centers=np.array([[3,3],[6,2],[8,5]])
idx=find_centres(X,centers)#每个样本所属的簇索引
# print(idx)

计算聚类中心,按照初始簇分配来计算平均中心

def compute_centres(X,idx,centers):centers=[]#用来存储新的聚类中心for i in range(int(idx.max())+1):centers.append(np.mean(X[idx==i],axis=0))return centerscenters_new=compute_centres(X,idx,centers)
# print(centers_new)

计算聚类中心,按照初始簇分配来计算平均中心

def compute_centres(X,idx,centers):centers=[]#用来存储新的聚类中心for i in range(int(idx.max())+1):centers.append(np.mean(X[idx==i],axis=0))return centerscenters_new=compute_centres(X,idx,centers)
# print(centers_new)

按照分好的簇,取新的一轮中心点

执行kmeans聚类

def kmeans(X,centers,count):centers_all=[]centers_all.append(centers)for i in range(count):idx=find_centres(X,centers)centers=compute_centres(X,idx,centers)centers_all.append(centers)return idx,np.array(centers_all)

idx是用来记录最新的每个点属于哪一个簇,centers_all是用来记录所有中心点。

绘制kmeans聚类过程

def plot_kmeans(X,idx,centers_all):plt.scatter(X[:,0],X[:,1],marker='o',c=idx,cmap='rainbow')plt.plot(centers_all[:,:,0],centers_all[:,:,1],'kx--')plt.show()idx,centers_all=kmeans(X,centers,100)
plot_kmeans(X,idx,centers_all)

总结

读入数据——构建簇分配——构建计算簇类中心函数——初始化簇类中心——搭建执行kmeans算法

http://www.dtcms.com/a/358677.html

相关文章:

  • php电子签名
  • 2025年09月计算机二级MySQL选择题每日一练——第十二期
  • Rust 登堂 之 Sized和不定长类型 DST(七)
  • LabVIEW 时间字符串处理与显示
  • 继电器的作用、选型和测量-超简单解读
  • 算法题(195):点名
  • 【学Python自动化】 2. Windows Python 解释器使用笔记
  • 【shell】Shell脚本中的if判断条件和文件测试操作符
  • “人工智能+”政策驱动下的技术重构、商业变革与实践路径研究 ——基于国务院《关于深入实施“人工智能+”行动的意见》的深度解读
  • STM32的内存分配与堆栈
  • Redis 测试:过期 key 内存释放情况
  • JVM架构图是怎样的?
  • 算法(④KMP)
  • SpringAI应用开发工程师高阶面试剧本与知识点全解析(含RAG、多租户、流式推理、企业落地场景)
  • Python3 lambda(匿名函数)
  • HBase高效并发锁:IdLock极简内存设计
  • Qt QML注册全局对象并调用其函数和属性
  • 银河麒麟Kylin系统编译安装Qt5.12.12
  • Yolov8损失函数:回顾Yolov8-Loss
  • ​导游|基于SprinBoot+vue的在线预约导游系统
  • DrissionPage 实战:高效爬取网页数据并保存为 CSV 的全流程解析
  • (链表)Leetcode206链表反转+Leetcode6删除链表的倒数第N个结点+虚拟头节点使用
  • Linux 笔记 Day01|课程结构
  • 第三弹、AI、LLM大模型是什么?
  • 深度学习重塑医疗:四大创新应用开启健康新纪元
  • MySQL-事务(上)
  • 【Linux】如何使用 Xshell 登录 Linux 操作系统
  • Linux 下 Docker 容器部署指南(Java + Redis 示例)
  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • 设置word引用zotero中的参考文献的格式为中文引用格式或中英文格式