首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >常用聚类算法

常用聚类算法

作者头像
为为为什么
发布2023-06-14 15:12:46
发布2023-06-14 15:12:46
3890
举报
文章被收录于专栏:又见苍岚又见苍岚

聚类或聚类分析是无监督学习问题, 常被用于数据分析,本文记录聚类问题定义,以及常用聚类算法和实现。

聚类

聚类分析,即聚类,是一项无监督的机器学习任务。它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群集。

聚类技术适用于没有要预测的类,而是将实例划分为自然组的情况。 —源自:《数据挖掘页:实用机器学习工具和技术》2016年。

群集通常是特征空间中的密度区域,其中来自域的示例(观测或数据行)比其他群集更接近群集。群集可以具有作为样本或点特征空间的中心(质心),并且可以具有边界或范围。

有许多类型的聚类算法。许多算法在特征空间中的示例之间使用相似度或距离度量,以发现密集的观测区域。因此,在使用聚类算法之前,扩展数据通常是良好的实践。

scikit-learn 库提供了一套不同的聚类算法供选择,我们就以 skikit-learn 库的算法为例列举常用聚类算法与相应实践。

环境配置

需要安装 Anaconda

安装 sklearn 库

1

pip install scikit-learn

聚类数据集

我们将使用 python sk-learn 库中的方法生成测试数据,这些数据是二维的,可以用散点图绘制数据。

引入库

1234567

from sklearn.datasets import *from matplotlib import pyplotfrom pandas import DataFrameimport mtutils as mtcolors = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'purple'}

Blobs

生成代码:

12345678

X, y = make_blobs(n_samples=2000, centers=4, n_features=2)# 散点图,按分类值着色df = DataFrame(dict(x=X:,0, y=X:,1, label=y))fig, ax = pyplot.subplots()grouped = df.groupby('label')for key, group in grouped: group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colorskey)pyplot.show()

Moons

生成代码:

12345678

X, y = make_moons(n_samples=2000, noise=0.1)# 散点图,按分类值着色df = DataFrame(dict(x=X:,0, y=X:,1, label=y))fig, ax = pyplot.subplots()grouped = df.groupby('label')for key, group in grouped: group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colorskey)pyplot.show()

Circles

生成代码:

12345678

X, y = make_circles(n_samples=2000, noise=0.05)# 散点图,按分类值着色df = DataFrame(dict(x=X:,0, y=X:,1, label=y))fig, ax = pyplot.subplots()grouped = df.groupby('label')for key, group in grouped: group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colorskey)pyplot.show()

Classifications

生成代码:

12345678

X, y = make_classification(2000, n_features=2, n_informative=2, n_redundant=0, n_classes=2, n_clusters_per_class=2)# 散点图,按分类值着色df = DataFrame(dict(x=X:,0, y=X:,1, label=y))fig, ax = pyplot.subplots()grouped = df.groupby('label')for key, group in grouped: group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colorskey)pyplot.show()

GaussianQuantiles

生成代码:

12345678

X, y = make_gaussian_quantiles(mean=0,0, cov=5,5, n_samples=2000)# 散点图,按分类值着色df = DataFrame(dict(x=X:,0, y=X:,1, label=y))fig, ax = pyplot.subplots()grouped = df.groupby('label')for key, group in grouped: group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colorskey)pyplot.show()

聚类算法

亲和力传播

1234567891011121314151617181920212223242526272829303132

from sklearn.datasets import *from matplotlib import pyplotfrom pandas import DataFrameimport mtutils as mtdata = mt.pickle_load('blobs.pickle')colors = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'purple', 5:'pink', 6:'black', 7:'yellow', 8:'black', 9:'yellow', 10:'black', 11:'purple'}from numpy import uniquefrom numpy import wherefrom sklearn.datasets import make_classificationfrom sklearn.cluster import AffinityPropagationfrom matplotlib import pyplot# 定义模型model = AffinityPropagation(damping=0.96)# 匹配模型X = data'data'cluster = model.fit(X)# 检索群集clusters = unique(cluster.labels_)print(clusters)# 散点图,按分类值着色df = DataFrame(dict(x=X:,0, y=X:,1, label=cluster.labels_))fig, ax = pyplot.subplots()grouped = df.groupby('label')for key, group in grouped: group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colorskey)pyplot.show()

参考资料

文章链接: https://cloud.tencent.com/developer/article/2296171

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年5月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 聚类
  • 环境配置
  • 聚类数据集
    • 引入库
    • Blobs
    • Moons
    • Circles
    • Classifications
    • GaussianQuantiles
  • 聚类算法
  • 亲和力传播
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档