항목 간 유사성이 필요한 항목 기반 협업 필터를 만들고 있습니다. 나는 아래와 같은 행렬을 만드는 것이 좋지만, 이제는 double을 계산하지 못하게하고 싶다.두 배가없는 행렬 채우기
예를 들어 설명해 드리겠습니다. 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 | | | | | |
더 자세히 설명해야하는지 알려주세요. 미리 감사드립니다!
을 시도! = item2) ComputeSimilarity (item1, item2); ' – Pikoh
@ Monzhu, 알아요. 그래서 내가 "첫 번째 아이디어"라고 말합니다. – Pikoh