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

我们在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_blobsplt.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.mzph.cn/web/43866.shtml

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

相关文章

准备工作+1、请求和响应+2、模型和管理站点

Django快速入门——创建一个基本的投票应用程序 准备工作1、创建虚拟环境2、安装django 1、请求和响应(1)创建项目(2)用于开发的简易服务器(3)创建投票应用(4)编写第一个视图1、编写…

家用激光投影仪品牌排行榜:这几个品牌口碑好产品好最适合家用

现在人们生活水平提升,对投影这类产品的认知接受度也提升,有条件的家庭都想在家里整一个家庭影院,对于这些消费者来说挑选一台性价比高的家用投影至关重要,既省到钱又买对了产品;投影市场发展迅速目前市面上大大小小的…

mongo数据库迁移

前言 mongo数据库迁移的方式目前常见的有两种: 1,mongodump与mongorestore 2,mongoimport与mongoexport 二者主要区别有: 1、mongoexport 可以导出json和csv格式, mongodump导出的是bson可读性不如前者 2,…

在Windows 10上快速显示桌面的几种方法,总有一种适合你

序言 有时你需要在Windows 10中快速查看你的桌面,但你不想乏味地最小化每个打开的应用程序窗口,或者移动它们并丢失它们的布局。幸运的是,有几种方法可以让你快速查看桌面,然后从你停止的地方重新开始。 如何使用任务栏按钮显示桌面 假设你正在随意浏览你最喜欢的网站,…

服了,jenkins找不到advanced

新手下载的最新版本,过新手入门的时候一直过不去,就跳过了。 想下载一个汉化,还下载不了。根据提示搜索,结果大家让去advanced找url,也找不到。

FreeRTOS 队列

队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存 储数量有限、大小固定的多个数据,队列中的每一个数据叫做队列项目,队列能够存储队列项 目的最大数量称为队列的长度,在创建队列的时候,就需要指…

揭秘与应对:病毒伪装文件夹的数据恢复策略

在数字时代,数据安全是每个人不可忽视的重要议题。而伪装文件夹,作为一种狡猾的数据安全威胁,正逐渐浮出水面,成为用户需要警惕的对象。这些伪装文件夹看似普通,实则隐藏着不为人知的秘密,它们通过模仿正常…

linux系统操作/基本命令/vim/权限修改/用户建立

Linux的目录结构: 一:在Linux系统中,路径之间的层级关系,使用:/来表示 注意:1、开头的/表示根目录 2、后面的/表示层级关系 二:在windows系统中,路径之间的层级关系,使用:\来表示 注意:1、D:表示…

移动应用性能收集工具原理解析

性能收集分析相关工具总览 收集、分析、展示移动应用性能数据的工具很多,大致可以分为如下几类。例如可收集多项性能指标的移动性能工具,perfdog,Solopi,其中Solopi开源,pefdog商业工具。可进行Crash分析的工具&#x…

猫超卡怎么使用?

天猫超市卡好像只能买天猫的东西 但是有时候淘宝、京东打折比天猫的单价还便宜 这样的话,猫超卡好像也没多大用处 这不,上个月618凑单的东西比在天猫超市买划算多了 最后我直接把猫超卡在收卡云上折现了,超划算

编程学单词:delta(希腊字母Δ/δ)

希腊字母表的第四个字母,大写为Δ,小写为δ。 (笔记模板由python脚本于2024年07月11日 12:32:56创建,本篇笔记适合喜欢写代码,更喜欢鼓捣Python的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.pyth…

算法 | NOIP1999 Cantor表

算法篇——Cantor的数表 - SteveWang - 博客园 (cnblogs.com) #include <bits/stdc.h> using namespace std; int high(int n) {return n*(n1)/2; } int main() {int k;cin>>k;int n1;while(1){if(high(n)>k){break;}n;} int mhigh(n);int wm-k1;if(n%20){cout…

Arcgis Api 三维聚合支持最新版API

Arcgis Api 三维聚合支持最新版API 最近有同学问我Arcgis api 三维聚合&#xff0c;官方还不支持三维聚合API&#xff0c;二维可以。所以依旧是通过GraphicLayers 类来实现&#xff0c;可支持最新Arcgis Api版本 效果图&#xff1a;

《计算机研究与发展》投稿经验

前言 记录下投计研展正刊的经验。跟专刊不同哈&#xff0c;专刊会更快&#xff0c;我看好像也有专刊的经验分享。【计算机研究与发展投稿记录】 期刊简介 来源计研展官网&#xff1a; 《计算机研究与发展》是中国科学院计算技术研究所和中国计算机学会联合主办的学术性期刊&a…

盲人出行体验攻略:蝙蝠避障,点亮前行的明灯

在繁华喧嚣的都市中&#xff0c;每一步都充满了未知与挑战&#xff0c;而对于盲人朋友们来说&#xff0c;出行更是一场无声的冒险。他们凭借着内心的勇气和坚韧的意志&#xff0c;在黑暗中摸索前行&#xff0c;每一步都承载着对生活的热爱与追求。今天&#xff0c;我们要深入探…

FLStudio21.3.12中文破解版本安装包win+mac电脑安装包下载

&#x1f3a4; FL Studio 21中文版&#xff1a;音乐制作新宠&#xff0c;让你的创作起飞&#xff01; 嗨&#xff0c;亲爱的音乐创作者们&#xff01;&#x1f44b;今天要和大家分享一个让我超级兴奋的宝藏软件——FL Studio 21中文版&#xff01;这不仅仅是一款音乐制作软件&…

STM32串口工作原理

STM32的串口是相当丰富的&#xff0c;功能也很强劲。最多可提供5 路串口&#xff0c;有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIRENDEC 规范(仅串口3支持)、具有DMA等。 串口最基本的设置&#xff0c;就是波特率的设置。STM32的串口使…

移动应用稳定性测试

移动应用稳定性测试 使用Monkey等工具进行移动应用稳定性测试是一种常见的自动化测试方法。Monkey工具可以自动生成各种随机事件来模拟用户操作&#xff0c;从而测试应用在不同情况下的表现。在执行monkey命令后&#xff0c;主要观察以下的结果信息来评估移动应用的稳定性。 崩…

前后端通信 —— HTTP/HTTPS

目录 一、HTTP/HTTPS 简介 1、HTTP 2、HTTPS 二、HTTP 工作过程 三、HTTP 消息 1、HTTP消息结构 2、HTTP消息示例 四、HTTP 方法&#xff08;常用&#xff09; 1、GET 2、POST 3、PUT 4、DELETE 5、GET与POST对比 五、HTTP 状态码&#xff08;常用&#xff09; …

实用调试技巧(Visual Studio)

目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug&#xff1a;通常为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…