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

news2024/10/7 20:37:05

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 亲身体验

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

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之间搜索最优簇数,可以轻松实现如下:

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

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

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

ks.show()

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

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

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

# 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)

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

visualizer = Projector(renderer='colab')

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

图片

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

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

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

相关文章

代码随想录算法训练营Day 53 || 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

1143.最长公共子序列 力扣题目链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何…

SpringBoot 事务与AOP

目录 事务Spring事务管理 TransactionalSpring事务进阶-rollbackFor与propagation属性 AOP(面向切面编程)AOP入门案例实现-Aspect & AOP核心概念AOP进阶通知类型 Around、Before、After和PointCut抽取切入点表达式通知顺序 Order切入点表达式 execution(……)与annotation(…

redis运维(七)基础通用命令

一 基础通用命令 备注: 与具体数据类型无关Tab键 自动补全补充: redis 命令是不区分大小写 通用不到 10 个提升逼格的 redis 命令 后续: slowlog、rename-command、monitor、set ① help command 需求: 显示有关redis命令的…

【Seata源码学习 】 篇二 TM与RM初始化过程

【Seata源码学习 】 篇二 TM与RM初始化过程 1.GlobalTransactionScanner 初始化 GlobalTransactionScanner 实现了InitializingBean 接口,在初始化后将执行自定义的初始化方法 io.seata.spring.annotation.GlobalTransactionScanner#afterPropertiesSet Override…

手撕无头单链表

💓 博客主页:江池俊的博客⏩ 收录专栏:数据结构探索👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🔥编译环境:Visual Studio 2022&#x1f38…

腾讯云轻量服务器购买优惠,腾讯云轻量应用服务器优惠购买方法

你是否曾经为如何选择合适的服务器而苦恼?在互联网的海洋中,如何找到一个性价比高,性能稳定,价格合理的服务器供应商,确实是一个让人头疼的问题。今天,我要向你介绍的,是腾讯云轻量应用服务器的…

【1567.乘积为正数的最长子数组长度】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getMaxLen(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]nums[0]>0?1:0;g[0]nums[0]<0?1:0…

思考如何完成一个审批流

思考如何完成一个审批流 这篇文章&#xff0c;可能没有太多的干货&#xff0c;只是对于自己做过项目的一个反思与整理&#xff0c;同时&#xff0c;让这篇文章暴露在公共视野&#xff0c;虚心接受批评指导&#xff0c;向各位前辈同仁进行学习。 如果此文又不当之处&#xff0c;…

数据分析 - 离散概率分布的运用

期望公式 期望的方差 期望的标准差

二十、泛型(9)

本章概要 对缺乏潜在类型机制的补偿 反射将一个方法应用于序列 Java 8 中的辅助潜在类型 使用 Suppliers 类的通用方法 总结&#xff1a;类型转换真的如此之糟吗&#xff1f; 对缺乏潜在类型机制的补偿 尽管 Java 不直接支持潜在类型机制&#xff0c;但是这并不意味着泛型代…

windows虚拟内存自定义分配以及mysql错误:Row size too large (> 8126)

文章目录 虚拟内存概要windows-server配置虚拟内存技术名词解释关于mysql错误Row size too large (> 8126)问题分析解决办法 虚拟内存概要 虚拟内存别称虚拟存储器&#xff08;Virtual Memory&#xff09;。电脑中所运行的程序均需经由内存执行&#xff0c;若执行的程序占用…

【918.环形子数组的最大和】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {int sum0;for(auto x:nums) sumx;vector<int> f(nums.size());vector<int> g(nums.size…

iOS项目集成RN(0)

iOS原有项目集成RN 环境安装RN环境搭建Node & Watchman 安装 创建新应用iOS项目集成RN如果没有iOS项目&#xff0c;新建一个 swift&#xff0c; storyboard项目&#xff0c; 名字&#xff1a;RNTest新建一个 RNDemo目录&#xff0c;一个iOS子目录&#xff0c; 把iOS相关的拷…

科研学习|研究方法——python T检验

一、单样本T检验 目的&#xff1a;检验单样本的均值是否和已知总体的均值相等前提条件&#xff1a; &#xff08;1&#xff09;总体方差未知&#xff0c;否则就可以利用 Z ZZ 检验&#xff08;也叫 U UU 检验&#xff0c;就是正态检验&#xff09;&#xff1b; &#xff08;2&a…

趣学python编程 (一、计算机基础知识科普)

未来是高度科技化和智能化的时代。过去不识字的叫“文盲”&#xff0c;如今不懂点计算机知识&#xff0c;则可能是新时代的“文盲”。不论从事什么行业&#xff0c;了解下计算机和编程都是有益的。Python 连续多年占据最受欢迎的编程语言榜首&#xff0c;未来Python有机会成为像…

(八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

​ 一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为…

考虑区域多能源系统集群协同优化的联合需求侧响应模型(matlab代码)

该程序复现《考虑区域多能源系统集群协同优化的联合需求侧响应模型》文献模型&#xff0c;程序的核心是对多个区域级多能源系统互联系统进行多目标优化&#xff0c;并且考虑联合需求侧响应&#xff0c;以多个区域多能源系统运行总成本最小、碳排放最小为目标&#xff0c;建立多…

kickstarter数据采集

搜索界面字段如下&#xff1a; 详情界面字段如下&#xff1a; 评论页面采集&#xff1a; 需要的可以找我沟通

超市管理系统

闲着无聊写了个超市管理系统&#xff0c;包括商品管理、进销存、角色权限管理&#xff0c;很不错的项目分享给大家 1 商品管理 1.1 分类管理 分类信息主要包括名称、描述&#xff0c;可以进行停用、启用 1.2 商品信息 1.3 积分商品 1.4 销售统计 2 库存管理 2.1 仓库管理…

idea中git 移除对某个文件的跟踪

应用场景如下 某个log 文件&#xff0c;被同事用git 提交到了服务器&#xff0c;本地拉去之后我们的跟踪也会受影响 取消跟踪的方法如下&#xff1a; 删除本地缓存 git rm --cached "logs/test.log" 提交无效的log git commit -m "ignore log" 再将lo…