我正在研究大学任务的KNN算法,此刻我正在寻找作为Scipy lil_matrix存储的每个训练矢量之间的欧几里得距离(由于由于上述相同的原因,向量中的值的稀疏性)以及作为1×nil_matrix存储的测试向量。Scipy稀疏矩阵和稀疏矢量之间的欧几里德距离
制定出欧氏距离,然后我做了下面的代码:
for positiveIndex, positivesComparison in enumerate(positives):
result.append((spatial.distance.euclidean(positivesComparison.todense(),sentenceVector.todense()), positiveIndex, 1))
哪里sentenceVector是1行的lil_matrix和阳性是大小为n×m的一个lil_matrix。
我想试着找出一些东西,比逐行检查正向矩阵和每次评估欧氏距离,并且可能运行正向量矩阵和sentenceVector向量之间的欧氏距离,并返回1 xm矩阵与欧氏距离。 我想这样做的原因是,目前的系统计算相对较慢,因为它基本上是NM时间复杂度,因为我需要计算多个句子测试。 这是可能的,如果是的话,我会怎么做?
注意,任务是使用不同的K值的KNN算法,而不是实际执行的KNN(虽然我们不允许使用KNN库做任务)
我最初只是使用numpy数组,但矢量大小非常大,数据非常稀疏。存储零值会导致训练集大约5GB,只存储非零值,降至20-30MB。巨大的差异。我使用lil_matrix,因为我在开始时定义了矩阵的大小,但是需要通过x,y坐标为它指定值,并且只能找到使用lil_matrix来完成的方法。我不确定我是否可以使用scikit-learn,会询问它,所以现在我将查看一下提到的一些技巧文章。 – Lincoln
如果你不能使用sklearn,你可以随时调整相关函数: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/pairwise.py#L109 – perimosocordiae