Как я могу вычислить матрицу расстояний, используя евклидово расстояние для числовых переменных кадра данных? - PullRequest
0 голосов
/ 14 апреля 2020

Это мой набор данных: https://archive.ics.uci.edu/ml/datasets/Bank+Marketing

В этом наборе данных есть 7 числовых переменных, и как новичок я не смог обработать матрицу расстояний, используя евклидово расстояние. Я перепробовал много вещей на inte rnet, но не смог решить. Данные очень большие, поэтому иногда они вызывают проблемы с памятью.

from sklearn.metrics.pairwise import euclidean_distances

X = [[0, 1], [1, 1]]
# distance between rows of X
euclidean_distances(X, X)

# result:
# array([[0., 1.],
#        [1., 0.]])

# get distance to origin
euclidean_distances(X, [[0, 0]])

# Result:
# array([[1.        ],
#        [1.41421356]]) 

Пример, который я пытался применить к своему коду, думаю, он работает, но я не смог применить его должным образом.

1 Ответ

1 голос
/ 14 апреля 2020

Вы уже определили свою проблему: вы не можете хранить всю матрицу NxN в памяти. Информация в заголовке вашего набора данных говорит о том, что в базе данных есть 45211 строк. Полная матрица расстояний, использующая данные float32, занимает более 16 Гб. Если это больше, чем ваша доступная оперативная память, или больше, чем допустимый предел вашей системы для одного объекта данных, вы получите ошибку памяти.

Вы "решаете" заданное проблема путем изменения вашего алгоритма на что-то, что не требует сразу всей двусторонней таблицы в памяти. Вы можете уменьшить вдвое требования к памяти, оставив только верхний треугольник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...