Scikit-Learn K均值聚类

news2024/11/23 22:07:56

Scikit-Learn K均值聚类

    • 1、K均值聚类
      • 1.1、K均值聚类及原理
      • 1.2、K均值聚类的优缺点
    • 2、Scikit-Learn K均值聚类
      • 2.1、Scikit-Learn K均值聚类API
      • 2.2、K均值聚类案例



1、K均值聚类


K-均值(K-Means)是一种聚类算法,属于无监督学习。K-Means在机器学习知识结构中的位置如下:

1.1、K均值聚类及原理


聚类(Clustering)是指将一个数据对象集合划分成簇(子集),使得簇内对象彼此相似,簇间对象不相似。通俗来说,就是将数据划分到不同组中

根据算法原理,常用的聚类算法可分为:基于划分的聚类算法K-Means、基于层次的聚类算法HC、基于密度的聚类算法。本文主要介绍K-Means聚类

K-Means算法起源于1967年,由James MacQueen和J.B.Hartigan提出。K-Means中的K指的是类的数量,Means指均值

K-Means算法的基本原理是:根据样本特征的相似度或距离远近,将样本(N个点)划分成若干个类(K个集群),使得每个点都属于离其最近的中心点(均值)对应的类(集群)

其中,相似度通常使用欧几里得距离来度量,用于计算数据点与质心之间的距离(使用平方):
d ( X i , C j ) = ∣ ∣ X i − C j ∣ ∣ 2 d(X_i,C_j)=||X_i-C_j||^2 d(Xi,Cj)=∣∣XiCj2

其中, X i X_i Xi是数据点, C j C_j Cj是质心

K-Means假设一个样本属于一个类,K-Means的类别是样本的中心(均值);K-Means的损失函数是样本与其所属类的中心之间的距离平方和:
J = ∑ j = 1 k ∑ i = 1 N j ∣ ∣ X i − C j ∣ ∣ 2 J=\sum_{j=1}^{k}\sum_{i=1}^{N_j}||X_i-C_j||^2 J=j=1ki=1Nj∣∣XiCj2

其中, N j N_j Nj表示第 j j j个簇中的样本数量

K-Means算法的本质是物以类聚,其主要执行步骤如下:

  • 初始化聚类中心(随机选取K个样本作为初始的聚类中心)
  • 给聚类中心分配样本(计算各样本与各聚类中心的距离,把每个样本分配给距离它最近的聚类中心)
  • 移动聚类中心(新的聚类中心移动到这个聚类所有样本的均值处)
  • 停止移动(重复第二、第三步,直到聚类中心不再移动为止)

K-Means算法采用的是迭代的方法,得到的是局部最优解

那么,如何确定K值呢?K-Means通常根据损失函数和轮廓系数确定K值, J J J越小,聚类效果越好;轮廓系数越大,聚类效果越好

1.2、K均值聚类的优缺点


2、Scikit-Learn K均值聚类

2.1、Scikit-Learn K均值聚类API


Scikit-Learn提供了K均值聚类算法的API:

class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init='auto', max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='lloyd')

官方对该API的描述为:

K-Means算法通过把样本分离成n个具有相同方差的类的方式来对数据进行聚类,最小化一个称为惯量或簇内平方和的准则。该算法需要指定簇的数量。它可以很好地扩展到大量样本,并已经在许多不同领域的应用领域被广泛使用

k-Means算法将一组N样本X划分成K个不相交的簇C,每个都用该簇中样本的均值 μ j \mu_j μj描述。这个均值通常被称为簇的“质心”;尽管它们处在同一个空间,但它们通常不是从X中挑选出的点,虽然它们是处在同一个空间

K-Means算法旨在选择一个质心,能够最小化惯性或簇内平方和的标准:
∑ i = 0 n min ⁡ μ j ∈ C ( ∣ x i − μ j ∣ 2 ) \sum_{i=0}^{n} \min {\mu{j} \in C}\left(\left|x_{i}-\mu_{j}\right|^{2}\right) i=0nminμjC(xiμj2)

官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

中文官方文档:https://scikit-learn.org.cn/view/383.html

API参数及说明如下:

参数说明
n_clusters要形成的簇数或要生成的质心数,默认为8
init初始化方法,默认为k-means++,表示选择初始的聚类中心之间的距离要尽可能远;其他还有random:从初始质心的数据中随机选择观测值
n_init使用不同质心运行K均值算法的次数种子,默认为auto
max_iterk均值算法的最大迭代次数,默认300
tol收敛阈值,默认为1e-4
random_state确定质心初始化的随机数生成,默认为None
copy_x是否复制原始数据,默认为True
algorithmK-Means要使用的算法,默认为auto,其他参数有fullelkan

常用属性及说明如下:

属性说明
cluster_centers_簇中心坐标
inertia_样本到其最近的聚类中心的距离平方和
n_iter_迭代次数

常用方法及说明如下:

方法说明
fit(X,y)训练K-均值聚类
fit_transform(X)训练K-均值聚类并将X变换为簇距离空间
predict(X)预测X中每个样本所属的最接近的聚类
transform(X)将X转换为簇距离空间

2.2、K均值聚类案例


下面使用样本数据进行演示

创建样本数据:

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

# 生成了包含5个类别的1000条样本数据
X, y = make_blobs(n_samples=1000, centers=5, random_state=1)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=15)

plt.show()

在这里插入图片描述

这里我们指定聚类的数目为5,但是实际情况中我们是不知道聚类的数目是多少的,这需要多次尝试

模型训练与评估:

from sklearn.model_selection import train_test_split
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score   # 轮廓系数法SC

# 划分训练集(80%)和测试集(20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# K-Means聚类器
kmeans = KMeans(n_clusters=5, n_init="auto")

# 训练模型
kmeans.fit(X_train, y_train)

# 模型评估
# 损失函数J(拐点法/手肘法)
print(kmeans.inertia_)   # 1525.6665836724683
# 轮廓系数法SC
print(silhouette_score(X_test, y_test))   # 0.5635285557582774

绘制质心:

from pylab import mpl

# 使用全局字体
plt.rcParams["font.family"] = "SimHei"
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

# 创建一个画板和两个子图(1x2)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))
markers = ["x", "o", "^", "s", "*"]
centers = kmeans.cluster_centers_

axes[0].scatter(X_train[:, 0], X_train[:, 1], marker="o", c=y_train, s=15)
axes[0].set_title("训练集的质心位置")

axes[1].scatter(X_test[:, 0], X_test[:, 1], marker="o", c=y_test, s=15)
axes[1].set_title("测试集的质心位置")

for idx, c in enumerate(centers):
    axes[0].plot(c[0], c[1], markers[idx], markersize=10)
    axes[1].plot(c[0], c[1], markers[idx], markersize=10)

plt.show()

在这里插入图片描述

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

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

相关文章

Linux学习笔记————C 语言版 LED 灯实验

这里写目录标题 一、实验程序编写二、 汇编部分实验程序编写三、C 语言部分实验程序编写四、编译下载验证 汇编 LED 灯实验中,我们讲解了如何使用汇编来编写 LED 灯驱动,实际工作中是很少用到汇编去写嵌入式驱动的,毕竟汇编太难,而…

鸿蒙原OS开发实例:【ArkTS类库单次I/O任务开发】

Promise和async/await提供异步并发能力,适用于单次I/O任务的场景开发,本文以使用异步进行单次文件写入为例来提供指导。 实现单次I/O任务逻辑。 import fs from ohos.file.fs; import common from ohos.app.ability.common;async function write(data:…

【MySQL】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

深入理解 Vue3 中使用 v-model技术实现双向数据绑定

引言 在 Vue3 中,v-model 是一个非常有用的指令,它提供了一种简洁的方式来实现组件之间的双向数据绑定。本文将深入探讨 Vue3 中的 v-model 技术,包括它的工作原理、使用场景以及如何在自定义组件中应用 v-model。 一、v-model 的工作原理 在…

STM32 M3内核寄存器概念

内容主要来自<<M3内核权威指南>> 汇编程序中的最低有效位&#xff08;Least Significant Bit&#xff09;。LSB是二进制数中最右边的位&#xff0c;它代表了数值中的最小单位。在汇编程序中&#xff0c;LSB通常用于表示数据的最小精度或者作为标志位。 ---------…

基于MiniExcel的三种常用导出Excel方法(固定列导出、动态列导出、按模板导出)

为了方便代码编写和测试&#xff0c;把很多代码都放在一个class里面&#xff0c;实际开发根据需要放到对应的目录下即可。 1.使用nuget下载安装miniexcel&#xff1b; 2.编写对应的测试接口&#xff0c;具体代码如下: using Microsoft.AspNetCore.Authorization; using Micr…

sql中如何添加数据?

添加 在 SQL 中添加数据通常使用INSERT语句。INSERT语句用于将新的数据行插入到数据库表中。 基本的INSERT语句语法如下&#xff1a; INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);其中&#xff1a; INSERT INTO&#xff1a;指定要插入数据…

探索设计模式的魅力:AI大模型如何赋能C/S模式,开创服务新纪元

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 AI大模型如何赋能C/S模式&#xff0c;开创服务新纪元 数字化飞速发展的时代&#xff0c;AI大模型…

从第三方数据集成工具迁移到Apache SeaTunnel的实操经验分享

在如今这个数据至上的商业环境中&#xff0c;构建一个高效、可靠的数据仓库对企业来说不仅是一项基础性工作&#xff0c;更是推动业务洞察、决策支持和创新的关键&#xff0c;而数据集成技术在此发挥着至关重要的作用&#xff0c;其时效性和准确性直接影响着下游业务的效率和产…

连接Redis不支持集群错误,ERR This instance has cluster support disabled,解决方案

1. 问题背景 调整redis的配置后&#xff0c;启动程序时&#xff0c; 会报如下错误&#xff1a; [redis://172.16.0.8xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster supp…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

微信小程序开发学习笔记——4.7 api中navigate路由接口与组件的关系

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、跳转 1、方法一&#xff1a;组件 组件-导航-navigator <navigator url"/pages/demo/demo?id123" open-type"reLaunch">go demo page <…

windows搭建ftp实现局域网共享文件

一、开启ftp服务 1.使用 win Q 键&#xff0c;快捷打开搜索框 2.搜索框内搜索 “控制面板” 3. 进入控制面板内选择 ”程序“ 4. 单击进入 “启用或关闭windows功能” 5. 找到并展开“internet information services”、 6. 建议展开后全选 “FTP服务器” 和 “web管理工…

Mysql的MHA高可用集群部署及故障切换

目录 一、MHA概念 1、MHA的组成 2、MHA的特点 二、搭建MysqlMHA 1、实验思路 1.1 MHA架构 1.2 故障模拟 2、实验环境、安装包 3、服务搭建 3.1 所有服务器&#xff0c;关闭系统防火墙和安全机制 3.2 修改master &#xff08;192.168.170.111&#xff09;、slave1&am…

ATFX汇市:美国3月ISM制造业PMI为50.3,远高于前值47.8,经济景气度高

ATFX汇市&#xff1a;虽然国际市场的主流预期是美联储将于今年六月份开启首次降息&#xff0c;但降息的前提条件——美国经济显著衰退——似乎远未到来。此前公布的美国非农就业报告显示&#xff0c;新增非农就业人口27.5万人&#xff0c;处于近12个月的数据峰值水平&#xff1…

Modbus转Profinet网关解决主从设备间通信数据丢失难题

在接到现场关于Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;配置时出现信不稳定或数据丢失的问题的反馈后。对于现场反馈的Modbus转Profinet网关配置问题&#xff0c;特出专项答疑。 解决Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;通信不稳定或数据丢…

ddres( ) 组站星双差方程和设计矩阵

1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值&#xff0c;单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…

CLIP 图文检索,相似度计算

CLIP 是OpenAI提出的神经网络&#xff0c;它可以从自然语言监督中有效地学习视觉概念。 CLIP 可以应用于任何视觉分类基准&#xff0c;只需提供要识别的视觉类别的名称&#xff0c;类似于 GPT-2 和 GPT-3 的“零样本”功能。 相关paper 用法可以参考github 这里举几个使用CLI…

context switch的切换过程(TTBR0的切换/ASID的介绍)

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; context switch的切换 操作系统中可能存在多个任务&#xff0c; 内核调度器周期性地将执行从一项任务转移到另一项任务。在这个过程中&#xff0c;操作系统会保存上一个进程的执…