这款开源神器,让聚类算法从此变得简单易用

news/2024/5/19 15:05:45 标签: 算法, 聚类, 支持向量机, python, 机器学习

Scikit-Learn 以其提供的多个经过验证的聚类算法而著称。尽管如此,其中大多数都是参数化的,并需要设置集群的数量,这是聚类中最大的挑战之一。

通常,使用迭代方法来决定数据的最佳聚类数量,这意味着你需要多次进行聚类,每次使用不同数量的聚类,并评估相应的结果。尽管这种技术是有用的,但它确实存在一些局限性。

无论使用的是哪一种软件包,数据集大小都会带来另一个问题。在处理大型数据集时,资源消耗问题可能妨碍你有效地在广泛的集群范围内进行迭代。如果是这种情况,考虑探索诸如 MiniBatchKMeans 之类的技术,它可以进行并行聚类

今天我跟大家介绍一个 kscorer 包,该包简化了这些技术,提供了一种更强大和有效的确定最佳聚类数量的方法。该包具备如下技术:

  1. 降维: 在应用聚类算法之前对数据进行主成分分析(PCA)可能是有益的。这将减少数据干扰,从而导致更可靠的聚类过程。

  2. 余弦相似度: 通过对数据应用欧几里得归一化,可以简单地(近似)在K均值中使用余弦距离。这样,您无需预先计算距离矩阵,就可以执行凝聚聚类等操作。

  3. 多度量: 为了找到最佳聚类数量,应依赖多度量评估,而不是依赖单个度量。

  4. 数据抽样: 为了解决资源消耗问题并改善聚类结果,可以从数据中获取随机样本进行聚类操作和评估度量。从多次迭代中平均分数可以减小随机性的影响,产生更一致的结果。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

本文由粉丝群小伙伴总结与分享,如果你也想学习交流,资料获取,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88194,备注:来自CSDN + 加群
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

下图展示了这个工作流程。

图片
幸运的是,现在无需从头构建整个流程,因为 kscorer 包中已经提供了实现。

此外,kscorer 包提供了一套全面的指标来评估聚类的质量,这些指标为我们提供了有关已识别的簇之间分离程度的宝贵见解:

  1. 轮廓系数: 通过计算数据点到不属于其最近簇的平均距离与每个数据点的平均簇内距离之间的差异,它量化了簇的分离程度。结果经过标准化,并表示为两者之间的比率,较高的值表示更好的簇分离。

  2. Calinski-Harabasz指数: 它计算了簇间散布与簇内散布之比。Calinski-Harabasz测试的较高分数表示更好的聚类性能,表明定义良好的簇。

  3. Davies-Bouldin指数: 它测量了簇间离散度与簇内离散度之比,较低的值表示更好的聚类性能和更明显的簇。

  4. Dunn指数:它通过比较簇间距离(任意两个簇中心之间的最小距离)与簇内距离(簇中任意两点之间的最大距离)来评估簇的质量。较高的Dunn指数表示更明确的簇。

使用 kscorer 亲身体验

我们有一些用于聚类的数据。在这种情况下,我们假装不知道确切的簇数。

python">import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.preprocessing import normalize
from sklearn.metrics import balanced_accuracy_score
from sklearn.model_selection import train_test_split
from kscorer.kscorer import KScorer
from prosphera.projector import Projector

X, y = datasets.load_digits(return_X_y=True)
X.shape

接下来,我们将将数据集分为训练集和测试集,并拟合一个模型来检测最优簇数。该模型将自动在3到15之间搜索最优簇数,可以轻松实现如下:

python">X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.15, random_state=1234)
python">ks = KScorer()
labels, centroids, _ = ks.fit_predict(X_train, retall=True)

在完成拟合过程后,我们可以查看所有应用指标的标准化分数,这将帮助我们确定我们的可用数据的最佳簇数。

在检查图表时,您会注意到一些簇以相应的分数突出显示,这些带有标签的点对应于所有指标中平均分数的局部最大值,因此代表选择最佳簇数的最佳选项。

python">ks.show()

图片
现在,我们可以评估我们的新簇标签与真实标签的匹配程度。请确保在实际业务场景中通常无法使用此选项 😉

python">labels_mtx = (pd.Series(y_train)
              .groupby([labels, y_train])
              .count()
              .unstack()
              .fillna(0))

# match arbitrary labels to ground-truth labels
order = []

for i, r in labels_mtx.iterrows():
    try:
        left = [x for x in np.unique(y) if x not in order]
        order.append(r.iloc[left].idxmax())
    except ValueError:
        break

confusion_mtx = labels_mtx[order]
confusion_mtx

聚类中,尝试对之前未见过的数据进行聚类是一种不同寻常的做法。但请注意,这不是典型的聚类任务。一个不同且通常更有用的策略是使用簇标签创建一个分类器,将簇标签用作目标。这样可以更容易地为新数据分配簇标签。

python"># to make vectors precisely normalized
centroids = normalize(centroids)
labels_unseen = ks.predict(X_test, init=centroids)

y_clustd = pd.Series(labels).replace(dict(enumerate(order)))
y_unseen = pd.Series(labels_unseen).replace(dict(enumerate(order)))

balanced_accuracy_score(y_train, y_clustd)
balanced_accuracy_score(y_test, y_unseen)

最后,对我们的数据进行新鲜的交互式视角。

python">visualizer = Projector(renderer='colab')

visualizer.project(
    data=X_train,
    labels=y_clustd,
    meta=y_train)

图片

因此,通过使用 kscorer 包,我们深入了解了K均值聚类,该包简化了寻找最佳聚类数量的过程。由于其复杂的指标和并行处理,它已被证明是数据分析的实用工具。


http://www.niftyadmin.cn/n/5186844.html

相关文章

Spring Framework 核心容器详解:Core、Beans、Context 和 Expression Language 模块

Spring可能成为您的所有企业应用程序的一站式商店。但是,Spring是模块化的,允许您挑选适用于您的模块,而无需引入其他模块。下面的部分提供了Spring Framework中所有可用模块的详细信息。 Spring Framework提供了大约20个模块,可…

电脑版微信图片保存在哪个文件夹,如何一次性全选保存

8-7 电脑版的微信聊天,接收到图片后,会保存到微信的个人数据文件夹中,但是有个问题是这些图片都是加密保存的,普通情况下,确实无法人工去取出来,但是下面有方法可以快速将这些图片在脱离微信的情况下&…

Gitlab CI如何实现安全获取ssh-key拉取依赖项目,打包成品

文章目录 前言配置流程注册ssh-keygit runner映射文件方法1 .gitlab-ci.yml使用方法2 docker build 实现 总结 前言 之所以写这篇文章是由于存在以下场景: 当前的项目编译需要依赖别的项目协同编译,如何将别的项目也pull到该项目里,编译成品…

Golang: Store Query Result in a Map

目录 1. Golang: Store Query Result in a Map1.1. Using Structs1.2. Using Maps 1. Golang: Store Query Result in a Map 注意: 使用这个可能会造成列名和列值乱串的现象,解决这个可以使用 AS 语法: SELECT TENANT_ID AS TENANT_ID,SVR_IP AS SVR_IP,…

卷积神经网络(CNN)mnist手写数字分类识别的实现

文章目录 前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)我的环境: 2. 导入数据3.归一化4.可视化5.调整图片格式 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、知识点详解1. MNIST手写数字数据集介绍2. 神经网络程序说明3. 网…

自定义View之Measure(二)

measure 用来测量 View 的宽和高,它的流程分为 View 的 measure 流程和 ViewGroup 的measure流程,只不过ViewGroup的measure流程除了要完成自己的测量,还要遍历地调用子元素的measure()方法。 上一回说到performMeasur…

docker数据卷详细讲解及数据卷常用命令

docker数据卷详细讲解及数据卷常用命令 Docker 数据卷是一种将宿主机的目录或文件直接映射到容器中的特殊目录,用于实现数据的持久化和共享。Docker 数据卷有以下特点: 数据卷可以在一个或多个容器之间共享和重用,不受容器的生命周期影响。…

第四代智能井盖传感器:万宾科技助力城市安全

在繁华喧嚣的城市里人来人往,井盖作为基础设施的一个组成部分在路面上分布范围广。然而这些看似普通的井盖却存在着位移、水浸的风险,可能给我们的生活带来诸多不便,更会威胁到我们的人身安全。如何有效监测和管理井盖的状态,成为…