我正在研究大學任務的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