Разреженные реализации дистанционных вычислений в python / scikit-learn - PullRequest
5 голосов
/ 22 января 2012

У меня есть большой (100K на 30K) и (очень) редкий набор данных в формате svmlight, который я загружаю следующим образом:

import numpy as np
from scipy.cluster.vq import kmeans2
from scipy.spatial.distance import pdist, squareform
from sklearn.datasets import load_svmlight_file

X,Y = load_svmlight_file("somefile_svm.txt")

, который возвращает разреженный массив scipy X

Iпросто нужно вычислить попарные расстояния всех обучающих точек как

D = pdist(X)

К сожалению, реализации вычисления расстояния в scipy.spatial.distance работают только для плотных матриц.Из-за размера набора данных невозможно, скажем, использовать pdist как

D = pdist(X.todense())

. Любые указатели для разреженных реализаций вычисления расстояния до матрицы или обходные пути в отношении этой проблемы будут высоко оценены.

Большое спасибо

1 Ответ

4 голосов
/ 22 января 2012

В scikit-learn есть функция sklearn.metrics.euclidean_distances, которая работает как для разреженных матриц, так и для плотных числовых массивов.См. Справочную документацию .

Однако неевклидовы расстояния еще не реализованы для разреженных матриц.

...