文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用聚类分析分割数据

2024-11-29 19:56

关注

译者 | 布加迪

审校 | 重楼

本文揭示了聚类分析在分割、分析和洞察相似数据组方面具有的潜力。

机器学习不仅仅涉及做预测,还涉及其他无监督过程,其中聚类尤为突出。本文介绍了聚类和聚类分析,着重表明了聚类分析在分割、分析和洞察相似数据组方面具有的潜力。

什么是聚类?

简单来说,聚类就是将相似的数据项分组在一起,这好比在杂货店里将相似的水果蔬菜摆放在一起。

不妨进一步阐述这个概念:聚类是一种无监督学习任务,涉及一系列广泛的机器学习方法,假设数据未标记或未先验分类,旨在发现其底层的模式或洞察力。具体来说,聚类的目的是发现有相似特征或属性的数据观测组。

以下是聚类在众多机器学习技术中所处的位置:

为了更好地理解聚类概念,不妨想想在超市中寻找有相似购物行为的客户群,或者将电子商务门户网站中的大量产品分门别类,这些是涉及聚类方法的真实场景的常见例子。

常见的聚类技术

数据聚类的方法有好多种,最流行的三种方法如下:

聚类和聚类分析一样吗?

下图表明了这两个经常混淆的术语之间的区别和关系。

实际例子

不妨现在开始关注聚类分析,为此举一个实际的例子:

注意:本例中附带的代码,假设你熟悉Python语言的基础知识和一些库,比如Sklearn(用于训练聚类模型)、Pandas(用于数据整理)和Matplotlib(用于数据可视化)。

我们将使用帕尔默群岛企鹅(https://www.kaggle.com/datasets/parulpandey/palmer-archipelago-antarctica-penguin-data)数据集阐述聚类分析,该数据集含有对阿德利企鹅、巴布亚企鹅和帽带企鹅三种不同物种的数据观测。这个数据集在训练分类模型方面非常流行,但在寻找数据聚类方面也颇有用处。加载数据集文件后,我们要做的就是假设“species”类属性是未知的。

import pandas as pd
penguins = pd.read_csv('penguins_size.csv').dropna()
X = penguins.drop('species', axis=1)

我们还将从数据集中删除描述企鹅性别和观测到该物种所在岛屿的两个类别特征,留下其余的数字特征。我们还将已知的标签(species)存储在一个单独的变量y中:它们便于稍后将获得的聚类与数据集中实际的企鹅分类进行比较。

X = X.drop(['island', 'sex'], axis=1)
y = penguins.species.astype("category").cat.codes

使用下面几行代码,我们就可以运用Sklearn库中可用的k -means聚类算法,在我们的数据中找到k个聚类。我们只需指定我们想要找到的聚类的数量,在本文中,我们将数据分成k=3聚类:

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 3, n_init=100)
X["cluster"] = kmeans.fit_predict(X)

上面最后一行代码存储了聚类结果,即分配给每个数据实例的聚类的id,存储在名为“cluster”的新属性中。

接下来可以生成聚类的一些可视化图来分析和解释它们了!下面的代码片段有点长,但可以归结为生成两个数据可视化图:第一个显示了两个数据特征(喙长culmen length和前肢长flipper length)周围的散点图以及每个观测值所属的聚类,第二个可视化图显示了每个数据点所属的实际企鹅物种。

plt.figure (figsize=(12, 4.5))
# Visualize the clusters obtained for two of the data attributes: culmen 
length and flipper length
plt.subplot(121)
plt.plot(X[X["cluster"]==0]["culmen_length_mm"],
X[X["cluster"]==0]["flipper_length_mm"], "mo", label="First cluster")
plt.plot(X[X["cluster"]==1]["culmen_length_mm"],
X[X["cluster"]==1]["flipper_length_mm"], "ro", label="Second cluster")
plt.plot(X[X["cluster"]==2]["culmen_length_mm"],
X[X["cluster"]==2]["flipper_length_mm"], "go", label="Third cluster")
plt.plot(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,2], "kD", 
label="Cluster centroid")
plt.xlabel("Culmen length (mm)", fontsize=14)
plt.ylabel("Flipper length (mm)", fontsize=14)
plt.legend(fontsize=10)
# Compare against the actual ground-truth class labels (real penguin 
species)
plt.subplot(122)
plt.plot(X[y==0]["culmen_length_mm"], X[y==0]["flipper_length_mm"], "mo", 
label="Adelie")
plt.plot(X[y==1]["culmen_length_mm"], X[y==1]["flipper_length_mm"], "ro", 
label="Chinstrap")
plt.plot(X[y==2]["culmen_length_mm"], X[y==2]["flipper_length_mm"], "go", 
label="Gentoo")
plt.xlabel("Culmen length (mm)", fontsize=14)
plt.ylabel("Flipper length (mm)", fontsize=14)
plt.legend(fontsize=12)
plt.show

以下是可视化图:

通过观测这些聚类,我们可以得出第一个结论:

这就引出了一个问题:如果我们尝试根据用于训练模型的任何其他两个变量可视化我们的聚类会怎么样?

不妨可视化企鹅的体重(克)和喙长(毫米)。

plt.plot(X[X["cluster"]==0]["body_mass_g"],
X[X["cluster"]==0]["culmen_length_mm"], "mo", label="First cluster")
plt.plot(X[X["cluster"]==1]["body_mass_g"],
X[X["cluster"]==1]["culmen_length_mm"], "ro", label="Second cluster")
plt.plot(X[X["cluster"]==2]["body_mass_g"],
X[X["cluster"]==2]["culmen_length_mm"], "go", label="Third cluster")
plt.plot(kmeans.cluster_centers_[:,3], kmeans.cluster_centers_[:,0], "kD", 
label="Cluster centroid")
plt.xlabel("Body mass (g)", fontsize=14)
plt.ylabel("Culmen length (mm)", fontsize=14)
plt.legend(fontsize=10)
plt.show

这个似乎非常清楚!现在我们把数据分成了易于辨别的三组。进一步分析我们的可视化图,我们可以从中获得更多的发现:

结语

本文阐述了聚类分析的概念和实际应用,即在数据中找到有相似特征或属性的元素子组,并分析这些子组从中获取有价值或可操作的洞察力。从市场营销、电子商务到生态项目,聚类分析被广泛应用于众多实际领域。

原文Using Cluster Analysis to Segment Your Data,作者:Ivan Palomares Carrascosa

来源:51CTO内容精选内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯