聚类分析字符串数组

server/2024/9/25 17:12:48/

聚类分析字符串数组

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

小结

  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.ppmy.cn/server/17422.html

相关文章

跨境电商无货源模式汇总

跨境电商无货源模式是指在跨境电商业务中,不需要自己拥有实际的货物库存,而是通过与供应商或批发商建立合作关系,直接将订单信息传递给供应商,由供应商直接发货给最终客户的一种模式。本文将跨境电商无货源的几种模式与大家一同探…

IntelliJ IDEA - Lombok supports: OpenJDK javac, ECJ

问题描述 java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled.Your processor is: com.sun.proxy.$Proxy26Lombok supports: OpenJDK javac, ECJ 解决方案 在 IDEA 设置中 File -> Settings 中找到配置如下&#xff1…

配置etcd、apiserver使用的cpu和内存资源

etcd pod 默认使用的cpu和内存都是100M,当集群变大时,资源会不够用,导致异常,如: apiserver 默认使用cpu为250M k8s-master121 kubelet[31020]: E0425 14:41:54.026671 31020 controller.go:187] failed to update lease, error: etcdserver: request timed out kubelet[3…

H5点击复制功能 兼容安卓、IOS

效果图 HTML代码 <div>链接&#xff1a;<span style"color: #FF8A21" click"CopyUrl" id"copyId"> https://blog.csdn.net/qq_51463650?spm1000.2115.3001.5343</span> </div>复制方法 const CopyUrl () > {let …

【数据结构(邓俊辉)学习笔记】绪论05——动态规划

文章目录 0.前言1. Fibonacci数应用1.1 fib&#xff08;&#xff09;&#xff1a;递归1.1.1 问题与代码1.1.2 复杂度分析1.1.3 递归分析 1.2 fib&#xff08;&#xff09;&#xff1a;迭代 0.前言 make it work,make it right,make it fast. 让代码能够不仅正确而且足够高效地…

前端:防止重复请求的方案

前端&#xff1a;防止重复请求的方案 方案一、axios请求拦截器方案二、把相同的请求拦截掉方案三、&#xff08;最佳推荐&#xff09; 方案一、axios请求拦截器 通过使用 axios拦截器&#xff0c;在请求拦截器中开启全屏Loading&#xff0c;然后再响应拦截器中关闭。 import …

成电少年学fpga培训就业班怎么样

成电少年学是专注做FPGA培训的&#xff0c;以就业为导向&#xff0c;学习FPGA还是很有前途的&#xff0c;如果你是像电气、通信、自动化、物联网、集成电路这类专业&#xff0c;又不是名校高学历的&#xff0c;确实有必要可以考虑下校外培训机构。找工作多少会遇到一些问题&…

【spring6】Spring IoC注解式开发

1.声明Bean的注解 负责声明Bean的注解&#xff0c;常见的包括四个&#xff1a; 1&#xff09;Component&#xff1b;2&#xff09;Controller&#xff1b;3&#xff09;Service&#xff1b;4&#xff09;Repository 源码分析&#xff1a;可以看出Controller、Service、Reposito…