我正在研究基於項目的協作過濾器,爲此您需要項目之間的相似性。我發現創建一個像下面這樣的矩陣效果很好,但我現在想阻止它計算雙精度。填充沒有雙打的矩陣
我會用一個例子來解釋我的意思。假設您有5個項目的列表,每個項目的評分都基於相似性。
計算的相似之處後,我想出了以下矩陣:
I1 | I2 | I3 | I4 | I5 |
I1 | 1 | 0.5| 0.3| 0.2| 0.9|
I2 | 0.5| 1 | 0.2| 0.1| 0.8|
I3 | 0.3| 0.2| 1 | 0.5| 0.1|
I4 | 0.2| 0.1| 0.5| 1 | 0.7|
I5 | 0.9| 0.8| 0.1| 0.7| 1 |
我用下面的代碼這樣做:
//allItems is a list of the 5 items
foreach (var item1 in allItems)
foreach (var item2 in allItems)
ComputeSimilarity(item1, item2);
//ComputeSimilarity(); returns a double, a.k.a. the similarity between items
可以忽略功能的內部運作因爲它工作正常,我只是不知道改變代碼,所以它不會計算兩次。
我該如何改變這個函數來使計算矩陣看起來像這樣?
I1 | I2 | I3 | I4 | I5 |
I1 | | 0.5| 0.3| 0.2| 0.9|
I2 | | | 0.2| 0.1| 0.8|
I3 | | | | 0.5| 0.1|
I4 | | | | | 0.7|
I5 | | | | | |
讓我知道如果我應該詳細說明更多!提前致謝!
作爲第一個想法,怎麼樣'如果(ITEM1! = item2)ComputeSimilarity(item1,item2);' – Pikoh
@MongZhu,我知道。這就是爲什麼我說「作爲第一個想法」 – Pikoh