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

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 ProjectorX, 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:breakconfusion_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.mzph.cn/news/144702.shtml

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

相关文章

Netty入门指南之NIO Selector监管

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题解…

YOLOv5项目实战(3)— 如何批量命名数据集中的图片

前言:Hello大家好,我是小哥谈。本节课就教大家如何去批量命名数据集中的图片,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目实战(2࿰

【L2GD】: 无环局部梯度下降

文章链接:Federated Learning of a Mixture of Global and Local Models 发表期刊(会议): ICLR 2021 Conference(机器学习顶会) 往期博客:FLMix: 联邦学习新范式——局部和全局的结合 目录 1.背景介绍2. …

【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)

目录 0x00 便签存储器(Scratchpad memory) 0x01 缓存锁定(Cache lockdown) 0x02 读取 DRAM 内存 0x03 DREM Banking 0x04 DRAM 猝发(DRAM Burst) 0x00 便签存储器(Scratchpad memory&#…

golang 解析oracle 数据文件头

package mainimport ("encoding/binary""fmt""io""os" ) // Powered by 黄林杰 15658655447 // Usered for parser oracle datafile header block 1 .... // oracle 数据文件头块解析 // KCBlockStruct represents the structure of t…

如何在聊天记录中实时查找大量的微信群二维码

10-5 如果你有需要从微信里收到的大量信息中实时找到别人发到群里的二维码,那本文非常适合你阅读,因为本文的教程,可以让你在海量的微信消息中,实时地把二维码自动挑出来,并且帮你分类保存。 如果你是做网推的&#…

Reids集群

目录 一、集群的概念 1.为什么要搭建集群? 2.Redis搭建集群是否需要考虑状态同步的问题? 二、Redis集群的模式 1.redis集群--主从模式 1.1什么是Redis的主从模式? 1.2.主从模式它们之间的数据是怎么实现一个同步的? 1.3.主…

图形学 -- Geometry几何

隐式 implicit 基于给点归类,满足某些关系的点 缺点:不规则表面难以描述! algebraic surface 直接用数学公式表示:不直观! Constructive Solid Geometry(CSG) 用简单形状进行加减 distance …

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

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

Perl爬虫程序的框架

Perl爬虫程序的框架,这个框架可以用来爬取任何网页的内容。 perl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # 创建LWP::UserAgent对象 my $ua LWP::UserAgent->new; # 设置代理信息 $ua->proxy(http, ); …

Linux C/C++全栈开发知识图谱(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)

众所周知,在所有的编程语言中,C语言是一门颇具学习难度,需要很长学习周期的编程语言。甚至很多人经常听到一句调侃的话语——“C,从入门到放弃”。 C界的知名书籍特别多,从简单到高端书籍,许多书籍都是C之…

Java 反射设置List属性

使用 Java 反射可以动态地设置对象的属性值,包括 List 类型的属性。以下是一个示例代码,演示如何通过反射设置 List 类型的属性: 假设有一个类 Person,包含一个 List 类型的属性 names: java public class Person { …

SpringBoot--中间件技术-2:整合redis,redis实战小案例,springboot cache,cache简化redis的实现,含代码

SpringBoot整合Redis 实现步骤 导pom文件坐标 <!--redis依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>yaml主配置文件&#xff0c;配置…

图论与网络优化2

CSDN 有字数限制&#xff0c;因此笔记分别发布&#xff0c;目前&#xff1a; 【笔记1】概念与计算、树及其算法【笔记2】容量网络模型 4 最大流及其算法 4.1 容量网络模型 4.1.1 容量网络 容量网络&#xff1a;如果一个加权有向网络 D D D 满足如下三个条件&#xff1a;①…

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

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

关于Chrome中F12调试Console输入多行

在chrome 浏览器中使用console调试的时&#xff0c;如果想在console中输入多行代码&#xff0c;需要进行换行。 这时我们可以使用 [ Shift Enter ] 。也叫&#xff1a; 软回车。

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

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

操作系统 day10(调度的概念、层次、七状态模型)

调度的概念 调度的层次 作业调度&#xff08;高级调度&#xff09; 进程调度&#xff08;低级调度&#xff09; 内存调度&#xff08;中级调度&#xff09; 挂起态与七状态模型 三层调度的联系和对比

使用docker部署ELK日志框架-Elasticsearch

一、ELK知识了解 1-ELK组件 工作原理&#xff1a; &#xff08;1&#xff09;在所有需要收集日志的服务器上部署Logstash&#xff1b;或者先将日志进行集中化管理在日志服务器上&#xff0c;在日志服务器上部署 Logstash。 &#xff08;2&#xff09;Logstash 收集日志&#…

WPF程序给按钮增加不同状态的图片

首先我们在资源里添加几个图片&#xff0c;Up&#xff0c;Over和Down状态。 然后我们创建一个Style。默认我们的背景设置成Up 然后在Triggers里添加代码&#xff0c;当Property&#xff1a;IsMouseOver为True的时候更换成Over&#xff1b;当Property&#xff1a;IsPressed为Tr…