【聚类 | K-means】原理及推导流程(附模板代码,库手撕实现)

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看? (一)
作者: 计算机魔术师
版本: 1.0 ( 2023.8.27 )

摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

@toc

K-means聚类算法

K-means聚类算法是一种常用的无监督学习算法,用于将数据集划分成K个不同的簇。它的目标是最小化数据点与所属簇中心之间的平方距离和。

以下是K-means聚类算法的详细步骤及数学公式推导:

步骤1: 数据预处理

  • 假设我们有一个包含m个样本的数据集,每个样本有n个特征。首先需要对数据进行预处理,以确保特征之间的尺度一致性。(由于空间位置度量的关系)

步骤2: 初始化中心点

  • 在K-means算法中,我们需要选择K个初始的簇中心点。可以使用不同的初始化方法,例如随机选择K个样本作为中心点。
  • [evaluation & metrics.md](evaluation & metrics.md) 这里通过不同的评价方法确定簇
  • 假设我们选择了K个中心点,表示为μ1, μ2, …, μK。

步骤3: 分配样本到簇

  • 对于每个样本xi,计算它与每个中心点之间的距离。

  • 使用欧氏距离作为距离度量,计算样本xi到中心点μj的距离为:

    d ( x i , μ j ) = ∑ k = 1 n ( x i k − μ j k ) 2 d(xi, μj) = \sqrt{\sum_{k=1}^{n}(xi_k - μj_k)^2} d(xi,μj)=k=1n(xikμjk)2

  • 样本xi分配到与其距离最近的中心点所对应的簇

步骤4: 更新簇中心点

  • 对于每个簇j,计算该簇中所有样本的均值,得到新的中心点。

  • 计算簇j的新中心点μj的坐标为:

    μ j k = 1 ∣ C j ∣ ∑ x i ∈ C j x i k μj_k = \frac{1}{|Cj|}\sum_{xi\in Cj} xi_k μjk=Cj1xiCjxik

步骤5: 重复步骤3和4

  • 重复步骤3和4,直到簇中心点的变化小于某个阈值,或达到最大迭代次数

步骤6: 输出聚类结果

  • 最终,K-means算法会收敛,并输出每个样本所属的簇。

总的来说,K-means算法通过每个数据点的本身距离位置,根据所确定的簇数不断更新中心点,找到一种部分中心之间在一定阈值下有着相同类似特征的群体,这是根据欧几里得距离来衡量的,这其中有两种问题,其可以从名字得出,

  1. 如何确定选择几个簇最为合适?
  2. 单纯使用均值更新严重受离群点影响
实现案例

接下来,我将为您提供使用Python实现K-means聚类算法的经典案例。

使用sklearn库实现K-means聚类算法

from sklearn.datasets import loadiris
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import KMeans

iris=loadiris()
irisdata=iris['data'] 
#提取数据集中的特征
iristarget=iris['target']
#提取数据集中的标签
iris names=iris['featurenames']
#提取特征名
scale=MinMaxScaler()
fit(iris data)
# 训练规则
iris dataScale=scale.transform(iris_data) 
# 应用规则
kmeans=KMeans(n_clusters = -3,random_state=123)
fit(iris dataScale)
#构建并训练模型
print("构建的K-Means模型为: \n", kmeans)

手撕模板实现K-means聚类算法

import numpy as np

def kmeans(X, n_clusters, max_iter=100):
    n_samples, n_features = X.shape
    
    # 初始化中心点
    center_indices = np.random.choice(n_samples, size=n_clusters, replace=False)
    centers = X[center_indices]
    
    for _ in range(max_iter):
        # 分配样本到簇
        distances = np.linalg.norm(X[:, np.newaxis] - centers, axis=-1)
        labels = np.argmin(distances, axis=-1)
        
        # 更新簇中心点
        new_centers = np.array([np.mean(X[labels == k], axis=0) for k in range(n_clusters)])
        
        # 判断是否收敛
        if np.all(centers == new_centers):
            break
        
        centers = new_centers
    
    return labels

# 使用手撕模板实现K-means聚类算法
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
labels = kmeans(X, n_clusters=2)
print(labels)
# [0 0 0 1 1 1]

关于K-means聚类算法的学习资源,以下是一些推荐的参考资料:

  1. K-means聚类算法 - 维基百科
  2. K-means聚类算法 - Scikit-learn文档
  3. K-means聚类算法的数学推导 - 简书
  4. K-means聚类算法详解及Python实现 - CSDN博客

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞
					🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
					 	 🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本 ( 函数 数组 冒泡排序)

目录 什么是函数 使用函数的方法 格式 注意事项 函数的使用 函数可以直接使用 函数变量的作用范围 函数返回值 查看函数 删除函数 函数的传递参数 使用函数文件 ​编辑 拓展递归函数 例:求5的阶乘 什么是数组 使用数组的方法 1.先声明 2.定义数组 3…

MQTT客户端MQTT.fx 1.7.1下载、安装和界面介绍

MQTT.fx是一款基于Eclipse Paho,使用Java语言编写的MQTT客户端工具。支持通过Topic订阅和发布消息,用来前期和物理云平台调试非常方便。 1.下载 1.1.访问官方下载地址下载,但是下载不到1.7.1版本 1.2.在连接网页末尾点击立即下载,…

思维模型 古烈治效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。见异思迁。 1 古烈治效应的应用 1.1 古烈治效应之心理学研究 在一项研究中,研究者让男性和女性参与者分别观看一系列异性的照片,并评估他们的吸引力。在观看完所有…

(三) Windows 下 Sublime Text 3 配置Python环境和Anaconda代码提示

一:新建一个 Python3.7 编译环境。 1 Tools--Build System--New Build System... 修改前: 修改后: 内容: {"cmd":["C:\\Python\\Python37-32\\python.exe","-u","$file"],"file_r…

Java基于springboot+vue开发服装商城小程序

演示视频: 小程序 https://www.bilibili.com/video/BV1rM411o7m4/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1fc411D7V3/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae…

CV计算机视觉每日开源代码Paper with code速览-2023.11.21

点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构:Transformer】Multi-entity Video Transformers for Fine-Grained Video Representation Learning 论文地址&…

WordPress最廉价优化整站的加载速度

为什么说一个站不优化就等于一个人做整个团队的事务导致项目进展慢,网站也是如此 图片、静态文件、php分离加速,加载速度并不是很快但是很协调比单个网站加载速度快许多 一、图片单域名加载设置上传文件路径和域名 以下代码添加在主题目录:fu…

大数据基础 HDFS客户端操作

一、Maven概述 Maven是一个专门用于管理和构建Java项目的工具。我们之所以要使用Maven,是因为Maven可以为我们提供一套标准化的项目结构、一套标准化的构建流程和一套方便的依赖管理机制,这些功能可以使得我们的项目结构更加清晰,导入jar包的…

Effective Modern C++(1.顶层const与底层const)

1.顶层const与底层const的定义 const修饰的变量不可以改变,那么他就是顶层const,如: const int a 10; 那么,对于 const int *const p new int(10); 第二个const就是顶层const,因为他修饰的是p;第一个…

容器技术——Cgroup

目录 容器技术容器技术概述要区分好共享与隔离的概念容器技术的三大核心容器对比虚拟机 namespaceUnionFs容器操作系统的来源操作系统的来源完整操作系统的镜像docker image是什么?如何构成的 如何为容器安装操作系统UnionFS(联合文件系统)的…

23.11.26日总结

图片与文字顶部对齐&#xff1a; <div class"addDishImgBox"><span class"addDishImgZi">商品图片&#xff1a;</span><img :src"myStorePhoto" class"addDishImg"> </div> .addDishImgBox{display: f…

【智能算法】基于黄金正弦和混沌映射思想的改进减法优化器算法

减法优化器&#xff08;Subtraction-Average-Based Optimizer&#xff0c;SABO&#xff09;是2023年刚出的智能优化算法。目前知网中文期刊基本搜不到&#xff0c;并且可以遇见未来一年文章也很少。SABO算法原理简单&#xff0c;算上初始化粒子&#xff0c;总共不超过6个公式。…

女生儿童房装修:原木上下铺搭配粉色调。福州中宅装饰,福州装修

你是否正在为女生儿童房的装修而发愁呢&#xff1f;该如何让房间既适合孩子生活&#xff0c;又能够满足日常学习的需要呢&#xff1f;这里有一个精美的装修案例&#xff0c;或许能够为你提供一些灵感。 1️⃣ 原木上下铺 房间的上下铺采用了原木色调&#xff0c;带来了自然、温…

网络爬虫(Python:Requests、Beautiful Soup笔记)

网络爬虫&#xff08;Python&#xff1a;Requests&#xff09; 网络协议简要介绍一。OSI参考模型二、TCP/IP参考模型对应关系TCP/IP各层实现的协议应用层传输层网络层 HTTP协议HTTP请求HTTP响应HTTP状态码 Requests&#xff08;Python&#xff09;Requests模块支持的http方法GE…

探索深度学习:从理论到实践的全面指南

探索深度学习&#xff1a;从理论到实践的全面指南 摘要&#xff1a; 本文旨在提供一个关于深度学习的全面指南&#xff0c;带领读者从理论基础到实践应用全方位了解这一技术。我们将介绍深度学习的历史、基本原理、常用算法和应用场景&#xff0c;并通过Python代码示例和Tens…

Python | CAP - 累积精度曲线分析案例

CAP通常被称为“累积精度曲线”&#xff0c;用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点&#xff0c;我们在图中绘制了三条不同的曲线&#xff1a; 一个随机的曲线&#xff08;random&#xff09;通过使用随机森林分类器获得的曲线…

docker基础学习笔记

文章目录 Docker简介Linux下安装DockerDocker常用命令Docker网络Docker存储docker-composedockerfile制作镜像私有仓库镜像导入导出参考 Docker简介 定义&#xff1a;Docker是一个开源的应用容器引擎优势&#xff1a; 一键部署&#xff0c;开箱即用&#xff1a;容器使用基于im…

openlayers+jsts 实现对行政区以外的区域进行遮罩(兼容多面的情况,兼容不同的ol版本)

先抛效果图,该区域有很多个小面 之前在网上搜到的方式实现 Openlayers 为目标范围以外的区域添加遮罩 - 知乎 核心代码如下&#xff0c;如果您不需要兼容全国的所有省市&#xff0c;而刚好要加地区又是连贯的区域的话&#xff0c;该方法可行&#xff0c;但是如果需要兼容全国…

微服务实战系列之Nginx(技巧篇)

前言 今天北京早晨竟然飘了一些“雪花”&#xff0c;定睛一看&#xff0c;似雪非雪&#xff0c;像泡沫球一样&#xff0c;原来那叫“霰”。 自然中&#xff0c;雨雪霜露雾&#xff0c;因为出场太频繁&#xff0c;认识门槛较低&#xff0c;自然不费吹灰之力&#xff0c;即可享受…

HarmonyOS开发(七):构建丰富页面

1、组件状态管理 1.1、概述 在应用中&#xff0c;界面一般都是动态的。界面会根据不同状态展示不一样的效果。 ArkUI作为一种声明式UI&#xff0c;具有状态驱动UI更新的特点&#xff0c;当用户进行界面交互或有外部事件引起状态改变时&#xff0c;状态的变会会触发组件的自动…