机器学习随记(6)—K-means

news2024/10/6 12:28:40

1 K-means方案

K-means 算法是一种自动将相似数据点聚集在一起的方法。

  • 具体来说,你得到了一个训练集{x^{1},...,x^{m}},并且您希望将数据分组为几个有凝聚力的“集群”。

  • K-means 是一个迭代过程

    • 首先猜测初始质心,
    • 然后改进这个猜测
      • 反复将样本分配到它们最近的质心,
      • 然后根据分配重新计算质心。
  • 在伪代码中,K-means算法如下:

  • # Initialize centroids
    # K is the number of clusters
    centroids = kMeans_init_centroids(X, K)
    
    for iter in range(iterations):
        # Cluster assignment step: 
        # Assign each data point to the closest centroid. 
        # idx[i] corresponds to the index of the centroid 
        # assigned to example i
        idx = find_closest_centroids(X, centroids)
    
        # Move centroid step: 
        # Compute means based on centroid assignments
        centroids = compute_means(X, idx, K)
  • 算法的内循环重复执行两个步骤:

    • (i) 分配每个训练示例x^{i}到它最近的质心,和
    • (ii) 使用分配给它的点重新计算每个质心的平均值。
  • 这𝐾钾-均值算法将始终收敛到质心的一些最终均值集。

  • 然而,收敛的解决方案可能并不总是理想的,并且取决于质心的初始设置。

    • 因此,在实践中,K-means 算法通常使用不同的随机初始化运行几次。
    • 在不同随机初始化的这些不同解决方案之间进行选择的一种方法是选择具有最低成本函数值(失真)的解决方案。

您将在接下来的部分中分别实现 K-means 算法的两个阶段。

  • 您将从完成开始find_closest_centroid,然后继续完成compute_centroids

1.1 寻找最近的质心

数据格式:X为矩阵

First five elements of X are:
 [[1.84207953 4.6075716 ]
 [5.65858312 4.79996405]
 [6.35257892 3.2908545 ]
 [2.90401653 4.61220411]
 [3.23197916 4.93989405]]
The shape of X is: (300, 2)

 质心列表为:

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

任务是完成find_closest_centroids.

  • 此函数采用数据矩阵X和内部所有质心的位置centroids
  • 它应该输出一个一维数组idx(其元素数与X相同),其中包含最近质心的索引{ 1 , . . . , 𝐾}, 𝐾是每个训练样本的质心总数。
  • 具体来说,对于每个例子x^{i}我们设置
    其中,
  • c^{i}是最接近的质心的索引𝑥( 𝑖 )(对应于idx[i]起始代码),
  • \mu ^{j}是的位置(值)𝑗th 质心。(存储centroids在起始代码中)

 代码:

def find_closest_centroids(X, centroids):
    """
    Computes the centroid memberships for every example
    
    Args:
        X (ndarray): (m, n) Input values      
        centroids (ndarray): k centroids
    
    Returns:
        idx (array_like): (m,) closest centroids
    
    """

    # Set K
    K = centroids.shape[0]

    # You need to return the following variables correctly
    idx = np.zeros(X.shape[0], dtype=int)

    for i in range(X.shape[0]):
        distance = [] 
        for j in range(centroids.shape[0]):
            norm_ij = np.linalg.norm(X[i] - centroids[j]) #numpy计算几何距离
            distance.append(norm_ij)
        
        idx[i] = np.argmin(distance)
    
    return idx

 1.2 计算质心均值

给定每个点到质心的分配,算法的第二阶段为每个质心重新计算分配给它的点的平均值。

完成compute_centroids以下内容以重新计算每个质心的值

  • 具体来说,对于每个质心\mu _{k}我们设置

    其中,

    • C_{k}是分配给质心的示例集𝑘
    • \left | C_{k} \right |是集合中的示例数C_{k}

     具体来说,如果两个例子说x^{(3)}x^{(5)}被分配到质心𝑘=2, 那么你应该更新质心:

     代码:

def compute_centroids(X, idx, K):
    """
    Returns the new centroids by computing the means of the 
    data points assigned to each centroid.
    
    Args:
        X (ndarray):   (m, n) Data points
        idx (ndarray): (m,) Array containing index of closest centroid for each 
                       example in X. Concretely, idx[i] contains the index of 
                       the centroid closest to example i
        K (int):       number of centroids
    
    Returns:
        centroids (ndarray): (K, n) New centroids computed
    """
    
    # Useful variables
    m, n = X.shape
    
    # You need to return the following variables correctly
    centroids = np.zeros((K, n))
    
    for k in range(K):   
        points = X[idx == k]
        centroids[k] = np.mean(points, axis = 0)
    
    return centroids

 

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

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

相关文章

Seurat -- Cluster the cells --第一部分

文章目录 briefKNN(k-nearest neighbor)简介部分SNN(shared nearest neighbor)简介部分Annoy算法理解Jaccard indexSeurat进行聚类的步骤可视化部分subcluster之间的marker gene具体参数 brief seurat 官方教程的解释如下&#x…

Hash碰撞

Hash碰撞 什么是Hash碰撞 Hash碰撞是指两个不同的输入值,经过哈希函数的处理后,得到相同的输出值,这种情况被称之为哈希碰撞。 例如:两个不同的对象(object1和object2的值)经过Hash函数计算后的&#xf…

科思转债上市价格预测

科思转债 基本信息 转债名称:科思转债,评级:AA-,发行规模:7.249178亿元。 正股名称:科思股份,今日收盘价:67.1元,转股价格:53.03元。 当前转股价值 转债面值…

【进程间通信 之 通信的建立】

目录: 前言进程间通信的目的进程间通信的方式管道1.匿名管道简单示例1 - 消息传输五个特性四种场景简单示例2 - 进程控制对管道的深入理解 2.命名管道简单示例3 -- 不相关进程间通信 system V共享内存简单示例4 - 通知事件消息传输 总结 前言 打怪升级:…

后摩尔时代 , 从有源相控阵天线走向天线阵列微系统

本文围绕高分辨率对地微波成像雷达对天线高效率、低剖面和轻量化的迫切需求 , 分析研究了有源阵列天线的特点、现状、趋势和瓶颈技术 , 针对对集成电路后摩尔时代的发展预测 , 提出了天线阵列微系统概念、内涵和若干前沿科学技术问题 , 分析讨论了天线阵列微系统所涉及的微纳尺…

完全集成的云备份和还原服务——NetApp Cloud Backup

完全集成的云备份和还原服务 NetApp Cloud Backup 提供无缝且经济高效的备份和还原功能,用于保护和归档云端和内部 ONTAP 数据。 为什么选择 NetApp Cloud Backup? 可轻松保护云端和内部 ONTAP 数据 NetApp Cloud Backup 提供无缝且经济高效的备份和还…

科大讯飞星火认知大模型怎么样?

“鉴于SparkDesk服务目前处于内部用户体验阶段,所有与SparkDesk相关的交互内容、技术参数等信息均被视为保密信息。您了解并同意,且有责任对这些保密信息严格保密,您不得以任何方式(包括但不限于截图、录屏、拍照等)披…

Linux shell编程常用命令(sort排序 uniq重复行 set +-x调试脚本 tr压缩替换字符 cut切片)

sort命令 排序 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序 比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 sort [选项] 参数 cat file | sort 选项-n 按照数字进行排序 -r 反向排序 -u 等同于u…

【源码解析】SpringBoot整合AOP原理解析

AOP介绍 AOP(Aspect Oriented Programming)是基于切面编程的,可无侵入的在原本功能的切面层添加自定义代码,一般用于日志收集、权限认证等场景。 AOP基本概念 通知(Advice): AOP 框架中的增强处理。通知…

L1:提示工程的关键原则

提示工程指南:关键原则 一、 环境配置 chatgpt使用有诸多限制,所以采用国产模型来代替,加载开源的chatGLM模型,使用ChatGLM-6b的INT8版本。 chatGLM6b在LLM匿名竞技场中的排名: import os import torch import war…

[学习笔记] [机器学习] 4. [下]线性回归(正规方程、梯度下降、岭回归)

6. 梯度下降和正规方程的对比 问题梯度下降正规方程学习率需要选择合适的学习率不需要求解特点需要多次迭代求解一次运算得出线性问题可以解决可以解决非线性问题可以解决不可以解决时间复杂度难以直接给出的(受到初始值、学习率、迭代次数等多种因素的影响&#x…

学生如何使用chatGTP提升学习能力?

短短两三个月,ChatGPT炸圈范围越来越大,很快就从科技圈来到了教育界。前段时间,北密歇根大学的哲学教授Antony Aumann在批改论文的过程中发现一篇论文好到令人感到震惊。这篇论文逻辑严谨,措辞得当,结构清晰&#xff0…

《JavaEE初阶》Tomcat

《JavaEE初阶》Tomcat 文章目录 《JavaEE初阶》TomcatTomcat是什么下载Tomcat简单介绍Tomcat的文件使用tomcat部署静态页面启动tomcat 部署代码: Tomcat是什么 在学习tomcat之前,我们已经学习了HTTP协议,我们知道HTTP协议是应用层协议. HTTP的客户端是我们的网页和浏览器,而H…

MySQL新增时实现新增或更新操作

MySQL新增时数据重复则更新或不操作,不重复则新增 应用场景实现方案1. REPLACE INTO 语句:2. INSERT INTO ... ON DUPLICATE KEY UPDATE 语句结合事务:3. INSERT INTO ... SELECT ... FROM ... ON DUPLICATE KEY UPDATE 语句:4. 根…

Kyligence一站式数字化建设的新指标

1.数字化时代中小企业的痛点与难点 数字化时代,众多领先企业纷纷利用数字化技术,实现业务精细化运营和降本增效,从而有效提升企业的盈利水平和竞争力。其中最重要的手段就是业务过程数据指标化,通过对指标的定义、监控、分析和洞…

【容器化应用程序设计和开发】2.5 容器化应用程序的安全性和合规性考虑

往期回顾: 第一章:【云原生概念和技术】 第二章:2.1 容器化基础知识和Docker容器 第二章:2.2 Dockerfile 的编写和最佳实践 第二章:2.3 容器编排和Kubernetes调度 第二章:2.4 容器网络和存储 2.5 容器…

python 3.9 安装wordcloud

1. pip install wordcloud 安装不成功,或者安装成功,python ide中不能用。 2. 去网上单独下载适合3.9 的安装包 ,网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 3.选择版本 wordcloud-1.8.1-cp39-cp39-win_amd64…

企业布局新媒体矩阵,如何走得更远?

企业搭建新媒体矩阵有很多好处——扩大品牌声量、丰富内容形式、提高宣传效率、降低运营风险、节省广告成本...... 即便如此,能真正让新媒体矩阵产生如此效果的企业,却是凤毛麟角。 更多的企业,往往冒然入场,也黯然离场&#xff0…

html实现经典坦克大战小游戏

文章目录 1.设计来源1.1 游戏主界面1.2 游戏界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/130617759 html实现经典坦克大战小游戏 ,这是一款很老的游戏,…

矩阵计算(求导)

亚导数 当函数不可微时&#xff0c;不可计算出其普通的导数&#xff0c;此时便需要引入亚导数Example: 函数 y ∣ x ∣ y|x| y∣x∣ 不可微&#xff0c;其亚导数为 ∂ ∣ x ∣ ∂ x { 1 , x > 0 − 1 , x < 0 a , x 0 , a ∈ [ 0 , 1 ] \frac{\partial |x|}{\parti…