K-modes聚类-全中文特征-非数值型特征

最近对K-modes聚类进行了简单尝试,产生了一点小小感悟,在此和大家分享一下,若有不妥之处欢迎大家留言讨论。

场景:所有用于聚类的变量都是中文类别变量,非常懒非常硬核就是不想数值化之后再聚类,选择了K-modes,用的PyPI封装好的包:PyPI的K-modes包地址

关于使用K-modes聚类之后如何总结各个类别特征的方法:

1、直接查看类别中心,类别中心是对这个类别最简单的总结概括。

print(km.cluster_centroids_)
print (str(km.cluster_centroids_).decode('unicode-escape') #如果需要查看中文信息的话

2、统计词频
观察每个类别的高频词汇

3、词云
词云比词频数据更清晰直观,但是词云会损失一些信息。我使用的是wordcloud的包,在做词云的过程中发现词云显示出来的结果并不准确,当我们需要较为精准地指导类别内部的信息而不在意效率的话,还是看词频好一些。

4、统计分析或寻找频繁项集
当我们真的非常非常想一一知道到底这些类别该如何解释时使用的方法,非常耗时耗力,并且有些脱离重点,并不推荐。

关于非数值型特征聚类的问题:

在使用K-means聚类时我们可以通过衡量平均畸变程度来确定聚类的个数,平均畸变程度使用的是欧氏距离。但是我这个K-modes聚类使用的是全中文特征,在Python中的形式是Unicode编码,并不能也不适合使用欧氏距离去衡量类别内部的相似性,因此我将一般的平均畸变中的欧式距离换成了编辑距离(Edit Distance),其中一种解释:一种编辑距离。编辑距离也有很多不同的包供大家选择,这是一种思路,但是我始终觉得有点怪怪的,因为这是衡量英文字符的相似程度的,并不适合中文,更何况是中文转换成的Unicode字符,感觉信息是扭曲的。再者,感觉这个算法哪怕是衡量英文字符的相似程度也是不够严谨的。但是不管怎么说,这一次的结果居然出奇的准确,可能,这就是一种玄学吧。

猜你喜欢

转载自blog.csdn.net/weixin_38322363/article/details/82913147