具有缺失值的Python层次聚类

标签 python scipy missing-data data-analysis hierarchical-clustering

我是 Python 新手。我想通过包含一些缺失值的 P 数据集对 N 执行层次聚类。我打算使用 scipy.cluster.hierarchy.linkage 函数,它采用压缩形式的距离矩阵。 Python 是否有计算缺失值包含数据的距离矩阵的方法? (在 R dist 函数中自动处理缺失值......但 scipy.spatial.distance.pdist 似乎不处理缺失值!)

最佳答案

我找不到计算缺失值数据距离矩阵的方法。所以这是我使用欧几里德距离的天真解决方案。

import numpy as np
def getMissDist(x,y):
    return np.nanmean( (x - y)**2 )

def getMissDistMat(dat):
    Npat = dat.shape[0]
    dist = np.ndarray(shape=(Npat,Npat))
    dist.fill(0)
    for ix in range(0,Npat):
        x = dat[ix,]
        if ix >0:
            for iy in range(0,ix):
                y = dat[iy,]
                dist[ix,iy] = getMissDist(x,y)
                dist[iy,ix] = dist[ix,iy]
    return dist

然后假设 dat 是 N(= 案例数)乘以 P(=特征数)数据矩阵,缺失值然后可以对此 dat 执行层次聚类> 作为:

distMat = getMissDistMat(dat)
condensDist = dist.squareform(distMat)
link = hier.linkage(condensDist, method='average')

关于具有缺失值的Python层次聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31420912/

相关文章:

r - 填补缺失的水平

r - 在 R 中的 data.table 中选择 NA

python - 如何在 PyGTK 中向 button.connect 添加额外的参数?

python - 如何在 Python 中使用过滤器,该函数属于一个对象,该对象是被过滤列表中的一个元素?

python - 如何在每次 while 循环通过时创建一个新数组

python - 向量已被插值的矩阵向量乘法 - Python

python - Scipy 树状图叶节点排序

python - Paramiko 在异常后不返回提示(Python 3)

python - C 连续和 Fortran 连续数组操作之间的性能

css - 在 apache 后面运行时,Confluence 不显示样式