机器学习 | 对K-Means聚类假设的研究演示及实践示例

news2024/9/28 17:25:50

我们在Scikit-learn对K-means假设的调查中探索了揭示算法优势和局限性的场景。我们研究了K-means对不正确的聚类大小的敏感性,它在各向异性分布中面临的困难,它在不同的聚类方差中面临的困难,以及使用合成数据集的大小不均匀的聚类问题。我们希望这些假设的这种可视化表示将澄清K-means的适用性,并强调选择特定于数据特征的聚类算法的重要性。

K-Means聚类

一种称为K-means聚类的无监督机器学习技术用于根据数据中的相似性模式将数据集划分为离散的组或聚类。该方法包括迭代地将数据点分配到聚类中,并优化每个聚类的质心,以减少每个数据点与分配的质心之间的总平方距离。K-means是一种可扩展且有效的方法来发现数据中的底层结构,它被广泛用于分割和模式识别任务。K-means虽然简单,但对于一些具有复杂结构的数据集可能很困难,因为它对初始聚类质心很敏感,并且假设球形,大小相等的聚类。

K-Means聚类中的假设

在我们深入研究代码之前,让我们彻底解释K-Means聚类的几个基本假设:

  • 球形和各向同性:K-means假设集群是球形和各向同性的,这意味着它们的半径在所有方向上近似相等。聚类中心被分配给算法根据聚类内数据点的平均值确定的均值。由于这种假设,K-means容易受到非球形或细长聚类的影响。
  • 方差相等:所有聚类都被假设为具有相同的方差。这表明对于每个聚类,聚类中心周围的数据点分布大致相同。如果聚类的方差差异明显,则K-means可能无法很好地工作。
  • 聚类大小:聚类大小相似性由K-means算法假设。具有更多数据点的聚类对聚类均值的影响更大,因为算法会将每个数据点分配给具有最接近均值的聚类。如果聚类的大小严重失衡,则算法可能无法正确描述底层数据分布。
  • 各向异性分布数据:当K均值聚类中的数据点具有各向异性分布时,它们表示各个维度具有不同扩展的非球形细长聚类。因此,K-means的球形聚类假设被打破,这降低了准确性。对于这种复杂的数据结构,其他技术(如高斯混合模型)可能更合适。

在Scikit Learn中实现k-means假设的演示

导入库

# immporting Libraries
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
 
plt.figure(figsize=(10, 10))
 
# Custom parameters
n_samples_custom = 1600
random_state_custom = 42

合成数据

# Generate blobs with different characteristics
X_custom, y_custom = make_blobs(
    n_samples=n_samples_custom, random_state=random_state_custom)

这段代码使用scikit-learn的make_blobs来创建一个包含1600个样本的合成数据集。然后对数据进行K均值聚类,其中n_clusters=3,聚类以散点图显示。为了重现性,参数random_state_custom和n_samples_custom调节数据集的大小和随机性。

# Incorrect number of clusters
kmeans_1 = KMeans(n_clusters=2, random_state=random_state_custom)
y_pred_custom_1 = kmeans_1.fit_predict(X_custom)
 
plt.subplot(221)
plt.scatter(X_custom[:, 0], X_custom[:, 1], c=y_pred_custom_1)
plt.title("Incorrect Number of Blobs")

在这里插入图片描述
此代码将n_clusters=2的K-means聚类应用于合成数据集X_custom。接下来,使用plt.scatter,最终的聚类分配(y_pred_custom_1)显示在散点图中。“Incorrect Number of Blobs”子图是由子图(221)制成的较大图的一部分。

各向异性地分布簇

# Anisotropicly distributed data
transformation_custom = [[0.5, -0.8], [-0.3, 0.6]]
X_aniso_custom = np.dot(X_custom, transformation_custom)
kmeans_2 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_2 = kmeans_2.fit_predict(X_aniso_custom)

plt.subplot(222)
plt.scatter(X_aniso_custom[:, 0], X_aniso_custom[:, 1], c=y_pred_custom_2)
plt.title("Anisotropicly Distributed Blobs")

在这里插入图片描述
将线性变换(transformation_custom)应用于数据集的原始特征,此代码将向其添加各向异性。接下来,使用n clusters=3,

K-means对变换后的数据进行聚类(X_aniso_custom)。在名为“Anisotropically Distributed Blobs”的子图中包含的散点图中,将显示最终的聚类指定(y_pred_custom_2)。

不等方差

# Different variance
X_varied_custom, _ = make_blobs(n_samples=n_samples_custom, cluster_std=[
								1.0, 3.0, 0.5], random_state=random_state_custom)
kmeans_3 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_3 = kmeans_3.fit_predict(X_varied_custom)

plt.subplot(223)
plt.scatter(X_varied_custom[:, 0], X_varied_custom[:, 1], c=y_pred_custom_3)
plt.title("Unequal Variance")

在这里插入图片描述
此代码使用make_blobs函数创建具有不同聚类标准差的数据集(X_varied_custom)。接下来,将n_clusters=3的K均值聚类应用于数据集,并使用标题为“Unequal Variance”的散点图来可视化聚类分配(y_pred_custom_3)。

大小不一致的blobs

# Unevenly sized blobs
X_filtered_custom = np.vstack(
    (X_custom[y_custom == 0][:500], X_custom[y_custom == 1][:100], X_custom[y_custom == 2][:10]))
kmeans_4 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_4 = kmeans_4.fit_predict(X_filtered_custom)
 
plt.subplot(224)
plt.scatter(X_filtered_custom[:, 0],
            X_filtered_custom[:, 1], c=y_pred_custom_4)
plt.title("Unevenly Sized Blobs")
 
plt.show()

在这里插入图片描述
此代码获取原始数据集(X_custom),并从每个聚类中选择不同数量的样本,以创建大小不均匀的数据集(X_filtered_custom)。修改数据集后,应用n_clusters=3的K-means聚类。然后,在名为“Unevenly sized blobs”的子图中使用散点图显示产生(y_pred_custom_4)的聚类分配。plt.show()显示完整的图形。

结论

在Scikit-Learn对K-means假设的演示中,我们系统地研究了算法假设可能被打破的场景。当我们从大小不正确的聚类开始时,首次观察到K均值对聚类数量的敏感性。各向异性分布的引入突出了K-means在管理非球形聚类方面的局限性,因为该算法默认形成球形聚类。对具有不同方差的聚类的调查突出了K均值在处理不均匀分布的聚类时所面临的困难。最后,不同大小的blob显示了算法对集群大小变化的敏感程度。每个场景都显示了可能的危险,强调理解K-means假设并根据数据集的特征选择合适的聚类方法是多么重要。更可靠的解决方案可以通过替代技术提供,如高斯混合模型,用于各向异性或大小不均匀的簇等复杂结构。该演示强调了根据数据属性仔细选择算法的重要性,并为从业者导航聚类算法的微妙之处提供了有用的见解。

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

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

相关文章

2024.7.11作业

1.使用递归实现 求 n 的 k 次方 #include <stdio.h> int digui(int n,int k) { if(k0) //任何数的0次方等于1 { return 1; } else { return n*digui(n,k-1); //递归 } } int main(int argc,const char *argv[]) { in…

龙旗科技在线测评、招聘笔试 如何通过、考点分析|备考建议

龙旗电子入职在线测验真题考点分析&#xff0c;通过技巧&#xff1f; ​言语逻辑部分的考试时间是10分钟&#xff0c;需要完成10道题目。每题的作答时间被限定为60秒&#xff0c;一旦提交后无法返回修改。这部分的题目类型包括总结中心思想、选词填空和推理文章意思。考生需要快…

大模型真能模拟人类语言?中国人民大学提出新的数据增强方法

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 论文标题:LLM-Generated Natural Language Meets Scaling Laws: New Explorations and Data Augmentation Methods 机构: School of Information Resource Management, Renmin University …

springboot定制化书籍销售系统-计算机毕业设计源码71193

摘要 随着电子商务的快速发展和图书市场的不断变革&#xff0c;定制化书籍销售系统的需求日益凸显。本文介绍了一种基于SpringBoot框架的定制化书籍销售系统的设计与实现。该系统旨在满足用户对于个性化、专业化的书籍需求&#xff0c;为用户提供高效、便捷的定制化购书体验。 …

C# HuaYun出口服务器

直连 串口转网口&#xff1a;通过请求帧写入波特率 或者地址位 或者温度 湿度等数据 读取时候 [0x01,0x03] 写入的时候[0x01&#xff0c;0x03] 写入波特率的时候请求帧 [0x01,0x06,0x07,0xD1,0x01,0x14] 把波特率改成0x01,0x14 namespace _01_HuaYun出口服务器 {public partia…

如何监控别人的聊天记录?三种监控聊天记录的方式,千万别让老板看见

监控别人的聊天记录&#xff0c;无论是出于父母对子女的关心、企业管理层对员工的监管&#xff0c;还是其他目的&#xff0c;都必须在法律许可的范围内进行&#xff0c;并且通常需要获得被监控者的明确同意。 非法监控他人的通信记录是严重侵犯隐私权的行为&#xff0c;违反了…

《昇思25天学习打卡营第18天|onereal》

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film…

pdf压缩文件怎么压缩到小于10M或5m 且文件质量不影响画质清晰度

在数字化办公和学习中&#xff0c;pdf格式因其良好的兼容性和稳定性而受到广泛应用。然而&#xff0c;pdf文件体积较大时&#xff0c;会给我们带来传输和存储上的困扰。本文将为您介绍几种简单有效的方法&#xff0c;帮助您轻松压缩pdf文件&#xff0c;提高传输效率&#xff0c…

掉打面试官之Java的SPI机制理解

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【HMAC(ArkTS)】

HMAC(ArkTS) HMAC是密钥相关的哈希运算消息认证码&#xff08;Hash-based Message Authentication Code&#xff09;&#xff0c;是一种基于Hash函数和密钥进行消息认证的方法。 开发步骤 生成密钥 指定密钥别名。初始化密钥属性集。调用[generateKeyItem]生成密钥&#xf…

武夷山细节决定成败抓质量求生存

在当今竞争激烈的市场环境中&#xff0c;细节决定成败&#xff0c;质量求生存的理念已成为企业发展的关键。蓝鹏测控科技有限公司&#xff0c;一家专业从事工业测量领域的高新技术企业&#xff0c;正是秉持这一理念&#xff0c;在工业测径仪领域取得了显著成就。 蓝鹏测控科技…

tensorflow卷积层操作

全连接NN&#xff1a; 每个神经元与前后相邻层的每一个神经元都有全连接关系。输入是特征&#xff0c;输出为预测结果。 参数个数(前层*后层后层&#xff09; 实际应用时&#xff0c;会先对原始图像进行特征提取&#xff0c;再把提取到的特征送给全连接网络 会先进行若干层提…

复杂度(上卷)

前言 在正式进入今天的主题之前&#xff0c;我们不妨先来回顾一下初步学习数据结构后必须知道的概念。&#x1f3b6; 数据结构 数据结构是计算机存储、组织数据的方式&#xff0c;指相互间存在一种或多种特定关系的数据元素的集合。 &#xff08;没有一种单一的数据结构能够…

在centos7中安装MySQL5.7,是否必须卸载centos7自带的mariadb?

在CentOS 7 中安装 MySQL 5.7 时&#xff0c;不一定必须卸载系统自带的 MariaDB&#xff0c;但为了避免冲突和确保 MySQL 的正常运行&#xff0c;通常建议先卸载 MariaDB。以下是具体的步骤&#xff1a; 卸载 MariaDB&#xff08;如果已经安装&#xff09;&#xff1a; sudo sy…

强化学习驱动的狼人游戏语言智能体战略玩法

Language Agents with Reinforcement Learning for Strategic Play in the Werewolf Game 论文地址: https://arxiv.org/abs/2310.18940https://arxiv.org/abs/2310.18940 1.概述 在AI领域,构建具备逻辑推理、战略决策以及人类沟通能力的智能体一直被视为长远追求。大规模语…

小阿轩yx-NoSQL 之 Redis 配置与优化

小阿轩yx-NoSQL 之 Redis 配置与优化 Redis 数据库介绍 是一个非关系型数据库 关系数据库与非关系型数据库 按照数据库结构划分的 关系型数据库 是一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;一般面向于记录借助集合代数等数学概念和方法处理数据库…

设计模式探索:责任链模式

1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下&#xff1a; 避免将一个请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链传递请求&…

数列分块<2>

本期是数列分块入门<2>。该系列的所有题目来自hzwer在LOJ上提供的数列分块入门系列。 Blog:http://hzwer.com/8053.html sto hzwer orz %%% [转载] 好像上面的链接↑打不开&#xff0c;放一个转载:https://www.cnblogs.…

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…

LabVIEW开发CAN总线多传感器液位检测系统

设计并实现了一个基于CAN总线和LabVIEW的多传感器液位检测系统。该系统利用STM32F107单片机进行模拟信号与数字信号的转换&#xff0c;通过TJA1050实现CAN总线通信&#xff0c;并使用USB-CAN分析仪连接PC。LabVIEW用于数据采集、人机交互界面的设计、数据分析和仪器标定。系统能…