Когда я пытаюсь вычислить расстояние Махаланобиса со следующим кодом python, я получаю некоторые записи Nan в результате. У вас есть представление о том, почему это происходит? Мой data.shape = (181, 1500)Scipy - Nan при расчете расстояния Mahalanobis
from scipy.spatial.distance import pdist, squareform
data_log = log2(data + 1) # A log transform that I usually apply to my data
data_centered = data_log - data_log.mean(0) # zero centering
D = squareform(pdist(data_centered, 'mahalanobis'))
Я также попытался:
data_standard = data_centered/data_centered.std(0, ddof=1)
D = squareform(pdist(data_standard, 'mahalanobis'))
Также получил пренебрежимо малых. Ввод не поврежден, и другие расстояния, такие как расстояние корреляции, могут быть рассчитаны просто отлично. По какой-то причине, когда я уменьшаю количество функций, я перестаю получать Nans. Например следующие примеры не получает Nan:
D = squareform(pdist(data_centered[:,:200], 'mahalanobis'))
D = squareform(pdist(data_centered[:,180:480], 'mahalanobis'))
в то время как те, другие получают Nans:
D = squareform(pdist(data_centered[:,:300], 'mahalanobis'))
D = squareform(pdist(data_centered[:,180:600], 'mahalanobis'))
Любые подсказки? Является ли это ожидаемым поведением, если какое-либо условие для ввода не выполняется?
Вы можете поделиться куском с вашими данными? – marmeladze
0,9,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,2,7,0,0,1,0,0,1 , 0,0,0,0,0,0,0,0,12,0,0,1,0,0,0 0,9,0,0,0,0,0,0,0,0 , 0,0,0,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2 , 0,1,0,0,0 0,5,1,0,0,1,5,0,0,2,0,0,0,0,8,0,0,0,4,0 , 0,0,7,4,0,0,0,0,0,0,0,1,0,9,0,1,3,0,0,1 0,4,0,0,0 , 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0 , 0,0,0,5,0,0,0,0,0,0 0,13,0,0,0,0,1,0,0,0,0,2,6,0,3 , 0,0,0,6,0,1,0,0,3,2,0,0,0,0,0,0,0,0,5,4,0,0,0,0,0 1,17,0,0,5,2,0,0,0,0,0,0,7,0,0,0,0,0,1,1,0,0,0,1,1 , 0,0,0,0,1,0,0,0,5,0,0,3,2,0,0 0,8,0,0,3,0,0,0,0,0 , 0,2,10,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0 , 0,0,0,6,0 – Gioelelm
Это довольно маленькое окно, которое соответствует комментариям. Как бы вы хотели, чтобы я разделил его? – Gioelelm