計算用戶偏好,也即計算前文所述的這些系數。
假設用戶歷史評分文件是一個 m 乘 n 的矩陣R,其中 m 表示用戶的個數。R中某些位置的值為空,意味著對應的用戶與物品之間沒產生過聯系。
首先,對某一用戶A,我們需要計算一下他的平均打分值 p ,后面要用。以電影評分為例,即把他所給出的電影評分值累加,再除以他所評價過的電影數目。如果用戶A對應著矩陣R的第一行,則相當于把矩陣R第一行中的非空值進行累加,再除以非空值的數目。(預告:如果物品數非常多,而用戶A評價過的電影數卻很少,即歷史評分文件對應的矩陣R非常稀疏,在這種矩陣計算過程中我們卻不得不把所有物品給遍歷一次,這樣計算量很大,有什么方法對計算過程進行優(yōu)化嗎?)
其次,計算用戶A對某一屬性的系數,例如屬性①。對所有屬性進行遍歷,就可以得到用戶A的偏好了。我們先看一下對一個屬性的系數是如何計算的。
執(zhí)行對某一屬性對應的系數的計算,還是離不開該用戶對物品的評分數據。以電影評分為例,假設屬性①的取值只能為 0 或 1 ,則我們需要篩選出在該用戶評分過的電影中,屬性①取值為 1 的那些電影,假設數目為 k 。則該用戶對于屬性①的系數為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
其中,表示該用戶對篩選出的 k 部電影中的第 i 部的評分。
最后,我們遍歷所有用戶,就得到了所有用戶的偏好矩陣 S 了。S 的維度是 m 乘 v ,v 表示所有屬性的數目。
我們可以寫一個函數來實現這篇文章所述的功能。
思考,倘若某些屬性的取值為連續(xù)數值,而不是 0 和 1 ,那么我們該如何計算這些系數呢?