我有一个数据集(~80k行),其中包含一个逗号分隔的标记列表(skills),例如:
python, java, javascript,
marketing, communications, leadership,
web development, node.js, react
...
有的短至1,有的长达50+技能。我想把一组技能组合在一起(直觉上,同一组的人会有一组非常相似的技能)
首先,我使用CountVectorizer
fromsklearn
对单词列表进行向量化,并使用SVD
执行维数缩减,将其从500+减少到50个维度。最后,我使用KMeans
进行KMeans
聚类,但是结果不是最优的——聚集在一起的技能组似乎非常不相关。在
我该如何改进结果?我也不确定SVD
是否是这个用例中最合适的降维形式。在
所有的TF-IDF、余弦等都只适用于非常长的文本,在这些文本中,可以看到向量以合理的数值精度模拟术语频率分布。对于短文本来说,这不足以产生有用的集群。在
此外,k-means需要将每个记录放入一个集群中。但是,那些胡说八道的数据呢——比如说,只有“克林贡人”的人?在
相反,使用
频繁项集挖掘
这在标签上很有意义。它标识经常一起出现的标签组。因此,一种模式是,例如,“pythonsklearn,numpy”;集群是所有拥有这些技能的用户。在
请注意,这些簇将重叠,有些簇可能不在簇中。这当然很难使用,但对于大多数应用程序来说,记录可以属于多个集群,或者不属于集群,这是有意义的。在
我将从以下方法开始:
对于任何方法(包括你的),在你做一些超参数调整之前不要放弃。也许你只需要一个更小的表示,或者另一个K(对于KMeans)。在
祝你好运!在
相关问题 更多 >
编程相关推荐