我有两个大的稀疏矩阵:
In [3]: trainX
Out[3]:
<6034195x755258 sparse matrix of type '<type 'numpy.float64'>'
with 286674296 stored elements in Compressed Sparse Row format>
In [4]: testX
Out[4]:
<2013337x755258 sparse matrix of type '<type 'numpy.float64'>'
with 95423596 stored elements in Compressed Sparse Row format>
总共需要加载大约5GB的RAM。请注意,这些矩阵非常稀疏(仅占0.0062%)。
对于testX
中的每一行,我想要找到trainX
中最近的邻居,并返回其对应的标签,该标签可以在trainY
中找到。 trainY
是一个列表,与trainX
具有相同的长度,并且具有许多许多类别。(一个类由1-5个单独的标签组成,每个标签都是20000个之一,但类的数量与我现在要做的事情无关。)
我正在使用sklearn
的KNN算法来实现此目的:
from sklearn import neighbors
clf = neighbors.KNeighborsClassifier(n_neighbors=1)
clf.fit(trainX, trainY)
clf.predict(testX[0])
即使预测1个
testX
项目也需要一段时间(例如30-60秒),但如果乘以200万,就几乎不可能完成。我的配备有16GB RAM的笔记本电脑开始有点交换内存,但确实可以完成1个testX
项。
我的问题是,我该怎么做才能在合理的时间内完成呢?比如在一个大型EC2实例上一夜之间?仅仅增加RAM并防止交换是否足以加快速度(我的猜想是否定的)。也许我可以以某种方式利用稀疏性来加快计算速度?谢谢。