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
,