python - 分类数据的矢量量化

标签 python cluster-analysis

矢量量化软件通常仅适用于数值数据。其中一个示例是 Python 的 scipy.cluster.vq.vq ( here ),它执行矢量量化。大多数聚类软件也显示了数值数据要求。

许多人指出,您始终可以将分类变量转换为一组二进制数值变量。但是,当处理大数据时,这会变得很尴尬,其中单个分类变量可能有数百或数千个类别。

显而易见的替代方案是更改距离函数。对于混合数据类型,从观察到“中心”或“密码本条目”的距离可以表示为两部分总和,涉及(a)数值变量的通常欧几里得计算和(b)不平等指标的总和对于分类变量,如建议的 here第 125 页。

有没有开源软件实现具有这种广义距离函数的矢量量化?

最佳答案

对于机器学习和聚类算法,您还可以找到有用的 scikit-learn 。为了实现你想要的,你可以看看他们的 DBSCAN 的实现.

在他们的文档中,您可以找到:

sklearn.cluster.dbscan(X, eps=0.5, min_samples=5, metric='minkowski', algorithm='auto', leaf_size=30, p=2, random_state=None)

此处的X可以是您已经计算出的距离矩阵(并传递metric='precompulated'),也可以是标准的样本x特征矩阵,而 metric= 可以是一个字符串(带有已实现的 distance functions 之一的标识符)或一个可调用的 python 函数,它将以成对的方式计算距离。

如果找不到所需的指标,您始终可以将其编程为 python 函数:

def mydist(a, b):
    return a - b # the metric you want comes here

并使用 metric=mydist 调用 dbscan。或者,您可以预先计算距离矩阵,并将其传递给聚类算法。

同一库中还有一些其他聚类算法,看看它们 here .

关于python - 分类数据的矢量量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27694998/

相关文章:

algorithm - Bisecting k-means聚类算法解释

python - 是否有任何不是 float 但可以在 MySQL 中接受为 float 的对象?

python - 我通过 postman 得到状态码 200,但通过 request.get 我得到状态码 500

python - 如何使用 python-docx 从模板流式传输文件

python - Python 中的 DBSCAN : Unexpected result

java - 使用大型地理数据集在 ELKI 上运行 OPTICS 集群

python - 如何使用 Y 轴值将坐标值聚集到行中?

python - 如何保持 Pandas 的内存效率?

python - 为什么在我使用 distutils 时会创建一个 egg-info 文件?

apache-spark - Spark LDA 不支持 logLikelihood 和 logPerplexity 方法,如何测量它们?