当前位置: 首页 > 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.xdnf.cn/news/1405819.html

相关文章:

  • 2025最确定性的答案:AI+IP的结合
  • CNB远程部署和EdgeOne Pages
  • 恶补DSP:3.F28335的ePWM模块
  • Wheat Gene ID Convert Tool 小麦中国春不同参考基因组GeneID转换在线工具
  • TensorFlow 深度学习 | 使用底层 API 实现模型训练(附可视化与 MLP)
  • 「日拱一码」066 深度学习——Transformer
  • ADB常用命令大全
  • Linux中的Shell编程 第一章
  • 第09章 t检验:两独立样本t检验
  • 模拟|双指针
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(下)
  • python pyqt5开发DoIP上位机【介绍】
  • 【cancelToken取消重复请求】
  • uniapp开发 移动端使用字符串替换注意事项
  • GEE中上传研究区域范围
  • ModuleNotFoundError: No module named ‘_cffi_backend‘
  • 服务器CPU飙升该如何排查火焰图
  • 互联网医院系统优势介绍
  • Java试题-选择题(22)
  • 诊断通信管理(Diagnostic Communication Management)详解
  • Shell脚本命令扩展
  • Langflow核心技术学习笔记(新)
  • 针对 “TCP 数据传输机制” 的攻击
  • STL中的容器,迭代器
  • DAY 18 推断聚类后簇的类型 - 2025.8.30
  • Megatron-LM(模型并行)
  • 2025 年 AI 发展十大预测:多模态融合、边缘 AI 普及将成核心增长点
  • Redis数据类型概览:除了五大基础类型还有哪些?
  • 【适度精简】Windows 7 旗舰版-emmy精简系统
  • SpringAI应用开发工程师高阶面试剧本与知识点全解析(含RAG、多租户、流式推理、企业落地场景)