聚类及Python下实现 K-means 算法

聚类

聚类是无监督学习中的一种重要方法,旨在将数据集中相似的数据对象划分到同一个簇中,使得不同簇之间的数据对象差异尽可能大。在大数据环境下,聚类可以帮助挖掘数据中的隐藏结构和模式,应用场景十分广泛,比如在客户细分领域,根据客户的消费行为、年龄、地域等特征进行聚类,能将客户分为不同群体,方便企业制定针对性的营销策略;在图像识别中,可以依据图像的特征(如颜色、纹理等)聚类来进行图像分类等。

常见的聚类算法除了下面要详细说的 K-means 之外,还有层次聚类(如凝聚式层次聚类、分裂式层次聚类等,通过不断合并或拆分簇来构建聚类层次结构)、密度聚类(例如 DBSCAN 算法,基于数据点的密度来确定簇,能发现任意形状的簇并且能识别出数据集中的噪声点)等。

K-means 算法及其实现

K-means 是一种非常经典且应用广泛的聚类算法,它的核心思想比较简单直观:

  1. 步骤概述

    • 初始化:首先确定要划分的簇的数量 k,然后从数据集中随机选择 k 个数据点作为初始的聚类中心(也可以采用其他初始化方法来提高聚类效果,比如 K-means++ 初始化,尽量让初始聚类中心相互之间距离较远)。
    • 分配数据点到簇:对于数据集中的每个数据点,计算它与各个聚类中心的距离(通常采用欧几里得距离等度量方式),然后将该数据点分配到距离它最近的那个聚类中心所在的簇中。
    • 更新聚类中心:当所有数据点都被分配到相应的簇后,重新计算每个簇的中心位置(比如对于数值型数据,簇中心通常是簇内所有数据点对应维度的均值)。
    • 迭代:重复上述分配数据点和更新聚类中心的步骤,直到聚类中心不再发生明显变化(可以通过设置一个收敛阈值,比如前后两次迭代聚类中心的位置变化小于某个值时,就认为算法收敛)或者达到预设的最大迭代次数为止。
  2. Python 实现示例
    以下是 Python 代码实现 K-means 算法(使用 Python 的 numpy 库来进行数值计算),这里假设输入数据是一个二维的数值型数据集(可以方便可视化展示聚类效果,实际应用中可以处理多维数据):

import numpy as np


def euclidean_distance(point1, point2):
    """计算两点之间的欧几里得距离"""
    return np.sqrt(np.sum((point1 - point2) ** 2))


def k_means(data, k, max_iterations=100, tolerance=1e-4):
    """
    K-means聚类算法实现

    参数:
    data (numpy.ndarray): 输入的数据集,形状为 (样本数, 特征数)
    k (int): 要划分的簇的数量
    max_iterations (int, 可选): 最大迭代次数,默认为100
    tolerance (float, 可选): 收敛阈值,默认为1e-4

    返回:
    centroids (numpy.ndarray): 最终的聚类中心,形状为 (k, 特征数)
    labels (numpy.ndarray): 每个数据点所属的簇的标签,形状为 (样本数,)
    """
    # 随机选择k个初始聚类中心
    indices = np.random.choice(len(data), k, replace=False)
    centroids = data[indices]

    for _ in range(max_iterations):
        # 存储每个数据点所属的簇的标签
        labels = np.zeros(len(data), dtype=int)
        # 分配数据点到簇
        for i, point in enumerate(data):
            distances = [euclidean_distance(point, centroid) for centroid in centroids]
            labels[i] = np.argmin(distances)

        # 更新聚类中心
        new_centroids = np.array([data[labels == j].mean(axis=0) for j in range(k)])

        # 检查聚类中心是否收敛
        if np.all(np.abs(new_centroids - centroids) < tolerance):
            break

        centroids = new_centroids

    return centroids, labels

 调用这个函数进行测试,数据为随机生成的二维数据点

# 生成示例数据
np.random.seed(0)
data = np.random.rand(100, 2)

# 设置簇的数量
k = 3

# 运行K-means算法
centroids, labels = k_means(data, k)

# 简单打印聚类结果(可以进一步可视化展示等)
print("聚类中心:", centroids)
print("数据点所属簇的标签:", labels)

  K-means 算法有助于深入理解聚类的基本原理以及相关的距离计算、迭代优化等操作,但在实际应用中,为了更高效和方便地使用聚类功能,也可以直接调用一些成熟的机器学习库(如 scikit-learn 库中已经实现好且经过优化的 K-means 算法类)。

关于在写作过程中原创与使用AI的声明

本手稿的作者声明,在本作品的写作过程中,我们使用AI只包含:生成式AI图片/视频为了提高文章的观赏性、使用AI编辑器提升文章的可读性和精炼语言、修订程序过程中出现的错误以及添加标准化说明。这种使用是在严格的人为监督和控制下进行的。在应用AI技术后,作者对稿件进行了仔细的审查和编辑,以确保稿件的原创性、准确性和连贯性。

作者理解AI产生的内容可能是不正确的、不完整的或有偏见的。考虑到这一点,作者确保所有AI编辑器修订过的手稿以及语句最后经过了人类的眼睛和判断并彻底作者本人人工修改与校订,以符合人类的阅读习惯。所生成文本遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明,学术使用本文必须按期刊规定标注本文出处,翻用必究。

根据CSDN的原创政策,作者确认没有AI或AI辅助技术被列为本文的作者或合著者。作者完全理解,作者身份带来的责任和任务只能归因于人类并由人类执行,作者在准备本文时遵守了这些指导方针。

参考资料:

K均值(K-means)聚类算法(Python3实现代码)_聚类_helloWorld-GitCode 开源社区

K-means聚类算法原理及python实现_机器学习_杨Zz.-百度飞桨星河社区

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

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

相关文章

开源分布式系统追踪-01-Zipkin-01-入门介绍

分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么&#xff1f; cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …

解决Jmeter HTTP Cookie管理器cookie不生效

解决Jmeter HTTP Cookie管理器cookie不生效问题 解决Jmeter HTTP Cookie管理器cookie不生效问题1、设置Jmeter HTTP Cookie管理器cookie后&#xff0c;发起的请求显示[no cookies]jmeter问题复现&#xff1a;这里同样使用postman进行重试&#xff0c;发现是可以正常获取数据的&…

【6】数据分析检测(DataFrame 1)

学习目标3 昨天&#xff0c;我们学习了Series。 而Pandas的另一种数据类型&#xff1a;DataFrame&#xff0c;在许多特性上和Series有相似之处。 今天&#xff0c;我们将学习DataFrame的相关知识&#xff1a; 1. DataFrame的概念 2. 构造一个DataFrame 3. DataFrame的常用…

LeetCode 热题 100_环形链表 II(26_142_中等_C++)(单链表;哈希表;快慢指针)

LeetCode 热题 100_环形链表 II&#xff08;26_142&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;代码实现&#xff08;思路一&#xff08;哈希表&#xff09;&#xff09;&#xff1a;代码实现&#xff08;思路二&#xff0…

如何通过看板进行跨境电商的圣诞商品数据分析与优化选品流程?

引言 随着圣诞季的临近&#xff0c;跨境电商迎来了重要的销售时机。选品工作对于跨境电商的成功至关重要&#xff0c;直接关系到销售业绩和利润。本文结合相关网页信息&#xff0c;深入探讨跨境电商在圣诞期间如何利用信息整合工具展开选品工作&#xff0c;并优化选品流程。同…

PHP开发设计模式:单例模式

PHP开发设计模式&#xff1a;单例模式 特点&#xff1a; 三私一公&#xff1a;私有的静态变量&#xff08;存放实例&#xff09;&#xff0c;私有的构造方法&#xff08;防止创建实例&#xff09;&#xff0c;私有的克隆方法 (防止克隆对象)&#xff0c;公有的静态方法&#…

使用HTML获取商品详情:技术实现与最佳实践

1. 引言 在电子商务领域&#xff0c;获取商品详情是提升用户体验和增强网站功能性的关键。本文将探讨如何使用HTML结合其他技术手段获取商品详情&#xff0c;并展示如何将这些信息有效地呈现给用户。 2. 理解商品详情页面的结构 在开始编码之前&#xff0c;我们需要了解商品…

MR30分布式IO在新能源领域加氢站的应用

导读 氢能被誉为21世纪最具发展潜力的清洁能源&#xff0c;氢能科技创新和产业发展持续得到各国青睐。氢能低碳环保&#xff0c;燃烧的产物只有水&#xff0c;是用能终端实现绿色低碳转型的重要载体。氢能产业链分别为上游制氢、中游储运以及下游用氢。上游制氢工艺目前大部分…

WEB安全基础知识

WAF全称为Web Application Firewall&#xff08;网页应用防火墙&#xff09;是一种专门设计用来保护web应用免受各种网络攻击的安全防护措施。它位于客户端与服务器之间&#xff0c;监控和过滤HTTP流量&#xff0c;从而拦截恶意请求、识别并防御常见的web攻击。 WAF的主要功能…

【数据结构】B树家族解析:B树、B+树与B*树的理论与B树插入实现(C++)

文章目录 一、常见的搜索结构二、B树2.1 B树概念2.2 开销 三、代码实现3.1 B树节点的设计3.2 B树设计3.3 插入操作实现1. 查找插入位置&#xff08;Find 函数&#xff09;2. 插入关键字到节点&#xff08;InsertKey 函数&#xff09;3. 处理节点分裂&#xff08;Insert 函数&am…

protobuf c++开发快速上手指南

1、环境准备 在c环境使用 protobuf&#xff0c;需要安装protobuf runtime以及protobuf的编译器&#xff1a;protoc&#xff0c;其作用如下表格&#xff1a; 需要安装的环境作用protoc将proto文件编译成c源码protobuf runtime编译c源码需要链接到protobuf库 注意&#xff1a;…

【实践·专业课】内存管理-存储管理-文件系统

1. 基于Linux的简单区块链实现 1.1. 环境准备 确保使用的 Linux 系统&#xff08;如 Ubuntu、CentOS 等&#xff09;已安装 Python 3。 在终端输入python3命令&#xff0c;若出现 Python 解释器的版本信息等提示&#xff0c;则表示已安装&#xff1b; 若提示未找到命令&…

科技潮头浪接天,一桥飞架两界连。EthernetIP转Profinet互译连

本案例介绍的是西门子1200PLC通过稳联技术PROFINET转EtherNetIP网关&#xff08;WL-ABC2006&#xff09;连接HCS-6100系统配置案例。 打开稳联技术Ethernetip转profient网关(WL-ABC2006)配置软件&#xff0c;因为网关作为EtherNetIP从站&#xff0c;所以选择PN2EIP。设置网关Pr…

【网络篇】TCP知识

TCP首部格式&#xff1f; 为什么需要 TCP 协议&#xff1f; TCP 工作在哪一层&#xff1f; IP 层是不可靠的&#xff0c;它不保证网络包的交付、不保证网络包的按序交付也不保证网络包中的数据的完整性。如果需要保障网络数据包的可靠性&#xff0c;那么就需要由上层&#xff0…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者&#xff0c;我总喜欢翻看各种项目附带的论文&#xff0c;虽然大多时候是瞎研究&#xff0c;但却乐在其中。该项目能够完美保留公式、图表、目录和注释&#xff0c;对于需要阅读外文文献的…

Ape-DTS:开源 DTS 工具,助力自建 MySQL、PostgreSQL 迁移上云

Ape-DTS 是一款高效、轻量级且功能强大的开源工具&#xff0c;专注于解决数据迁移、同步、校验、订阅与加工的需求。无论是将自建的 MySQL/PostgreSQL 数据库迁移到云端&#xff0c;还是在不同数据库间进行数据迁移&#xff0c;Ape-DTS 都能为您提供便捷且可靠的解决方案。它特…

【经典论文阅读】Latent Diffusion Models(LDM)

Latent Diffusion Models High-Resolution Image Synthesis with Latent Diffusion Models 摘要 动机&#xff1a;在有限的计算资源下进行扩散模型训练&#xff0c;同时保持质量和灵活性 引入跨注意力层&#xff0c;以卷积方式实现对一般条件输入&#xff08;如文本或边界框…

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟&#xff1a;BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…

Leetcode 每日一题 219.存在重复元素 II

目录 问题描述 输入输出格式 示例 算法分析 过题图片 代码实现 复杂度分析 题目链接 总结 问题描述 给定一个整数数组nums和一个整数k&#xff0c;我们需要判断数组中是否存在两个不同的索引i和j&#xff0c;使得nums[i] nums[j]且|i - j| < k。如果存在这样的i和…

ragflow连不上ollama的解决方案

由于前期wsl默认装在C盘&#xff0c;后期部署好RagFlow后C盘爆红&#xff0c;在连接ollama的时候一直在转圈圈&#xff0c;问其他人没有遇到这种情况&#xff0c;猜测是因为内存不足无法加载模型导致&#xff0c;今天重新在E盘安装wsl 使用wsl装Ubuntu Win11 wsl-安装教程 如…