均值歸一化可以讓算法運行得更好。

現在考慮這樣一個情況:一個用戶對所有的電影都沒有評分,即上圖所示 的Eve用戶。現在我們要學習特征向量(假設n=2) 以及用戶5的向量θ(5),因為用戶Eve沒有對任何電影打分,所以前面的一項為0,只有后面正則化的項,所以影響θ取值的只有后面的θ的正則化的項。所以要使它最小,即θ的取值為0.所以當我們預測用戶5對所有電影的評分的時候,這時的評分都為0.所以我們會預測所有的電影的評分都為0.這樣是毫無意義的,因為我們還是沒有辦法知道我們應該向用戶5推薦什么電影(沒有一部電影評分要高些),所有的電影預測為0也沒有意義,因為事實是有的電影評分要高些,有的電影評分要低些。
均值歸一化可以讓我們解決上面的問題

首先計算每部電影所得評分的均值,將其放在向量u中,將所有的電影評分減去平均評分,即將每部電影的評分歸一化,讓其平均值變為0.
現在我們將這個評分數據集Y使用協同過濾算法,來學習θ(j)與x(i).
對於用戶j對於電影i的評分,我們使用(θ(j))T(x(i))+u(i)
所以對於user5我們學習到的θ為[0,0],這樣再加上u值,這樣user5對於電影1的預測分為2.5,對於電影2的預測分也為2.5....它的意思其實是在說,如果用戶5沒有給任何電影評分,我們要做的是預測他對每部電影的評分為這些電影的平均得分
均值歸一化Y,使得每行的平均值為0,如果有些電影是沒有評分的,這種情況我們可以將Y的列進行均值歸一化,但是這種情況可能不好,因為當一部電影沒有一個用戶對它進行評分時,這種情況我們是不會將這部電影推薦給用戶的。所以當用戶沒有對一部電影進行評分時,我們可以使用行無值歸一化來處理,這種情況比列均值歸一化要常見些
總結
協同過濾算法的預處理過程--均值歸一化,根據數據集的不同,可以讓算法運行得更好
