我有一个数据集(约8万行),其中包含以逗号分隔的标签(技能)列表,例如:
python, java, javascript,
marketing, communications, leadership,
web development, node.js, react
...
有些短至1,其他短至50以上。我想将技能组合在一起(直观上讲,同一群集中的人将具有非常相似的一组技能)
首先,我使用CountVectorizer
中的sklearn
对单词列表进行矢量化处理,并使用SVD
执行降维器缩小,将其降为50维(从500多个)。最后,我用KMeans
进行了n=50
聚类,但是结果并不是最佳的-聚在一起的技能组似乎没有什么联系。
我应该如何改善结果?我也不确定SVD
是否是此用例最合适的降维形式。
答案 0 :(得分:2)
我将从以下方法开始:
对于任何方法(包括您的方法),在进行一些超参数调整之前都不要放弃。也许您只需要一个较小的表示形式,或另一个K(对于KMeans)。
祝你好运!
答案 1 :(得分:2)
所有TF-IDF,余弦等仅适用于很长的文本,在这些文本中可以看到矢量以合理的数值精度对术语频率分布进行建模。对于短文本,这不足以产生有用的簇。
此外,k-means需要将每个记录放入一个群集中。但是,胡说八道的数据呢?说一个只有“克林贡语”技能的人吗?
相反,使用
这在标签上非常有意义。它标识经常一起出现的标签组。因此,一种模式是例如“ python sklearn,numpy”;集群就是所有具备这些技能的用户。
请注意,这些群集将重叠,有些可能不在群集中。这当然更难使用,但是对于大多数应用程序来说,记录可以属于多个群集,也可以不属于群集是有道理的。