You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用KMeans对字符串列表聚类 实现名称按特征相似度分组

针对标签列表数据做KMeans聚类的落地方案

核心处理思路

你遇到的核心问题是集合型离散特征的向量化转换,针对这种每个样本对应一组独立标签的场景,最优方案是用多标签二值化编码,整体流程如下:

  • 第一步:对每个样本的特征标签列表做二值化编码,把每个独立标签转换为一个维度,对应值为1(样本含该标签)或0(样本不含该标签)
  • 第二步:(可选)如果标签维度极高,可通过PCA等方法做降维,降低后续KMeans的计算开销
  • 第三步:把编码后的数值矩阵输入KMeans模型完成聚类
  • 第四步:将聚类结果匹配回原名称列输出分组

具体实现代码

第一步:依赖导入与示例数据加载

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.cluster import KMeans

# 示例数据集
df = pd.DataFrame({
    "name":['lion','leopard','racoon','possum'], 
    "features":[
        ['mane', 'teeth', 'tail', 'carnivore'], 
        ['spots', 'teeth', 'tail', 'carnivore'], 
        ['stripes', 'teeth', 'omnivore', 'small'], 
        ['teeth', 'omnivore', 'small']
    ]
})

第二步:特征向量化

# 初始化多标签二值化器
mlb = MultiLabelBinarizer()
# 把特征列表转换为二值化矩阵
feature_matrix = mlb.fit_transform(df['features'])
# 可查看生成的维度对应的标签,方便验证
print("所有标签列表:", mlb.classes_)

这里输出的二值化矩阵和标签是完全对应的,比如lion对应的向量会在mane、teeth、tail、carnivore这几个维度为1,其余为0。

第三步:KMeans聚类

# 初始化KMeans,预期分2类,所以n_clusters设为2
kmeans = KMeans(n_clusters=2, random_state=42)
# 训练并获取聚类结果
df['cluster'] = kmeans.fit_predict(feature_matrix)

第四步:输出聚类结果

直接查看最终的分组:

print(df[['name', 'cluster']])

输出结果会符合你的预期:lion、leopard属于同一簇,racoon、possum属于同一簇。

方案说明

  • 为什么不用TF-IDF/Word2Vec等其他向量化方法?你当前的特征是独立的分类标签,没有上下文语义、也没有词频差异,二值化编码是最轻量化、最贴合业务特征的转换方式,计算的距离完全匹配你之前手动统计共有元素的相似度逻辑。
  • 如果后续你的特征变成有语义的长文本,再考虑更换为TF-IDF或词向量方案即可。

内容的提问来源于stack exchange,提问作者hselbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:54:03