聚类分析字符串数组

聚类分析字符串数组

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

小结

  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 json

import 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 TSNE


def 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 data


def 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-Means
    kmeans = 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"] += 1
    sorted_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 和 matplotlib
    tsne = 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.mfbz.cn/a/573371.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

45. 【Android教程】内容提供者 - Content Provider

本节学习最后一个 Android 组件——内容提供者。顾名思义,它可以用来给其他的 App 提供各种内容,比如 Android 自带的短信、联系人、日历等等都是一个普通的 App,当你需要这些内容的时候,就可以向它们的 Content Provider 发起请求…

C/C++ 入门(7)vector类(STL)

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 请多多指教! 目录 一、标准库中的vector 1、了解 2、vector常用接口 二、vector的实现 1、框架 2、构造、析构函数 3、操作函数 三 、问题 1、由于赋值而引起的浅拷贝 2、因为类没…

【linux】多路径|Multipath I/O 技术

目录 简略 详细 什么是多路径? Multipath安装与使用 安装 使用 Linux下multipath软件介绍 附录 配置文件说明 其他解 简略 略 详细 什么是多路径? 普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。 而到了分布式环境,主机和存储网络连…

普冉PY32F071单片机简单介绍,QFN64 48封装,支持 8 * 36 / 4 * 40 LCD

PY32F071单片机是一款基于32 位 ARM Cortex - M0内核的微控制器,由普冉半导体推出。PY32F071可广泛应用于各种嵌入式系统中,包括消费类电子产品、工业自动化、医疗设备等领域。PY32F071系列单片机具有低功耗、高性能和丰富的外设接口等特点,适…

生物制药企业在选择文件摆渡平台时,最应该关注哪些功能?

生物制药是以数据为核心生产力的企业,数据的重要性体现在药物研发、生产优化、销售和市场营销、决策支持以及合规要求等多个方面。有效地管理和利用数据,对于提升企业的竞争力、降低风险、提高产品质量和满足市场需求具有重要意义。 为保护数据安全&…

KEITHLEY(吉时利)2440源测量单位(SMU)数字源表

KEITHLEY(吉时利)2440源测量单位(SMU)数字源表 主要特性 50W 时性能高达 5A / 40V0.012% 基本测量精度,具有 6 位分辨率10pA / 100nV 测量分辨率与 KickStart 软件结合使用美国2440吉时利keithley数字源表特点 2400系列提供宽动…

亚信安慧AntDB:高效与稳定

亚信安慧AntDB正致力于验证数据库软硬件全自主可控的可行性,并将其应用于运营商核心的交易场景,以替代国外商业解决方案。为了实现这一目标,亚信安慧AntDB的研发团队不断进行技术创新和实践探索。 该数据库以自主研发的技术为基础&#xff0…

C语言 流程图与伪代码 缩减

本文 我们来说说流程图 伪代码和代码缩进 这些可以让我们在后面书写复杂逻辑时 不会感到 繁琐或逻辑混乱 流程图(Flowchart) 是用以算法、工作流或流程的一种框图表示,它以不同类型的框代表不同种类的步骤,每两个步骤之间则以箭头连接。 流程图是程序…

《飞吧龙骑士》新版本“龙神祭”盛大开启,引领骑士团战

热游圈消息:五一假期临近,备受瞩目的手游《飞吧龙骑士》迎来重大更新——“龙神祭”新版本正式开启。在此次更新中,首个蓄力炮UR龙——绮舞的巫女千代烬惊艳登场,为玩家们带来前所未有的燃情体验。同时,全新骑士团战玩…

当你看到一份更心仪的工作时,先冷静冷静,看看这篇文章

01 无法构建自己的城堡?那就挖一条护城河 人活一辈子,在职业生涯领域,你总得要搭建一座属于自己的城堡,否则拼死拼活,到最后你拿到一点蝇头小利,为别人做嫁衣。而当别人的梦想进行曲不需要你合奏或者伴奏时…

从现在开始:让AI写代码,你只负责敲tab键

如果你是一名程序员,你一定有过这样的经历:在编写代码的时候,突然遇到了一个棘手的问题,需要花费大量的时间去查找资料、尝试不同的解决方案,甚至有时候还需要去问同事或者在网上寻求帮助。这样的情况不仅会浪费你的时…

【算法刷题 | 贪心算法03】4.25(最大子数组和、买卖股票的最佳时机|| )

文章目录 4.最大子数组和4.1题目4.2解法一:暴力4.2.1暴力思路4.2.2代码实现 4.3解法二:贪心4.3.1贪心思路4.3.2代码实现 5.买卖股票的最佳时机||5.1题目5.2解法:贪心5.2.1贪心思路5.2.2代码实现 4.最大子数组和 4.1题目 给你一个整数数组 n…

Linux中DHCP原理与配置

目录 一.DHCP的原理 1.DHCP的简要概述 2.DHCP的优点 3.DHCP的分配方式 4.DHCP的租约过程 5.DHCP服务 6.可分配的地址信息主要包括 二.DHCP同一网段分配地址实验 windows命令 一.DHCP的原理 1.DHCP的简要概述 DHCP(Dynamic Host Configuration Protocol&a…

讯鹏智慧公厕系统解决方案新升级,大不同!

在城市建设和公共服务不断发展的今天,公厕作为重要的基础设施,其质量和管理水平直接影响着人们的生活体验。然而,当前公厕普遍存在着一些问题,如卫生状况不佳、设施老化、管理不便等。为了解决这些问题,讯鹏智慧公厕系…

牛客NC209 最短无序连续子数组【中等 数组,双指针 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/d17f4abd1d114617b51e951027be312e 思路 解题思路 1、方法1,排序对比:将数组按升序排序,然后与原数组对照,从哪里开始变化到哪里结束变化的数组就是答案。 2、 方…

图像处理技术与应用(二)

图像处理技术与应用入门 椒盐噪声 椒盐噪声,也称为脉冲噪声,是一种常见的数字图像噪声。它通常表现为图像中随机出现的白色(椒)或黑色(盐)像素点,这些像素点在图像上呈现为黑白杂点。椒盐噪声…

云计算革新:以太网 Scale-UP 网络为 GPU 加速赋能

谈谈基于以太网的GPU Scale-UP网络 Intel Gaudi-3 采用 RoCE 互联技术,促进了 Scale-UP 解决方案。业界专家 Jim Keller 倡导以太网替代 NVLink。Tenstorrent 成功应用以太网实现片上网络互联。RoCE 和以太网已成为互联解决方案的新兴趋势,为高性能计算提…

前端H5动态背景登录页面(下)

最近正好有点儿时间,把之前没整理完的前端动态背景登录页面给整理一下!这是之前的连接前端H5动态背景登录页面(上),这主要是两个登陆页面,一个彩色气泡,一个动态云朵,感兴趣的可以点…

关爱通丨从AIGC到硅基人同事:人工智能迭代重塑HR管理策略

2024年,一股创新的浪潮悄无声息地席卷了全球,推动了人工智能领域的重大突破。Sora视频模型的惊艳发布,成为了这一创新浪潮的标志性事件。 Sora这个名字源自日语中的“空”(そら sora),象征着天空的无限广阔…

机器学习作业3____决策树(CART算法)

目录 一、简介 二、具体步骤 样例: 三、代码 四、结果 五、问题与解决 一、简介 CART(Classification and Regression Trees)是一种常用的决策树算法,可用于分类和回归任务。这个算法由Breiman等人于1984年提出,它…
最新文章