Python / scikit-learn中的稀疏距离计算实现

5 投票
1 回答
3133 浏览
提问于 2025-04-17 10:47

我有一个很大的数据集,大小是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。

我只需要计算所有训练点之间的距离,方法是:

D = pdist(X)

可惜的是,scipy.spatial.distance中的距离计算方法只适用于密集矩阵。由于数据集太大,使用pdist这样的函数是不可行的:

D = pdist(X.todense())

如果有人能提供稀疏矩阵距离计算的方法或者解决这个问题的替代方案,我将非常感激。

非常感谢!

1 个回答

5

scikit-learn 这个库里,有一个叫 sklearn.metrics.euclidean_distances 的函数,它可以同时处理稀疏矩阵和密集的 numpy 数组。你可以查看这个 参考文档 来了解更多信息。

不过,目前对于稀疏矩阵,非欧几里得距离的计算还没有实现。

撰写回答