2

Я новичок в Python. Я хотел бы выполнить иерархическую кластеризацию в наборе данных N на P, который содержит некоторые отсутствующие значения. Я планирую использовать функцию scipy.cluster.hierarchy.linkage, которая принимает матрицу расстояний в конденсированной форме. Есть ли у Python метод вычисления матрицы расстояния для отсутствующих значений, содержащих данные? (В R dist функция автоматически заботится о отсутствующих значениях ... но scipy.spatial.distance.pdist, похоже, не обрабатывает пропущенные значения!)Python иерархическая кластеризация с отсутствующими значениями

+0

Вы может взглянуть на метод Imputer Sklearn. Он использует некоторую интерполяцию, основанную на соседних ячейках. – Moritz

ответ

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 (= число случаев) Р (= число признаков) матрица данных с пропущенными значениями, то можно выполнить иерархическую кластеризацию на этом dat как:

distMat = getMissDistMat(dat) 
condensDist = dist.squareform(distMat) 
link = hier.linkage(condensDist, method='average') 
Смежные вопросы