聚类分析字符串数组

聚类分析字符串数组

对多个字符串进行聚类分析旨在根据它们之间的相似度将这些字符串划分成若干个类别,使得同一类别内的字符串彼此相似度高,而不同类别间的字符串相似度低

小结

  1. 数据要清洗。清洗的足够准确,可能不需要用聚类分析了
  2. 数据要多,聚集点要少,点阵就集中

步骤 1: 数据预处理

标准化:统一字符串的大小写、去除无关字符(如标点符号、空格等)。

步骤 2: 特征提取

  • 词频统计:对于每个字符串,统计其包含的词汇表中词语的出现次数,形成一个词频向量。

  • TF-IDF:除了词频统计,还可以使用TF-IDF(Term Frequency-Inverse Document Frequency)值作为特征。TF-IDF考虑了词语在文档集合中的重要性,对频繁出现但无区分度的词语给予较低的权重。

  • 词嵌入(Word Embeddings):使用预训练的词嵌入模型(如Word2Vec、GloVe或BERT)将每个词语转换为固定长度的稠密向量,然后对每个字符串中所有词语的向量取平均(或加权平均、最大池化等)得到字符串的向量化表示。

步骤 3: 应用聚类算法

选择聚类算法:如K-means、DBSCAN、谱聚类、层次聚类等。选择时需考虑数据特性、所需聚类形状(如球形、任意形状)、是否需要预先指定聚类数量等因素。

运行聚类:将提取的数值特征作为输入,运行所选聚类算法。对于某些算法(如K-means),可能需要多次尝试以确定最优聚类数量(如通过轮廓系数、肘部法则等评估指标)。

步骤 4: 结果解读与评估

可视化:对于较小的数据集,可以使用散点图、热力图、树状图等可视化聚类结果。

主题分析:分析各聚类中心(或代表性样本)的特征,总结聚类主题或类别描述

code (K-means)

import jsonimport numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
from sklearn.compose import ColumnTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.manifold import TSNEdef compute_string_length(s):return np.array([len(text) for text in s]).reshape(-1, 1)def clean_data(data):data = [s.replace('"', ' ') for s in data]data = [s.split(']')[-1] for s in data]data = [s.split('】')[-1] for s in data]data = [s.lower() for s in data]return datadef analyse(inputs: list[str], n_clusters: int = 10):preprocessed_strings = clean_data(inputs)preprocessed_strings = [[text] for text in preprocessed_strings]# 使用 TF-IDF 向量化文本feature_vectors = TfidfVectorizer(stop_words='english')tfidf_transformer = ColumnTransformer([('tfidf', feature_vectors, 0),  # 对文本列进行 TF-IDF 向量化# ('length', FunctionTransformer(compute_string_length, validate=False), 0)  # 计算字符串长度], remainder='passthrough')  # 其他列原样传递# 将数据转换为 TF-IDF 向量和字符串长度的组合tfidf_matrix = tfidf_transformer.fit_transform(preprocessed_strings)# Step 3:  K-Meanskmeans = KMeans(n_clusters=n_clusters, random_state=42)cluster_labels = kmeans.fit_predict(tfidf_matrix)output = {}for i, v in enumerate(cluster_labels):if v not in output:output[v] = {"name": [], "count": 0, "key": int(v)}output[v]["name"].append(inputs[i])output[v]["count"] += 1sorted_dd_list = sorted(list(output.values()), key=lambda x: x['count'], reverse=True)with open("a.json", "w") as f:f.write(json.dumps(sorted_dd_list, ensure_ascii=False))# Step 4: 可视化 - 使用 t-SNE 和 matplotlibtsne = TSNE(n_components=2, random_state=42, perplexity=4)tfidf_matrix_2d = tsne.fit_transform(tfidf_matrix.toarray())plt.figure(figsize=(10, 5))for i in range(n_clusters):mask = (cluster_labels == i)plt.scatter(tfidf_matrix_2d[mask, 0],tfidf_matrix_2d[mask, 1],c="red",label="",alpha=0.8,edgecolors='none')plt.legend()plt.title('String Collection Clustering Results (t-SNE Projection)')plt.show()if __name__ == '__main__':demo = ["Concealer covers face with spots, pimples, dark circles, eyes and tears","【 Import day price 】Makeup revolution Concealer cover the face spots, acne, black eye circles, tears do not take off makeup","Makeup revolution Concealer Party sister K sister recommended to cover acne dark circles lasting moisturizing moisture","Concealer covers face with spots, pimples, dark circles, eyes and tears","Makeup revolution Concealer Party sister K sister recommended to cover acne dark circles lasting moisturizing moisture","Makeup revolution Concealer Party sister K sister recommended to cover acne dark circles lasting moisturizing moisture","Omorovicza Ultra Tonic Oil 30ml","【 Mia Exclusive 】MZ SKIN 2% hyaluronic Acid Filling Lip Care 3ml","Mz Skin Perfect Repair Mask 5 pieces/box","NAPIERS Micro Silver Deep Cleansing Mask 100ml canned skin care products clean and soften","【 Pre-sale 】MZ SKIN 2% hyaluronic Acid Filling Lip Care 3ml", "Omorovicza Body Massage Oil 100ml","Omorovicza Midnight Wake Up Inception Essence 2ml", "MZ SKIN 5-Day White Rejuvenating Ampere 2ml*2","MZ SKIN10% Vitamin C Whitening Serum 5ml", "Mz Skin 5-Day White Rejuvenating Ampere 10*2ml","Mz Skin Perfect Repair Mask sheet"]analyse(demo, 5)

运行后的json文件里有聚集点的原始字符串在这里插入图片描述

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

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

相关文章

C++ //练习 13.34 编写本节所描述的Message。

C Primer(第5版) 练习 13.34 练习 13.34 编写本节所描述的Message。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*************************************************************************>…

机器学习笔记-01

一…AI(人工智能) 二.机器学习–是人工智能实现的途径 三.深度学习–是机器学习的一个方法 1.机器学习能做什么: 1.1 传统预测 1.2 图像识别 1.3 自然语言处理(nlp) 2.数据集包含:特征值 目标值 3.机器学…

python绘制三维图

在Python中,我们可以使用matplotlib库中的mplot3d工具包来绘制三维图。下面是一个简单的例子,绘制了一个三维的散点图和一个三维曲面图: 首先,确保已经安装了matplotlib库。如果没有,可以通过pip进行安装:…

C#中的Task:异步编程的瑞士军刀

在现代软件开发中,异步编程已经成为处理I/O密集型任务和网络操作的重要手段。C#中的Task是.NET Framework 4.0引入的一个并发编程的抽象,它在后续的.NET Core和.NET 5中得到了进一步的发展和完善。Task代表了一个异步操作,可以等待它的完成&a…

统一所有 LLM API:支持预算与速率限制 | 开源日报 No.229

BerriAI/litellm Stars: 6.7k License: NOASSERTION litellm 是一个使用 OpenAI 格式调用所有 LLM API 的工具。它支持 Bedrock、Azure、OpenAI、Cohere、Anthropic 等 100 多种 LLMs,提供企业级代理服务器和稳定版本 v1.30.2。 主要功能和优势包括: 将…

javaEE初阶——多线程(八)——常见的锁策略 以及 CAS机制

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享分治算法关于多线程进阶的章节——关于常见的锁策略以及CAS机制 如果有不足的或者错误的请您指出! 目录 多线程进阶1.常见的锁策略1.1乐观锁和悲观锁1.2重量级锁 和 轻量级锁1.…

【大数据】分布式数据库HBase

目录 1.概述 1.1.前言 1.2.数据模型 1.3.列式存储的优势 2.实现原理 2.1.region 2.2.LSM树 2.3.完整读写过程 2.4.master的作用 1.概述 1.1.前言 本文式作者大数据系列专栏中的一篇文章,按照专栏来阅读,循序渐进能更好的理解,专栏…

JS实现对用户名、密码进行正则表达式判断,按钮绑定多个事件,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

探索企业微信助手工具:强化沟通协作,助力高效办公

随着企业信息化建设的深入发展&#xff0c;企业微信助手工具作为一种集成化、智能化的办公辅助工具&#xff0c;正逐渐受到企业的青睐。企业微信助手不仅能够帮助企业提高工作效率&#xff0c;还能增强沟通协作能力&#xff0c;为企业发展注入新的活力。本文将简要介绍企业微信…

精益思想赋能数字化转型:落地策略与实践路径

当下&#xff0c;数字化转型已不再是选择题&#xff0c;而是关乎企业生存与发展的必答题。然而&#xff0c;转型过程中如何确保效率、降低成本并快速实现价值创造&#xff0c;成为了摆在众多企业面前的难题。精益思想作为一种追求精益求精、持续改进的管理思维&#xff0c;为数…

2024最新版JavaScript逆向爬虫教程-------基础篇之面向对象

目录 一、概念二、对象的创建和操作2.1 JavaScript创建对象的方式2.2 对象属性操作的控制2.3 理解JavaScript创建对象2.3.1 工厂模式2.3.2 构造函数2.3.3 原型构造函数 三、继承3.1 通过原型链实现继承3.2 借用构造函数实现继承3.3 寄生组合式继承3.3.1 对象的原型式继承3.3.2 …

Linux 抽象命名空间(Abstract Namespace)详细介绍

Linux 抽象命名空间&#xff08;Abstract Namespace&#xff09;是 Unix 域套接字&#xff08;Unix Domain Socket, UDS&#xff09;家族中的一种特殊类型&#xff0c;用于进程间通信&#xff08;IPC&#xff09;。相比于传统的 Unix 域套接字&#xff08;文件系统命名空间和临…

stm32HAL库-GPIO

一 什么是 GPIO: GPIO(general porpose intput output), 通用输入输出端口 . 二 我们先认识芯片控制 GPIO 输出控制。 2.1LED 硬件原理如图&#xff1a; 当电流从这根电线流通&#xff0c; LED 亮。当电流不通过这根电线&#xff0c; LED 灭。 上面 PF** &#xff0c;芯片电…

MySQL面试——聚簇/非聚簇索引

存储引擎是针对表结构&#xff0c;不是数据库 引擎层&#xff1a;对数据层以何种方式进行组织 update&#xff1a;加索引&#xff1a;行级锁&#xff1b;不加索引&#xff1a;表级锁

bootstrap带左右固定列表格,列选择操作后,表头和内容无法对其问题。

通过属性showColumns: true,开始列选择后&#xff0c; &#xff08;1&#xff09;列变动后&#xff0c;列总数量依然较多存在滚动轴时&#xff0c;右侧少一部分问题。 &#xff08;2) 列变动后&#xff0c;选择列数较少时&#xff0c;左右固定列消失&#xff0c;表头和表格无法…

固态继电器:推进可再生能源系统

随着可再生能源系统的发展&#xff0c;太阳能系统日益成为现代能源解决方案的先锋。在这种背景下&#xff0c;固态继电器&#xff08;SSR&#xff09;&#xff0c;特别是光耦固态继电器的利用变得日益突出。本文旨在深入探讨SSR在可再生能源系统中的多方位应用&#xff0c;重点…

【学习笔记】Python 使用 matplotlib 画图

文章目录 安装中文显示折线图、点线图柱状图、堆积柱状图坐标轴断点参考资料 本文将介绍如何使用 Python 的 matplotlib 库画图&#xff0c;记录一些常用的画图 demo 代码 安装 # 建议先切换到虚拟环境中 pip install matplotlib中文显示 新版的 matplotlib 已经支持字体回退…

SD-WAN:灵活、低成本、便于管理

近年来&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;技术成为企业网络领域的新趋势&#xff0c;其带来的变革性影响备受瞩目。凭借出色的灵活性、高效的可管理性以及显著的成本优势&#xff0c;SD-WAN技术为企业网络注入了新的活力。 首先&#xff0c;SD-WAN技术的…

4- JavaScript对象

JavaScript对象 一、数组 数组(Array)是指一组数据的集合&#xff0c;其中的每个数据被称作元素&#xff0c;数组是属于内置对象&#xff0c;数组和普通对象的功能类似&#xff0c;都可以用来存储一些值。不同的是&#xff1a; 普通对象是使用字符串作为属性名&#xff0c;而…

前端HTML面试题:meta 元素都有什么

在HTML中&#xff0c;<meta> 元素是一个非常重要且常用的元素&#xff0c;它用于表示关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些元数据不会直接显示在页面上&#xff0c;但可以被浏览器以及其他网页服务利用。在前端开发的面试中&#xff0c…