机器学习——聚类算法-KMeans聚类

机器学习——聚类算法-KMeans聚类

在机器学习中,聚类是一种无监督学习方法,用于将数据集中的样本划分为若干个簇,使得同一簇内的样本相似度高,不同簇之间的样本相似度低。KMeans聚类是一种常用的聚类算法之一,本文将介绍KMeans算法的原理、流程、聚类质量评价方法、优缺点以及KMeans++算法,并通过Python实现一个简单的KMeans聚类算法示例。

KMeans算法流程

KMeans算法的流程如下:

  1. 初始化质心: 从数据集中随机选择K个样本作为初始质心。

  2. 样本分配: 将每个样本分配到距离最近的质心所属的簇中。

  3. 更新质心: 计算每个簇的新质心,即该簇中所有样本的平均值。

  4. 重复步骤2和步骤3,直到满足停止条件为止: 常见的停止条件包括质心不再改变、达到最大迭代次数等。

聚类质量评价方法

常用的聚类质量评价方法包括簇内离差平方和(WCSS)、轮廓系数等。其中,簇内离差平方和(WCSS)用于评估簇内样本的紧密程度,其定义如下:

W C S S = ∑ i = 1 K ∑ x ∈ C i ∥ x − μ i ∥ 2 WCSS = \sum_{i=1}^{K} \sum_{x \in C_i} \|x - \mu_i\|^2 WCSS=i=1KxCixμi2

其中, K K K是簇的个数, C i C_i Ci 是第 i i i个簇, μ i \mu_i μi是第 i i i个簇的质心, ∥ x − μ i ∥ \|x - \mu_i\| xμi是样本 x x x到质心 μ i \mu_i μi的欧氏距离。

KMeans聚类的优缺点

优点:
  • 简单易实现,计算复杂度低。
  • 对大数据集有较好的伸缩性。
缺点:
  • 需要事先指定簇的个数K。
  • 对初始质心的选择敏感,可能会陷入局部最优解。
  • 对噪声和异常值敏感。

KMeans++算法

KMeans++算法是KMeans算法的改进版,通过改进初始质心的选择,提高了算法的效率和稳定性。KMeans++算法的初始质心选择步骤如下:

  1. 随机选择一个样本作为第一个质心。
  2. 对于每个样本,计算其与已选择质心的最小距离(即最近质心)。
  3. 根据每个样本与最近质心的距离的平方,按照概率分布选择下一个质心。
  4. 重复步骤2和步骤3,直到选择足够数量的质心。

Python实现算法

以下是使用Python实现的简单KMeans聚类算法示例:

import numpy as np
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成样本数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)# 定义KMeans聚类算法
class KMeans:def __init__(self, n_clusters, max_iters=300):self.n_clusters = n_clustersself.max_iters = max_itersdef fit(self, X):n_samples, n_features = X.shapecentroids_indices = np.random.choice(n_samples, self.n_clusters, replace=False)centroids = X[centroids_indices]for _ in range(self.max_iters):distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))labels = np.argmin(distances, axis=0)new_centroids = np.array([X[labels == k].mean(axis=0) for k in range(self.n_clusters)])if np.all(centroids == new_centroids):breakcentroids = new_centroidsself.labels_ = labelsself.cluster_centers_ = centroids# 使用KMeans算法聚类
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)# 可视化聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='x', color='red', s=200, label='Centroids')
plt.title('KMeans Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()

在这里插入图片描述

以上代码使用make_blobs函数生成了一个样本数据集,并使用自定义的KMeans类实现了KMeans聚类算法。最后,通过可视化展示了聚类的结果。

总结

KMeans聚类是一种常用的无监督学习算法,通过迭代计算样本的簇心和样本的簇分配,将样本划分为不同的簇。本文介绍了KMeans算法的原理、流程、聚类质量评价方法、优缺点以及KMeans++算法,并通过Python实现了一个简单的KMeans聚类算法示例。KMeans聚类算法可以应用于许多领域,如数据分析、模式识别和图像分割等。

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

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

相关文章

Rust 02.控制、引用、切片Slice

1.控制流 //rust通过所有权机制来管理内存,编译器在编译就会根据所有权规则对内存的使用进行 //堆和栈 //编译的时候数据的类型大小是固定的,就是分配在栈上的 //编译的时候数据类型大小不固定,就是分配堆上的 fn main() {let x: i32 1;{le…

aws使用记录

数据传输(S3) 安装命令行 安装awscli: https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions 直到 aws configure list 可以运行 身份验证: 运行: aws config…

EdgeGallery开发指南

API接口 简介 EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示(融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能,通过浏览器访问时打开的是融合前端的界面,通过IP:Port/urlPref…

【力扣hot100】23 合并K个排序链表(c++)解析

23 合并K个排序链表(c)解析 题解 23 合并K个排序链表(c)解析1.1 暴力求解1.2 逐一比较1.3 优先队列1.4 逐一合并1.5 分治 在解决「合并K个排序链表」这个问题之前,我们先来看一个更简单的问题: 如何合并两个有序链表?…

libVLC 动态视频壁纸

在 Windows 上,你可能需要使用 Windows API 来设置壁纸,而在 Linux 上,你可能需要使用某种桌面环境特有的方法。在 macOS 上,这一功能可能受到限制。 效果图如下所示: 以下是一个简单的示例,说明了如何在 …

【前端学习——js篇】11.元素可见区域

具体见:https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop,元素的上外边框至包含元素的上内边框之间的像素距离,其他offset属性如下图所示: 下面再来了解下clientWidth、clientHeight…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑长周期供需不平衡风险的新型电力系统规划方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

codesys通过moudbus TCP连接西门子1214c,西门子做客户端

思路在codesys中发送数据到西门子,西门子原封不动的将数据传回。 1.首先配置codesys; 我设置了500个,但是好像发不这么多,只能120多个。因为什么来我忘了。但是这里不影响。 2.配置映射: 3.写代码 PROGRAM PLC_PRG VARarySendDa…

生产调度问题分类——机器视角

获取更多资讯,赶快关注上面的公众号吧! 文章目录 单机调度并行机调度流水车间调度作业车间调度柔性作业车间开放车间总结 生产调度问题是实际工作中广泛存在的运筹学问题,可以描述为“给定若干加工任务,根据已有的生产条件&#…

JavaWeb学习笔记01

一、教程简介 全新JAVAWEB(里程碑版) 一套更适合后端工程师学习的WEB教程 All in Java 1、后端 ① Spring全家桶及微服务框架 ② 高性能数据库和消息组件 ③ Web攻击防护安全控制手段 ④ 其他第三方SDK生态环境 ...... 2、前端 ① 视图三大件&…

C是用什么语言写出来的?

C是用什么语言写出来的? C语言的起源和发展是一个迭代过程: 1. 最初的C语言编译器的开发始于对B语言的改进。B语言是由Ken Thompson设计的,它是基于BCPL语言简化而来的。在开始前我有一些资料,是我根据网友给的问题精心整理了一份「 C语言的…

Sublime 彻底解决中文乱码

1. 按ctrl,打开Console,输入如下代码: import urllib.request,os; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHand…

16:00面试,16:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

07_Response

文章目录 案例(请求分发案例) Response响应行响应头响应体特殊响应头refreshContent-typeContent-dispositionlocation 案例(登录案例) 案例(请求分发案例) 场景:有多个请求 Http://localhost:…

逐步学习Go-并发通道chan(channel)

概述 Go的Routines并发模型是基于CSP,如果你看过七周七并发,那么你应该了解。 什么是CSP? "Communicating Sequential Processes"(CSP)这个词组的含义来自其英文直译以及在计算机科学中的使用环境。 CSP…

day 36 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

一遍过。首先把区间按左端点排序,然后右端点有两种情况。 假设是a区间,b区间。。。这样排列的顺序,那么 假设a[1]>b[0],如果a[1]>b[1],就应该以b[1]为准,否则以a[1]为准。 class Solution { public:static bo…

Android中运动事件的处理

1.目录 目录 1.目录 2.前言 3.程序演示 4.第二种程序示例 5.扩展 2.前言 触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事…

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …

K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 在上一章节中,我们详细探讨了Pod的概念、创建、…

逐步学习Go-协程goroutine

参考:逐步学习Go-协程goroutine – FOF编程网 什么是线程? 简单来说线程就是现代操作系统使用CPU的基本单元。线程基本包括了线程ID,程序计数器,寄存器和线程栈。线程共享进程的代码区,数据区和操作系统的资源。 线…