具有缺失值的Python层次聚类

时间:2015-07-15 03:21:01

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

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

1 个答案:

答案 0 :(得分:1)

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

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')