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

news2024/11/17 19:40:57

机器学习——聚类算法-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_clusters
        self.max_iters = max_iters

    def fit(self, X):
        n_samples, n_features = X.shape
        centroids_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):
                break

            centroids = new_centroids

        self.labels_ = labels
        self.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.coloradmin.cn/o/1550400.html

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

相关文章

【秒杀】网课视频播放速度太慢,js提升网页视频播放速率,在浏览器中修改视频播放速度

目录 前言(写这篇文章的缘由) 问题描述 解决方法 1、打开开发者工具 2、点击控制台 3、输入下面这行代码 番外 自定义视频速度 番外的番外(这块可以不看) 结语 前言(写这篇文章的缘由) 作为一名2…

看一遍就理解:IO模型详解

大家好,今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~ 什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟IO模型有什么关系?有几种经典IO模…

备考ICA----Istio实验9---熔断Circuit Breaking 实验

备考ICA----Istio实验9—熔断Circuit Breaking 实验 1. 环境准备 创建httpbin环境 kubectl apply -f istio/samples/httpbin/httpbin.yaml kubectl get svc httpbin2. 创建测试用客户端 kubectl apply -f istio/samples/httpbin/sample-client/fortio-deploy.yaml3. 创建Ht…

企业文件交换怎样进行有效防泄密管控?选对方案才能事半功倍

一、数据防泄密面临的挑战 数据流转才能释放价值,在企业生产经营中,数据和文件交换是业务有序开展的基础。文件交换会涉及不同的网络、系统及人员角色,存在泄露的安全风险;为此,不少企业采用或规划采用终端DLP、网络D…

C语言文件操作详解

文件是什么 在我们日常使用的电脑上我们在电脑磁盘上会看到许许多多的文件夹,那里面的东西其实就是文件,为什么我们要使用文件?那是因为我们的电脑肯定会要用来存储东西的,如果没有文件,那么我们的东西都全部存放在内…

ruoyi-nbcio-plus基于vue3的flowable其它元素(目前主要是元素文档)的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

借助剪映软件生成原创视频(真人人声,免VIP)

civilpy:借助各大模型的优点生成原创视频(真人人声)Plus0 赞同 0 评论文章​编辑 是的,剪映也出了声音克隆了,只需要十几秒的录音就可以克隆自己的声音,虽然微瑕,但是对于不习惯机器音的很多创…

python实战之基础篇

1. 注释 # coding utf-8 # 该注释放到文件第一行, 这个注释告诉python解释器该文件的编码集是UTF-82. 导入语句有三种形式 import <模块名> from <模块名> import <代码元素> from <模块名> import <代码元素> as <代码元素别名>3. 获取…

Spring Boot集成JPA快速入门demo

1.JPA介绍 JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术&#xff0c;结束现在 Hibernate&#xff0c;TopLink&am…

Vue3状态管理库--Pinia

Pinia快速入门 一、什么是Pinia &#xff1f; Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品。 Pinia官网链接 提供更加简单的API &#xff08;去掉了 mutation &#xff09;提供符合组合式风格的API &#xff08;和 Vue3 新语法统一&…

微服务(基础篇-006-Docker)

Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间没有任何接口&#xff08;类似 iPhone 的 app&…

使用第三方远程连接工具ssh连接vagrant创建的虚拟机

vagrant默认密码都是vagrant 密码认证默认是关闭的&#xff0c;进入虚拟机&#xff0c;打开密码认证 1、使用命令vi /etc/ssh/sshd_config进入配置&#xff0c;注意要切换到root用户&#xff0c;这个配置root有权限 2、找到PasswordAuthentication默认为no,改为yes 3、重启虚…

R: 网状Meta分析进行模型构建及图形绘制

网状meta分析的制作步骤主要包括&#xff1a; 1. 绘制网状证据图 2. 普通Meta分析&#xff08;两两之间的直接比较&#xff09; 3. 网状Meta分析&#xff08;整合直接比较和间接比较的结果&#xff0c;绘制相关图形&#xff09; 4. 绘制累积概率排序图 5. 三个假设的检验…

【独立开发前线】Vol.23 这个卖Excel课程的网站,月访问量14.5万,年销售额超过200万美金

今天要给大家分享的案例网站是&#xff1a;Miss-Excel 网址是&#xff1a;Miss Excel 这是一个专门销售Excel课程的网站&#xff0c;网址一共有18个系列的视频课程&#xff0c;最便宜的44美金&#xff0c;最贵的1197美金。所有的课程都是网站的创始人Kat Norton录制的&#xf…

SDSX-小米这篇论文牛吹大了,比SD1.5快30倍,比SDXL快60倍

今天在论文集上看到一篇很新的文章&#xff1a; SDXS: Real-Time One-Step Latent Diffusion Models with Image Conditions 大至意思就是&#xff0c;小米公司做了一个新的扩散模型&#xff0c;用的是蒸馏法&#xff08;参见turbo模型 及LCM模型)&#xff0c;速度很快&#…

文生视频大模型Sora的复现经验

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

QtCreator调试时无法显示std::string的内容

在银河麒麟V10或Ubuntu下使用QtCreator调试代码时&#xff0c;std::string类型变量在大多数情况下不显示实际内容&#xff0c;而是显示"<无法访问>"字样&#xff0c;鼠标点击进去也是看不见任何有用信息&#xff0c;这样非常影响调试效率&#xff0c;为此&…

docker 的网络管理

docker应用自带了三种类型的网络&#xff0c;然后我们自己也能自定义网络 roottest-virtual-machine:~# docker network ls NETWORK ID NAME DRIVER SCOPE 4c3e28760cff bridge bridge local afd1493dc119 host host local 5f200e2eaf22 n…

读所罗门的密码笔记04_社会信用

1. 人工智能 1.1. 人工智能可以帮助人们处理复杂的大气问题&#xff0c;完善现有的气候变化模拟&#xff0c;帮助我们更好地了解人类活动对环境造成的危害&#xff0c;以及如何减少这种危害 1.2. 人工智能也有助于减少森林退化和非法砍伐 1.3. 人工智能甚至可以将我们从枯燥…

argocd部署

一、前言 ArgoCD 是一个开源的、持续交付工具&#xff0c;用于自动化部署应用程序到 Kubernetes 集群。它基于 GitOps 理念&#xff0c;通过使用 Git 作为单一的源头来管理应用程序的配置和部署状态&#xff0c;argocd会定时监控git仓库中的yaml配置文件&#xff0c;当git仓库中…