scipy.pdist() возвращает значения NaN

Я пытаюсь сгруппировать временные ряды. Внутригрупповые элементы имеют одинаковую форму, но разные масштабы. Поэтому я хотел бы использовать показатель корреляции в качестве метрики для кластеризации. Я пробую корреляцию или коэффициент коэффициента Пирсона (любые предложения или альтернативы приветствуются). Однако следующий код возвращает ошибку, когда я запускаю Z = linkage(dist), потому что в dist есть некоторые значения NaN. В time_series нет значений NaN, это подтверждается

np.any(isnan(time_series))

который возвращает False

from scipy.spatial.distance import pdist
from scipy.cluster.hierarchy import dendrogram, linkage

dist = pdist(time_series, metric='correlation') 
Z = linkage(dist)
fig = plt.figure()
dn = dendrogram(Z)
plt.show()

Как альтернатива, я буду использовать расстояние Пирсона

from scipy.stats import pearsonr

def pearson_distance(a,b):
    return 1 - pearsonr(a,b)[0]

dist = pdist(time_series, pearson_distance)`

но это генерирует некоторые предупреждения времени выполнения и занимает много времени.

1 ответ

Решение
scipy.pdist(time_series, metric='correlation')

Если вы посмотрите на руководство, correlation Варианты делится на разницу. Так что может быть, что у вас есть две одинаковые временные метки, и деление zero от zero дает нам NaN,

Другие вопросы по тегам