Kmeans 聚类与包含字符串的多列

数据挖掘 Python k-均值 无监督学习
2022-03-10 04:15:55

我有以下数据集: https ://www.kaggle.com/carolzhangdc/imdb-5000-movie-dataset

我想找到的是基于每个国家/地区每种类型的 imdb 分数的集群。我创建了一个 pandas 数据框,其中包含每个国家/地区的每种独特类型的平均 imdb 评分。

数据框如下所示:

country       object
genre         object
avgRating    float64
dtype: object

由于国家和类型列包含字符串,因此我不能为此使用 Kmeans。

无论如何我可以实现我想要的吗?

2个回答

经过更多研究,我们发现了这个库:https ://github.com/nicodv/kmodes 。

库 k-modes 用于聚类分类变量。它根据数据点之间匹配类别的数量定义集群。(这与更知名的 k-means 算法形成对比,后者基于欧几里德距离对数值数据进行聚类。)k-prototypes 算法结合了 k-modes 和 k-means,能够对混合的数值/分类数据进行聚类。

因为数据框包含分类数据,我们无法在散点图中对其进行可视化。所以我添加了代表该行分配到的集群的数字,以便每一行获得某种形式的可视化。

通常你只能对有序数据进行聚类,因为聚类是基于距离进行的。所以我不知道这在多大程度上是可靠的。

您需要将分类数据表示为数值数据。有不同的方法可以做到这一点(例如 LabelEncoder、OneHotEncoder、手动替换值......)

由于使用的算法是使用欧几里德距离作为距离度量的 KMeans,因此我们需要数值来计算它。简而言之,如果您['Red','Blue','Green']的专栏中有您可以将它们转换[0, 1, 2]为例如...

您可以查看此详细指南。--> https://pbpython.com/categorical-encoding.html