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

吴恩达老师机器学习作业-ex7(聚类)

导入库,读取数据,查看数据类型等进行分析,可视化数据

import matplotlib.pyplot as plt
import numpy as np
import scipy.io as sio#读取数据
path = "./ex7data2.mat"
data = sio.loadmat(path)
# print(type(data))
# print(data.keys())
X = data.get("X")
# print(X.shape)
# print(X)
# print(type(X))#可视化数据
plt.scatter(X[:,0],X[:,1])
plt.show()

簇分配

在该函数中,设置一个minis表示样本与各个聚类中心点的距离,所以最开始初始化为一个比较大的数值。第一个for循环为迭代每一个样本,第二个for循环迭代每一个聚类中心点,已便找到最近的聚类中心点。

def means_classification(X,centros):m = len(X)n = len(centros)idx = np.zeros(m)for i in range(m):minis = 100000for j in range(n):s = np.sum(np.power((X[i,:]-centros[j,:]),2))if s < minis:minis = sidx[i] = jreturn idx

计算聚类中心

使用平均值计算聚类中心

def means_center(X,K,idx):centors = []for i in range(K):indicates = np.where(idx == i)centors_i = np.mean(X[indicates],axis=0)centors.append(centors_i)return centors

初始化聚类中心

随机生成三个整数(样本范围内),然后当作下标索引,找到三个样本的点作为初始化的聚类中心。

def init_centros(X,K):m = len(X)random_int = []for i in range(K):random_int_i = np.random.randint(0, m)random_int.append(random_int_i)random_centros = []for k in random_int:random_centros.append(X[k])return np.array(random_centros)

手动定义聚类数量为3

K = 3

多次迭代,运行Kmeans算法

def run_Kmeans(X,K,times):for i in range(times):centros = init_centros(X, K)idx = means_classification(X, centros)centros = means_center(X, K, idx)return idx,centros

绘制出聚类算法后的散点图

def plot_kmeans(X,idx):cluster1 = X[np.where(idx == 0)[0], :]cluster2 = X[np.where(idx == 1)[0], :]cluster3 = X[np.where(idx == 2)[0], :]fig,ax = plt.subplots()ax.scatter(cluster1[:, 0], cluster1[:, 1], c="r", label="cluster1")ax.scatter(cluster2[:, 0], cluster2[:, 1], c="g", label="cluster2")ax.scatter(cluster3[:, 0], cluster3[:, 1], c="b", label="cluster3")plt.show()idx,centros = run_Kmeans(X,K,100)
plot_kmeans(X,idx)

注意这里有个问题,随机初始化时,最后好几次是得到了局部最优,该题目可以先手动初始化聚类中心。

centros = np.array([[3,3],[6,2],[8,5]])

http://www.lryc.cn/news/416156.html

相关文章:

  • lombok 驼峰命名缺陷,导致后台获取参数为null的解决办法
  • 【dockerpython】亲测有效!适合新手!docker创建conda镜像+容器使用(挂载、端口映射、gpu使用)+云镜像仓库教程
  • 矩阵,求矩阵秩、逆矩阵
  • 指针和const
  • 基于C#调用文心一言大模型制作桌面软件(可改装接口)
  • VScode插件安装
  • 《Milvus Cloud向量数据库指南》——高可用黄金标准:深入解析与业务策略考量
  • sqli-labs注入练习1,2关
  • B站宋红康JAVA基础视频教程个人笔记chapter04
  • 关于java枚举为什么可以拿来当单例实现这件事看看ikun怎么说
  • Hugging Face下载模型
  • JVM-垃圾回收
  • 8.C基础_指针基础
  • 安泰功率放大器使用注意事项有哪些内容和要求
  • windows下,使用vs code远程连接云服务器【以CentOS7为例】
  • x264 中像素扩边算法源码分析
  • 数据结构——双链表详解(超详细)
  • 银行项目利润问题(贪心思想)
  • SQLite
  • 浅谈 Mybatis 框架
  • 【星海随笔】OSPF协议
  • Vue 使用elementUI-plus el-calendar加 公历转农历 是否节假日 等
  • SQL-锁
  • 索引小tips
  • 2024年【中级消防设施操作员(考前冲刺)】报名考试及中级消防设施操作员(考前冲刺)免费试题
  • 数据结构:栈(含源码)
  • 如何使用Markdown编辑器
  • 当代最火的哲学家颜廷利:全球公认十个最厉害的思想家之一
  • android13内核增加调试接口给上层使用
  • linux:phpstudy安装及日常命令使用[表格]