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

news2024/11/15 22:46:56

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

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 = 100000
        for j in range(n):
            s = np.sum(np.power((X[i,:]-centros[j,:]),2))
            if s < minis:
                minis = s
                idx[i] = j
    return 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.coloradmin.cn/o/1983985.html

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

相关文章

【LabVIEW学习篇 - 13】:队列

文章目录 队列 队列 队列通常情况下是一种先入先出&#xff08;FIFO&#xff1a;First in First out&#xff09;的数据结构&#xff0c;常用作数据缓存&#xff0c;通过队列结构可以保证数据有序的传递&#xff0c;避免竞争和冲突。 案例&#xff1a;利用队列&#xff0c;模…

WordPress--漏洞复现

1.搭建好环境进入后台登录界面登录管理员 2.进入后选择外观---编辑 3.将文件内容改为我们的一句话木马&#xff0c;点击更新文件 4.访问这个文件显示出phpinfo证明注入成功

PXE技术在操作系统批量安装中的应用与实现

PXE&#xff08;Preboot Execution Environment&#xff09;即预启动执行环境&#xff0c;它是一种可以使计算机通过网络启动的技术。 一、工作原理 客户端请求&#xff1a; 当支持 PXE 的计算机启动时&#xff0c;其网卡的固件会广播一个请求&#xff0c;寻找网络中的 PXE 服…

JavaScript Web API入门day2

目录 1.DOM事件基础 1.1 事件监听 1.2 事件监听案例 1.2.1 京东点击关闭顶部广告 1.2.2 随机点名案例 1.3 事件监听版本 2. 事件类型 2.1 事件类型案例 2.1.1 轮播图点击切换 2.1.2 评论字数统计 3.事件对象 3.1 获取事件对象 3.2 事件对象常用属性 3.3 事件对象…

【技术前沿】3.3KW高功率密度新突破!基于Infineon XMC1400搭配CoolSiC™ Mosfet 的PFC数字电源方案

随着社会经济发展、能源结构变革&#xff0c;近几年全球对家用储能系统的需求量一直保持相当程度的增长。2023年&#xff0c;全球家用储能系统市场销售额达到了87.4亿美元&#xff0c;预计2029年将达到498.6亿美元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为33.68…

定时任务-xxl-job

一. 为什么定时任务可以定时执行 定时任务可以定时执行的原理是通过操作系统提供的定时器实现的。 以下是定时任务能够准时执行的基本原理和相关技术&#xff1a; 操作系统的调度器&#xff1a; 操作系统&#xff08;如Linux、Windows等&#xff09;内部都有一个调度器&#x…

TortoiseGit小乌龟在gitlab配置ssh免密

1. 生成ssh密钥(默认在~/.ssh路径生产&#xff0c;id_rsa和id_rsa.pub) ssh-keygen -t rsa -b 4096 -C "xxxqq.com"2. 打开gitlab&#xff0c;在搜索栏搜索ssh&#xff0c;找到SSH Keys&#xff0c;然后添加id_rsa.pub公钥的内容到网页&#xff0c;保存。 3. 打开To…

如何将PostgreSQL的数据实时迁移到SelectDB?

PostgreSQL 作为一个开源且功能强大的关系型数据库管理系统&#xff0c;在 OLTP 系统中得到了广泛应用。很多企业利用其卓越的性能和灵活的架构&#xff0c;应对高并发事务、快速响应等需求。 然而对于 OLAP 场景&#xff0c;PostgreSQL 可能并不是最佳选择。 为了实现庞大规…

数据结构(其三)--栈与队列

目录 5.栈 5.1 栈的基本操作 5.2 各种栈 &#xff08;1&#xff09;.顺序栈 i.普通顺序栈 ii.共享栈 iii.关于销毁 &#xff08;2&#xff09;.链栈 6.队列 6.1 队列的基本操作 6.2 各种队列 &#xff08;1&#xff09;.循环队列 i.代码 ii.另外一种写法 &#xff08…

[Latex美化]-表格加底色,添加灰色美化表格,便于阅读

1 导入库 \usepackage{xcolor} \usepackage{colortbl, booktabs} 2 插入指令&#xff08;指定行前&#xff09; \rowcolor{gray!30} 具体代码如下 效果如下

循环神经网络RNN介绍

文章目录 1、学习介绍2、RNN的基本结构2.1、图例2.2、公式2.3、公式计算示例2.3.1、给定参数2.3.2、时间步计算 3、序列依赖与梯度消失/爆炸3.1、序列依赖3.2、梯度消失与爆炸3.3、总结 4、传统的前馈神经网络4.1、结构4.2、工作原理4.3、特点4.4、局限性 5、CNN与RNN的关系5.1…

【建造者模式】全面解析与最佳实践:打造复杂对象的蓝图(构建复杂对象的艺术)

文章目录 Java中的建造者模式&#xff1a;全面解析与最佳实践1. 引言2. 建造者模式概念定义与用途适用场景解决的问题 3. 建造者模式原理主要角色解释工作流程UML图和时序图 4. 建造者模式在Java中的实现逐步构建示例程序1. 创建抽象建造者类2. 实现具体建造者类3. 设计产品类4…

如何在厂商软件不提供二次开发资源的情况下实现LabVIEW开发

在遇到厂商提供的软件不支持二次开发资源时&#xff0c;如果需要使用LabVIEW进行开发&#xff0c;通常面临以下几个挑战&#xff1a;设备通讯接口封闭、协议不公开、厂商技术支持有限等。这些问题需要综合考虑并制定解决方案&#xff0c;以下是详细的分析&#xff1a; 1. 了解原…

权限模块开发+权限与角色关联(完整CRUD)

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.easycode生成代码1.配置2.AuthPermissionDao.java剪切到mapp…

SharpLab:.Net反编译工具,方便实时查看反编译后的代码!

C#提供了很多高级语法&#xff0c;很多都是语法糖。这些语法糖对于初学者来说&#xff0c;很多无法理解。 下面推荐一个开源项目&#xff0c;它能够让我们&#xff0c;实时查看编译过程、生成的中间语言&#xff08;IL&#xff09;以及反编译后的代码。 01 项目简介 SharpLa…

C语言 ——深入理解指针(2)

目录 1. 数组名的理解2. 二级指针3. 指针数组4. 字符指针变量5. 数组指针变量6. 函数指针变量7. 函数指针数组 1. 数组名的理解 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址&#x…

TabLayout使用以及自定义tab标签

<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…

YoloV10 论文翻译(Real-Time End-to-End Object Detection)

​摘要 近年来&#xff0c;YOLO因其在计算成本与检测性能之间实现了有效平衡&#xff0c;已成为实时目标检测领域的主流范式。研究人员对YOLO的架构设计、优化目标、数据增强策略等方面进行了探索&#xff0c;并取得了显著进展。然而&#xff0c;YOLO对非极大值抑制&#xff0…

01【功能项目】之【主角射线点击导航】

首先创建一个Unity3D的项目 打开资源商店添加一个人物模型 选择一个免费资源主角添加至项目中 在unity中打开后点击下载包 点击导入包 导入成功后会出现在资源包Assets下 右键创建地面 设置地面尺寸 创建一个材料方便给地面调配颜色 选择材料的颜色 将材质拖拽给地面组为组件 将…

double类型 精度丢失的问题

前言 精度丢失的问题是在其他计算机语言中也都会出现&#xff0c;float和double类型的数据在执行二进制浮点运算的时候&#xff0c;并没有提供完全精确的结果。产生误差不在于数的大小&#xff0c;而是因为数的精度。 一、double进行运算时,经常出现精度丢失 0.10.2使用计算…