K-means 聚类模型详解

K-means 聚类模型详解

K-means 是一种常用的无监督学习算法,用于将数据集分成 K 个簇。其目标是最小化各个簇内数据点到簇中心的距离平方和。K-means 广泛应用于图像压缩、市场细分、模式识别等领域。

算法步骤
  1. 初始化: 随机选择 K 个初始簇中心(质心)。
  2. 分配: 将每个数据点分配给距离最近的簇中心。
  3. 更新: 重新计算每个簇的质心。
  4. 重复: 重复步骤 2 和 3,直到簇中心不再变化或达到预设的迭代次数。
公式推导

目标函数: 最小化各个簇内的平方误差和(Sum of Squared Errors, SSE)。

( X = { x 1 , x 2 , . . . , x n } ) ( X = \{x_1, x_2, ..., x_n\} ) (X={x1,x2,...,xn}) 为数据集, $ C = {c_1, c_2, …, c_K} $ 为簇中心, $S_i $ 为第 i 个簇中的数据点集合。目标函数为:
J = ∑ i = 1 K ∑ x ∈ S i ∥ x − c i ∥ 2 J = \sum_{i=1}^{K} \sum_{x \in S_i} \|x - c_i\|^2 J=i=1KxSixci2

其中, ∥ x − c i ∥ \|x - c_i\| xci​ 表示数据点 x x x 到簇中心 $ c_i $ 的欧氏距离。

算法步骤

步骤 1: 初始化 C = { c 1 , c 2 , . . . , c K } C = \{c_1, c_2, ..., c_K\} C={c1,c2,...,cK}(随机选择 K 个数据点作为初始簇中心)。

步骤 2: 对每个数据点 $ x_j $​,分配到最近的簇中心:
S i = { x j : ∥ x j − c i ∥ 2 ≤ ∥ x j − c k ∥ 2 , ∀ k , 1 ≤ k ≤ K } S_i = \{x_j : \|x_j - c_i\|^2 \leq \|x_j - c_k\|^2, \forall k, 1 \leq k \leq K\} Si={xj:xjci2xjck2,k,1kK}
步骤 3: 重新计算每个簇的簇中心:
c i = 1 ∣ S i ∣ ∑ x ∈ S i x c_i = \frac{1}{|S_i|} \sum_{x \in S_i} x ci=Si1xSix

步骤 4: 重复步骤 2 和 3,直到簇中心不再变化。

运用示例

下面是一个使用 K-means 算法进行数据聚类的 Python 示例,使用 sklearn 库。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成示例数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42, cluster_std=0.60)

# 可视化数据
plt.scatter(X[:, 0], X[:, 1])
plt.title("Generated Data")
plt.show()

# 使用 K-means 进行聚类
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

# 获取簇中心
centers = kmeans.cluster_centers_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title("K-means Clustering")
plt.show()

在这里插入图片描述

解释
  1. 生成数据: 使用 make_blobs 生成 300 个样本点,分成 4 个簇,标准差为 0.60。
  2. 可视化数据: 使用 plt.scatter 绘制生成的数据。
  3. K-means 聚类: 创建 KMeans 对象,设置簇数为 4,并拟合数据。
  4. 获取聚类结果: 使用 predict 方法获取每个数据点的簇标签。
  5. 获取簇中心: 使用 cluster_centers_ 属性获取簇中心坐标。
  6. 可视化聚类结果: 绘制聚类后的数据点,并标记出簇中心。
优缺点

优点:

  • 简单易理解,实现和解释都很直观。
  • 计算效率高,适用于大规模数据集。

缺点:

  • 需要预先指定簇的数量 K K K
  • 对初始值敏感,不同的初始值可能导致不同的结果。
  • 适用于球形簇,不适用于非球形簇或密度不均匀的簇。

总结

K-means 是一种高效的聚类算法,通过迭代优化簇内距离平方和实现数据的自动分组。尽管有一些限制,如需要预先指定簇数和对初始值敏感,但在许多实际应用中仍然非常有用。通过结合实际数据集进行聚类分析,可以更好地理解数据的结构和模式。

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

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

相关文章

APM2.8内置罗盘校准

如果你有外置罗盘,可以不用校准内置罗盘,可以忽略此文。推荐使用外置罗盘,内置罗盘容易受干扰。 使用内置罗盘需要插入飞控GPS接口旁边的跳线帽。如图: 如果要使用内置罗盘,而又加了GPS的,记得一定要把GPS…

美光拟投巨资在日本广岛建DRAM厂,目标2027年底投产

美光科技(Micron Technology)据日本媒体报道,计划在日本广岛县新建一座DRAM芯片生产工厂,目标最快于2027年底投入运营。这一举措标志着美光在增强其内存芯片生产能力方面的又一重大步伐。 报道称,新工厂的总投资规模预…

【Qt秘籍】[003]-Qt环境变量配置-磨刀不误砍柴工

一、为什么要设置环境变量 ?[原因] 配置PATH环境变量的主要用处在于让操作系统能够识别并执行不在当前工作目录下的可执行文件。具体来说,它的作用包括: 命令执行便捷性:当你在命令行输入一个命令(如java, python或np…

152.找出峰值(力扣)

代码解决 class Solution { public:// 函数用于找到山峰元素的索引vector<int> findPeaks(vector<int>& mountain) {vector<int> result; // 用于存储山峰元素的索引// 遍历数组&#xff0c;从第二个元素到倒数第二个元素for(int i 1; i 1 < mount…

计算机考研|408开始的晚,如何规划复习?

408开始的比较晚不用怕 只需要6个月的复习时间&#xff0c;按照我的复习计划&#xff0c;你至少可以考100这个分数 我的计划是对于基础差的考生的&#xff0c;大佬们就可以绕道了&#xff0c;对于基础差的考生来说&#xff0c;408复习的难点其实在于学好数据结构和计算机组成…

SQL 语言:数据操作

文章目录 SELECT 基本结构简单查询连接查询子查询聚集函数和更名操作分组查询字符串操作集合操作UNION 运算INTERSECT 运算EXCEPT 运算 视图查询和更新WITH 子句其他语句总结 SQL 的数据操作包括 SELECT(查询)、INSERT(插入)、DELETE(删除)和 UPDATE(修改)四条语句。 SELECT 基…

AIGC中国开发者大会:AI Agent中国落地发展现状及多模态结合具身智能的发展展望

引言 2024年5月25日&#xff0c;第三届AIGC中国开发者大会在昆仑巢成功举办。本次大会围绕“AI Agent的国内应用现状及多模态结合具身智能的发展展望”这一主题&#xff0c;邀请了多位知名企业家、投资人以及技术专家&#xff0c;共同探讨大模型在中国各行各业的应用现状及未来…

opencascade 快速显示AIS_ConnectedInteractive源码学习

AIS_ConcentricRelation typedef PrsDim_ConcentricRelation AIS_ConcentricRelation AIS_ConnectedInteractive 简介 创建一个任意位置的另一个交互对象实例作为参考。这允许您使用连接的交互对象&#xff0c;而无需重新计算其表示、选择或图形结构。这些属性是从您的参考对…

ansible批量漏洞升级openssh版本

1、ansible宿主机准备好环境&#xff0c;并写好hosts文件 [rootoxidized ansible]# cat hosts [all] 10.10.200.33 10.10.200.34 10.10.200.35跑playbook之前记得提前发送秘钥 ssh-copy-id 10.10.200.33/34/352、下载好安装包&#xff0c;然后编写yml [rootoxidized ansible]…

C语言 | Leetcode C语言题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; int** generate(int numRows, int* returnSize, int** returnColumnSizes) {int** ret malloc(sizeof(int*) * numRows);*returnSize numRows;*returnColumnSizes malloc(sizeof(int) * numRows);for (int i 0; i < numRows; i) {re…

redis显示RDB error

报错问题&#xff1a;"RDB error" 是指在Redis的RDB持久化过程中出现了错误。Redis的RDB持久化是通过将内存中的数据集快照保存到磁盘中的一种方式。如果在这个过程中遇到问题&#xff0c;Redis会记录一条包含"RDB error"的日志信息。上图错误&#xff0c;…

C++ | Leetcode C++题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ret(numRows);for (int i 0; i < numRows; i) {ret[i].resize(i 1);ret[i][0] ret[i][i] 1;for (int j 1; j &…

Golang | Leetcode Golang题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; func generate(numRows int) [][]int {ans : make([][]int, numRows)for i : range ans {ans[i] make([]int, i1)ans[i][0] 1ans[i][i] 1for j : 1; j < i; j {ans[i][j] ans[i-1][j] ans[i-1][j-1]}}return ans }

SpringBoot 微服务中怎么获取用户信息 token

SpringBoot 微服务中怎么获取用户信息 token 当我们写了一个A接口&#xff0c;这个接口需要调用B接口&#xff0c;但是B接口需要包含请求头内容&#xff0c;比如需要用户信息、用户id等内容&#xff0c;由于不在同一个线程中&#xff0c;使用ThreadLocal去获取数据是无法获取的…

Qt串口异步通信案例(从机线程)

文章目录 串口线程类初始化串口类打开串口并发送数据析构函数 窗口设置窗口函数实现 串口线程类 SlaveThread&#xff08;从机线程&#xff09; 目的&#xff1a;等待并响应来自主机的请求&#xff0c;然后发送预设的响应数据。 关键行为&#xff1a;线程启动后&#xff0c;通过…

AJAX基础知识

定义 Ajax 异步 JavaScript 和 XML &#xff08; async javascript and xml &#xff09;&#xff0c;使用 Ajax 技术网页应用能够快速地将数据更新呈现在用户界面上&#xff0c;而不需要重载&#xff08;刷新&#xff09;整个页面&#xff0c;这使得程序能够更快地回应用户的操…

Python机器学习 Tensorflow + keras 实现CNN

一、实验目的 1. 了解SkLearn Tensorlow使用方法 2. 了解SkLearn keras使用方法 二、实验工具&#xff1a; 1. SkLearn 三、实验内容 &#xff08;贴上源码及结果&#xff09; 使用Tensorflow对半环形数据集分 #encoding:utf-8import numpy as npfrom sklearn.datasets i…

linux系统——bg命令,linux运行的级别

在linux中可以使用bg命令&#xff0c;将进程任务置于后台执行 在这里&#xff0c;使用ping www.baidu.com命令后再使用ctrlz&#xff0c;可以将命令先暂停并保留在后台&#xff0c;jobs可以对任务进行查看 使用runlevel可以查看系统当前的运行级别

数据库自动化管理的六大等级

什么是数据库自动化管理&#xff1f; 数据库自动化管理是指通过使用工具和流程&#xff0c;在尽量减少人为干预的情况下&#xff0c;管理和执行与数据库相关的任务。主要目的当然是提高效率&#xff0c;减少人为错误&#xff0c;确保一致性&#xff0c;并解放 DBA 和开发者&am…

【乐吾乐3D可视化组态编辑器】模型类型与属性

编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 本章主要为您介绍模型的属性功能。 一个模型至少会包含一个节点&#xff08;Node&#xff09;&#xff0c;从节点类型上可以分为转换节点&#xff08;TransformNode&#xff09;、网格&#xff08;Mesh&#xff09;、实例网…