吴恩达-机器学习-k-means聚类算法

news2025/1/22 18:10:14

目录

吴恩达-机器学习2022版 k-means聚类算法实现整理

1.核心函数四个:

1.find_closest_centroids    :寻找最近的质心

2.compute_centroids    :迭代重新计算质心

3.kMeans_init_centroids    :随机初始化质心

4.run_kMeans   :执行k-means算法

2.实例:使用k-means算法对图片像素进行压缩 255色压缩到1色

1.代码

2.运行结果


吴恩达-机器学习2022版 k-means聚类算法实现整理

1.核心函数四个:

import numpy as np
import matplotlib.pyplot as plt

1.find_closest_centroids    :寻找最近的质心

#寻找最近的质心
def find_closest_centroids(X, centroids):

    K = centroids.shape[0]
    idx = np.zeros(X.shape[0], dtype=int)
    
    for i in range(X.shape[0]):
        distance = []        
        for j in range(K):         
            norm_ij = np.linalg.norm(X[i] - centroids[j])
            distance.append(norm_ij)           
        idx[i] = np.argmin(distance)
   
    return idx

2.compute_centroids    :迭代重新计算质心

def compute_centroids(X, idx, K):
    
    m, n = X.shape
    centroids = np.zeros((K, n))   
    
    for k in range(K):
        points = X[idx == k] 
        centroids[k] = np.mean(points, axis = 0)
    
    return centroids

3.kMeans_init_centroids    :随机初始化质心

def kMeans_init_centroids(X, K):
    
    randidx = np.random.permutation(X.shape[0])
    centroids = X[randidx[:K]]
    
    return centroids

4.run_kMeans   :执行k-means算法

def run_kMeans(X, initial_centroids, max_iters=10, plot_progress=False):
    
    m, n = X.shape
    K = initial_centroids.shape[0]
    centroids = initial_centroids
    previous_centroids = centroids    
    idx = np.zeros(m)
    
    for i in range(max_iters):     
        print("K-Means iteration %d/%d" % (i, max_iters-1))       
        idx = find_closest_centroids(X, centroids)      
        if plot_progress:
            plot_progress_kMeans(X, centroids, previous_centroids, idx, K, i)
            previous_centroids = centroids
            
        centroids = compute_centroids(X, idx, K)
    plt.show() 
    return centroids, idx


2.实例:使用k-means算法对图片像素进行压缩 255色压缩到1色

1.代码

#进行图片压缩
#读取图片
original_img = plt.imread('bird_small.png')
#数据标准化 使像素值全部落在0-1之间
original_img = original_img / 255

X_img = np.reshape(original_img, (original_img.shape[0] * original_img.shape[1], 3))
K = 16                       
max_iters = 10               

initial_centroids = kMeans_init_centroids(X_img, K) 
centroids, idx = run_kMeans(X_img, initial_centroids, max_iters) 
X_recovered = centroids[idx, :] 
X_recovered = np.reshape(X_recovered, original_img.shape) 

fig, ax = plt.subplots(1,2, figsize=(8,8))
plt.axis('off')

#展示原图片
ax[0].imshow(original_img*255)
ax[0].set_title('Original')
ax[0].set_axis_off()

#展示压缩后图片
ax[1].imshow(X_recovered*255)
ax[1].set_title('Compressed with %d colours'%K)
ax[1].set_axis_off()

2.运行结果

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26109.html

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

相关文章

Centos安装Rclone,操作Minio基本命令

简介 Rclone 是一个用于和同步云平台同步文件和目录命令行工具。它允许在文件系统和云存储服务之间或在多个云存储服务之间访问和同步文件,它具有单向同步功能,使目录完全相同,它具有加密、缓存和联合后端,支持 Fuse 安装&#…

MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架

MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架。 MindSpore提供了友好的设计和高效的执行,旨在提升数据科学家和算法工程师的开发体验,并为Ascend AI处理器提供原生支持,以及软硬件协同优化。 同时,MindSpore…

【计算机网络】

1、应用层 web应用——http协议 请求消息格式:请求行,头部行,消息体 请求方法get,post,delete,put上传文件 Email应用——SMTP,POP3/IMAP DNS应用——DNS协议 P2P应用:文件分发等…

实战项目【7】MEMS惯性传感器的精度参数和单位换算

1 前言 有不少朋友在做项目的时候经常涉及到加速度计和陀螺仪的原始数据转换为其他的单位的问题,这篇文章梳理和推导一下。 1)加速度计的原始数据 在应用时常见的转换单位有: g、m/s^2 、角度 2)陀螺仪的原始数据 在应用时常见的转换单位有&a…

〖全域运营实战白宝书 - 运营角色认知篇⑤〗- “运营“ 是否有前途?

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

UE4 回合游戏项目 23- 进入战斗

在上一篇(UE4 回合游戏项目 22- 控制新角色)基础上继续增加两个角色进入战斗的逻辑 效果: 步骤: 1. 打开“gameMode1”,新增一个变量命名为“正在控制的所有玩家”,变量类型为“roleCategory”的数组 2.打…

Jitamin 安装与配置

Jitamin Jitamin (读作/ˈdʒɪtəmɪn/) 是一款免费、开源,使用PHP语言开发的项目管理系统。Jitamin灵感来自于Vitamin,并结合了Just In Time(准时)和敏的拼音min,意指效率与敏捷是项目管理的维他命。 功能特性 简洁、美观的界面支持多主题…

Celix是什么?能做什么?

半路突然看到了OSGI,又学习了一下,大概了解了架构的一些基础知识。 像MVC,MVP等其实就是分层架构,这类是最容易想到的。 然后其实我就没有接触,如微服务架构,微内核架构。 是什么? 而Celix就是属于微内…

[附源码]java毕业设计校园网学生成绩查询系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Redis源码篇(6)——主从复制

主从复制 从服务器执行 SLAVEOF IP PORT 命令即可实现对主服务器的复制。 复制又分为完整同步和部分同步(2.8之后) 完整同步:与混合持久化过程类似,先以rdb的方式保存rdb文件然后发送给从服务器。再将期间的命令保存到复制缓存区…

[论文评析]基于人体姿态识别的立定跳远 动作智能评估系统

基于人体姿态识别的立定跳远 动作智能评估系统论文信息背景方法系统总体设计立定跳远动作智能评估系统标准动作库子系统动作采集子系统人体姿态动作评估子系统人体姿态评估模型立定跳远关键帧匹配姿态评估及对比总结论文信息 题目:基于人体姿态识别的立定跳远 动作…

AMBA:AXI/AHB/APB学习笔记

AMBA、AXI、AHB、APB学习笔记AMBA总线:各模块之间的连接AHB特性:组成部分:AXIAPBAMBA总线:各模块之间的连接 advanced microcontroller bus architecture高级微控制器总线架构 AHB Advanced High-performance Bus 高级高性能总…

微信小程序|搭建一个博客小程序

文章目录一、文章前言二、创建小程序三、功能开发(1)首页(2)领域页(3)博客详情页(4)个人中心页一、文章前言 此文主要通过小程序搭建一个博客系统,实现博客的一些基础功能…

AD环境下域用户的离线缓存登录

缓存登录主要是为了解决当公司域控制器发生故障联系不上DC或用户拿笔记本电脑回家不拔VPN的情况下,依然能够登录到系统,进行办公。如果用户登录的时候联系不到DC,那么就凭用户登录时输入的用户名和密码去缓存中校验,如果能联系上D…

如果在学习spring的时候没看过这份学习笔记+源码剖析,真的亏大了!

Spring 是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。包括在此基础上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等,在现在企业中的应用越来越广泛。因此对于 S…

YOLOv7移植经验分享

目录 一、背景 二、环境 2.1 服务器环境 2.2 SDK环境 2.3 docker环境 三、移植开发 3.1 模型迁移 3.2 算法迁移 四、部署 一、背景 YOLOv7在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器,并且在 GPU V100 上 30 FPS 或更高的所有…

python基于OCR深度学习实现商品配料表识别

1、概述 当前人民和国家对食品安全十分重视,但商家为了保证食品长时间储存,味道鲜美,在食品中添加超量或对人有严重危害得食品添加剂,严重危害到人民的安全,我们以方便面为例,一包方便面最多可有25种食品添…

十年开发老手,深度解析企业用人标准为何越来越高?!

涛哥作为一个10多年的开发老手,经历过很多场面试,也面试过很多人,这么多年下来,切身体会到企业的用人标准越来越高,企业对开发工程师的要求也越来越"过分"。所以涛哥今天就借此机会,我们一起来分…

如何制定有效的项目计划,提高团队执行力

项目风险来源有很多,项目日程紧张,导致质量下降风险上升;甲方变更,管理者对变动控制不足;项目太大。 虽然从来不可能完全消除项目风险,但可以将危害减到最小。 一、确认项目计划 项目计划是一个项目启动…

SpringBoot读取properties中配置的List集合

实体类 Data NoArgsConstructor AllArgsConstructor Accessors(chain true) public class Person {private String name;private String age;private String content; } Component//将该类交由Spring管理 ConfigurationProperties(prefix "project") //自定义.pro…