物以类聚的Kmeans:数据分群的暴力美学

物以类聚的Kmeans:数据分群的暴力美学

本文用三维可视化解析Kmeans聚类如何将混沌数据划出清晰边界,从算法原理、数学推导、评估指标到Python实战,揭示“无监督学习”的暴力美学与致命陷阱。

聚类算法


文章摘要 🔍

《Kmeans聚类:算法暗藏5大致命陷阱?手把手教你成为分群大师!》

当你的数据没有标签时,如何让机器自动发现隐藏规律?Kmeans用最暴力的几何划分,完成从用户分群到图像压缩的跨界统治。但你可知道:

初始点选择是生死劫:随机种子竟能让结果天差地别?Kmeans++如何破解魔咒
肘部法则暗藏视觉骗局:90%人看不懂的轮廓系数才是终极判官
维度诅咒现形记:高维数据聚类为何像大海捞针?PCA降维竟是救命稻草
算法克星数据集:环形分布数据如何让Kmeans彻底崩溃
工业级调参秘籍:Sklearn参数组合技巧+聚类效果可视化神技

从数学证明到代码实战,从算法缺陷到改进方案,这是数据分析师的聚类决策指南!


一、Kmeans的核心思想:以中心定乾坤

定义:K-means是一种基于距离迭代的划分式聚类算法,通过最小化样本到簇中心的距离平方和来划分数据。

形象比喻
假设你是快递站长,要在城市中设立k个配送中心,目标让所有居民点到最近配送中心的总距离最短。Kmeans的求解过程就是不断优化配送中心位置的过程。

数学表达
目标函数(惯性值,Inertia)定义为:
J = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 J = \sum_{i=1}^k \sum_{x \in C_i} ||x - \mu_i||^2 J=i=1kxCi∣∣xμi2
其中:

  • C i C_i Ci表示第i个簇
  • μ i \mu_i μi是该簇的质心坐标
  • ∣ ∣ x − μ i ∣ ∣ 2 ||x - \mu_i||^2 ∣∣xμi2是欧氏距离平方

二、算法步骤:暴力迭代四部曲

  1. 随机初始化:从数据中随机选取k个点作为初始质心
  2. 分配阶段:计算每个样本到各质心的距离,将其划入最近簇
  3. 更新阶段:重新计算每个簇的质心(坐标均值)
  4. 收敛判断:当质心变化小于阈值或达到最大迭代次数时停止

动态演示


三、效果评估:不仅仅是准确率

1. 肘部法则(Elbow Method)

绘制不同k值对应的惯性值曲线,选择拐点作为最佳k值:

from sklearn.cluster import KMeans
import matplotlib.pyplot as pltinertia = []
for k in range(1, 10):model = KMeans(n_clusters=k)model.fit(X)inertia.append(model.inertia_)plt.plot(range(1,10), inertia, 'bo-')
plt.xlabel('k')
plt.ylabel('Inertia')
plt.title('Elbow Method')
plt.show()

输出

2. 轮廓系数(Silhouette Coefficient)

综合衡量样本与自身簇、最近簇的紧密程度,范围[-1,1]:
s = b − a max ⁡ ( a , b ) s = \frac{b - a}{\max(a, b)} s=max(a,b)ba

  • a a a: 样本与同簇其他点的平均距离
  • b b b: 样本到最近其他簇的平均距离
from sklearn.metrics import silhouette_score
print(f"Silhouette Score: {silhouette_score(X, labels):.2f}")

四、应用场景:从商业智能到图像处理

领域应用案例实现效果
用户分群电商用户价值等级划分RFM模型结合聚类发现高价值客户
图像压缩将图片颜色聚类为256色用簇中心代替相似像素值
异常检测信用卡交易聚类识别离群点小簇样本即为异常交易
生物信息学基因表达数据聚类发现细胞类型揭示未知的生物亚群

五、致命缺陷与改进方案

1. 初始值敏感陷阱

问题:随机初始质心可能导致局部最优
解决方案

  • K-means++:优先选择距离较远的点作为初始中心
  • 多次初始化:取多次运行中惯性值最小的结果
KMeans(n_clusters=3, init='k-means++', n_init=10)

2. 球形假设局限

问题:默认使用欧氏距离,擅长发现球形簇
反例

改进算法

  • DBSCAN:基于密度的聚类
  • Spectral Clustering:谱聚类突破几何限制

3. 高维灾难

问题:维度越高,距离计算越无意义
改进方案

  • PCA降维:保留主成分后再聚类
  • 特征选择:筛选相关性高的特征

六、Python实战:客户细分案例

1. 数据准备

import pandas as pd
from sklearn.preprocessing import StandardScaler# 载入零售数据集
data = pd.read_csv('customer_data.csv')
X = data[['AnnualIncome', 'SpendingScore']]# 标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

2. 确定最佳k值

plt.figure(figsize=(12,4))
plt.subplot(121)
# 肘部法则绘图代码见上文plt.subplot(122)
sil_scores = []
for k in range(2, 10):model = KMeans(n_clusters=k)labels = model.fit_predict(X_scaled)sil_scores.append(silhouette_score(X_scaled, labels))
plt.plot(range(2,10), sil_scores, 'ro-')
plt.title('Silhouette Scores')
plt.show()

3. 聚类可视化

model = KMeans(n_clusters=5)
labels = model.fit_predict(X_scaled)plt.scatter(X_scaled[:,0], X_scaled[:,1], c=labels, cmap='viridis')
plt.scatter(model.cluster_centers_[:,0], model.cluster_centers_[:,1], s=200, c='red', marker='X')
plt.xlabel('标准化年收入')
plt.ylabel('标准化消费评分')
plt.title('客户分群结果')
plt.show()

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

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

相关文章

正式页面开发-登录注册页面

整体路由设计: 登录和注册的切换是切换组件或者是切换内容(v-if和 v-else),因为点击两个之间路径是没有变化的。也就是登录和注册共用同一个路由。登录是独立的一级路由。登录之后进到首页,有三个大模块:文章分类&…

fopen的打开方式

fopen的打开方式 FILE *fopen(const char *filename, const char *mode); filename表示文件名字, mode表示打开的文件方式

Docker 常用指令手册(学习使用)

CentOS Docker 实用指令手册 1. 安装与配置 # CentOS 安装Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl st…

PostgreSQL中的外键与主键

在 PostgreSQL 中,外键(Foreign Key) 是一种用于建立表间关联的数据库约束机制,其核心作用与主键(Primary Key)有显著区别。以下是详细解析: 一、外键的定义与作用 定义 外键是表中的一个或多个…

NFC拉起微信小程序申请URL scheme 汇总

NFC拉起微信小程序,需要在微信小程序开发里边申请 URL scheme ,审核通过后才可以使用NFC标签碰一碰拉起微信小程序 有不少人被难住了,从微信小程序开发社区汇总了以下信息,供大家参考 第一,NFC标签打开小程序 https://…

如何使用clip模型进行OOD

使用CLIP模型进行OOD检测(Out-of-Distribution Detection) 的核心思路是:利用CLIP的多模态对齐能力(图像和文本的联合嵌入空间),通过计算输入样本与已知类别语义的匹配度,判断其是否属于已知分布。 CLIP的…

Word 插入图片会到文字底下解决方案

一、现象描述 正常情况下,我们插入图片都是这样的。 但有时突然会这样,插入的图片陷于文字底部。 二、网上解决方案 网上有教程说,修改图片布局选项,从嵌入型改成上下型环绕。改完之后确实有用,但是需要手动拖动图片…

1. HTTP 数据请求

相关资源: 图片素材📎图片素材.zip 接口文档 1. HTTP 数据请求 什么是HTTP数据请求: (鸿蒙)应用软件可以通过(鸿蒙)系统内置的 http 模块 和 Axios,通过 HTTP 协议和服务器进行通讯 学习核心Http请求技术: Http模块 - 属于鸿…

【我的 PWN 学习手札】House of Husk

House of Husk House of Husk是利用格式化输出函数如printf、vprintf在打印输出时,会解析格式化字符如%x、%lld从而调用不同的格式化打印方法(函数)。同时C语言还提供了注册自定义格式化字符的方法。注册自定义格式化字符串输出方法&#xf…

CTF-web: 查看python代码抽象语法树

抽象语法树(Abstract Syntax Tree,简称 AST)是源代码的树状表示,展示了代码的语法结构。在 Python 中,ast 模块可以帮助你解析和操作 Python 代码的 AST。 1. 使用 ast 模块解析 Python 代码 我们可以使用 ast.parse …

【多模态】Magma多模态AI Agent

1. 前言 微软杨建伟团队,最近在AI Agent方面动作连连,前两天开源了OmniParser V2,2月26日又开源了Magma,OmniParser专注在对GUI的识别解析,而Magma则是基于多模态技术,能够同时应对GUI和物理世界的交互&…

Linux系统Pycharm界面卡死无法显示其他界面

1、使用如下代码查看Pycharm的进程 ps aux | grep pycharm2、使用kill关闭所有pycharm进程 kill -9 <替换为你进程的PID>不确定可以执行如下代码&#xff0c;直接全部关闭&#xff1a; pkill -9 -f pycharm3、如果界面还是存在并且仍然卡死 如果 pycharm 界面仍然显…

QT异步编程之线程池QThreadPool

一、概述 在一个应用程序中&#xff0c;我们需要多次使用线程&#xff0c;也就意味着&#xff0c;我们需要多次创建并销毁线程。而创建线程并销毁线程的过程势必会消耗内存。QThreadPool是Qt框架中用于管理线程池的类。它提供了一种高效的方式来管理和重用线程&#xff0c;从而…

Python爬虫:WebAssembly案例分析与爬取实战

文章目录 一、WebAssembly简介1.1 什么是WebAssembly?1.2 WebAssembly的优势1.3 WebAssembly 的使用场景1.4 WebAssembly 对爬虫的挑战二、WebAssembly案例分析2.1 案例一:在线游戏2.2 案例二:图像处理应用三、Python爬虫实战:处理WebAssembly模块3.1 案例一3.2 案例二四、…

vue3配置端口,比底部vue调试

import { fileURLToPath, URL } from ‘node:url’ import { defineConfig } from ‘vite’ import vue from ‘vitejs/plugin-vue’ import vueJsx from ‘vitejs/plugin-vue-jsx’ // 关闭vue底部调试模式 // import vueDevTools from ‘vite-plugin-vue-devtools’ // htt…

算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器

一、前言 本文相关的全部源码和RtspSever库&#xff0c;我已打包上传&#xff0c;欢迎大家免费下载&#xff0c;testRTSPSever。 每一个嵌入式视觉算法工程师&#xff0c;都应该有一套属于自己的算法仿真和测试环境。可以方便地进行视频、图像等素材进行在线导入&#xff0c;可…

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2)

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2) 前言12. LangChain原理及agents构建Gradio UI12.2 学习资料12.2.1 学习文档12.2.2 用途示例12.2.3 OpenAI和DeepSeek例程1. OpenAI示例2. DeepSeek例程参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradi…

盛京开源社区加入 GitCode,书写东北开源生态新篇章

在数字化转型与开源技术蓬勃发展的浪潮下&#xff0c;开源社区已成为推动技术创新的核心力量。盛京开源社区&#xff08;SJOSC&#xff09;作为沈阳地区的开源交流平台&#xff0c;始终致力于连接开发者、企业及高校&#xff0c;构建区域技术生态圈。 现在&#xff0c;盛京开源…

安装Git(小白也会装)

一、官网下载&#xff1a;Git 1.依次点击&#xff08;红框&#xff09; 不要安装在C盘了&#xff0c;要炸了&#xff01;&#xff01;&#xff01; 后面都 使用默认就好了&#xff0c;不用改&#xff0c;直接Next&#xff01; 直到这里&#xff0c;选第一个 这两种选项的区别如…

Vue.js计算属性

计算属性​ 基础示例​ 模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。比如说,我们有这样一个包含嵌套数组的对象: js const author = reactive({name: John Doe,books: [Vue 2 - Advanced Guide,Vue 3 - Bas…