□邵 娜
隨著互聯(lián)網(wǎng)的迅速普及,大量的信息充斥著人們的生活,這種現(xiàn)象稱為信息超載。面對這一現(xiàn)象,推薦系統(tǒng)應(yīng)運而生。推薦系統(tǒng)結(jié)合推薦算法,通過分析數(shù)據(jù)庫中記錄的興趣愛好,進(jìn)行個性化計算,由系統(tǒng)分析得到推薦信息,引領(lǐng)用戶發(fā)現(xiàn)自己真實需要的物品信息。
本系統(tǒng)設(shè)計假定用戶與商品評價之間是最簡單的線性關(guān)系,我們將基于這種最簡單的線性關(guān)系來敘述數(shù)據(jù)挖掘是如何計算參數(shù)的。當(dāng)要處理更復(fù)雜的關(guān)系時,需要做的就是替換這種關(guān)系,但模型及算法步驟是很相似的。
(一)線性回歸。假定有一組數(shù)據(jù)記作xi,其中i=1,2,…n這是定義域,值域也就是輸出yi,i=1,2,…n,yi=theta0+theta1*xi,這就是假定的線性關(guān)系。數(shù)據(jù)挖掘的一般過程如下。
1.觀測數(shù)據(jù)。進(jìn)行統(tǒng)計假設(shè),可以假設(shè)數(shù)據(jù)近似服從線性關(guān)系y=theta0+theta1*x,同時這個數(shù)學(xué)表達(dá)也就是我們的目標(biāo)函數(shù)。
2.建立代價函數(shù)。假設(shè)后要建立標(biāo)準(zhǔn),看假設(shè)與實際情況相差如何,利用常用的代價函數(shù)最小二乘法以求出最優(yōu)參數(shù):J=sum(theta0-theta1*x-yi)2/n。將這個表達(dá)式記作J,要求的就是使J達(dá)到最小的theta=[theta0;theta1]。
3.求解代價函數(shù)的梯度。這是一個具有凸性的函數(shù)。利用凸優(yōu)化的方法求出全局最優(yōu)解。其核心部分就是求解代價函數(shù)的梯度,這里我們對theta進(jìn)行求偏導(dǎo),以得出梯度,
J'=X*(X*theta-y)/m。
4.梯度下降法。給定theta的初值,我們計算代價函數(shù)在每個點的梯度,讓參數(shù)沿梯度反方向移動一個很小的值,然后再重新計算梯度,直到算法收斂,這就是梯度下降法。用該方法得到的線性回歸結(jié)果。其中核心代碼在MATLAB中如下:
for r=1:num_iters
theta=theta-alpha*X'*(X*theta-y)/m;
Theta(:,r)=theta;
end
(二)協(xié)同過濾。協(xié)同過濾算法架構(gòu)較為復(fù)雜,但具體到每一步其實很簡單,幾乎和線性回歸一樣。本文將使用的算法是共軛梯度下降法。核心步驟就是計算代價函數(shù)的梯度,這一步獨立于算法,是算法的輸出部分。
X=x-alphasumTj-y*Tj+lambda*x
Tj=Tj-alpha(sumTj-y*x+lambda*Tj)
步驟如下:第一,初始化x和theta,這個初始化是隨機(jī)的,一般用高斯函數(shù)來產(chǎn)生。注意隨機(jī)不代表隨意,如果胡亂取值,是不會得到好的結(jié)果的,事實上收斂速度和你取的初值是有關(guān)聯(lián)的。第二,用梯度下降法來計算X和theta,方法是固定X用公式f求theta,固定theta,用公式求X。核心代碼如下:J=(X*Theta'-Y).*R;X_grad=J*Theta+lambda*X;Theta_grad=J'*X+lambda*Theta;J=J(:)'*J(:)/2+(Theta(:)'*Theta(:)+X(:)'*X(:))*lambda/2。第三,用共軛梯度下降法反復(fù)迭代直到收斂,得到想要的數(shù)據(jù)關(guān)系。
圖1 正則化后的數(shù)據(jù)
(三)共軛梯度下降算法。首先是數(shù)據(jù)需要進(jìn)行中心化和單位化。比如Y=[5 5 3; 3 2 1; 0 1 3],中心化后為[2. 33 2.33 0.667 ; 0.333 -0.667 -1.333; -2.667 -1.667 0.667],然后進(jìn)行單位化,這個在計算過程中特別重要,特別是對參數(shù)lambda的影響。關(guān)于共軛梯度下降法需要注意兩個關(guān)鍵點,一是收斂條件,選取的是Wolfe-Powell條件。這個條件講的是,當(dāng)找到梯度之后,沿著這個梯度方向移動最適合。二是共軛梯度的計算。采用的是Polack-Ribiere共軛梯度法。共軛梯度法并沒有計算函數(shù)的二次導(dǎo)數(shù),即Hessian矩陣,而是將Hessian矩陣與數(shù)據(jù)矩陣的乘積看成一個整體進(jìn)行估計。
圖2 填充后的結(jié)果
以某個電影數(shù)據(jù)庫為例,通過系統(tǒng)如下的設(shè)計原理:第一,將己有數(shù)據(jù)載入,并進(jìn)行預(yù)處理;第二,協(xié)同過濾算法,構(gòu)造代價函數(shù)和梯度函數(shù);第三,梯度下降法求解參數(shù);第四,參數(shù)對用戶的愛好進(jìn)行預(yù)測。設(shè)計電影為代價函數(shù)中的X的前綴,對應(yīng)的評分就是數(shù)據(jù)矩陣,上千部電影,900+用戶評分。正則化之后的數(shù)據(jù)矩陣如圖1所示。那么推薦系統(tǒng)需要做的工作就是求出theta,然后對數(shù)字為0的地方進(jìn)行填充,得到結(jié)果如圖2所示。
對數(shù)據(jù)再進(jìn)行一些后續(xù)加工處理就可以得到輸出結(jié)果,比如對某電影的平均評分,還可以得到某用戶對某些電影的喜好預(yù)測等。上述就是協(xié)同過濾的全過程。
本文提出一種新的電影推薦方法,詳細(xì)描述了協(xié)同過濾的過程及系統(tǒng)的設(shè)計。但是由于時間的限制,電影系統(tǒng)的功能只實現(xiàn)了簡單的電影推薦以及電影信息查看。在以后的研究中需進(jìn)一步完善系統(tǒng)的功能,使推薦系統(tǒng)在實際生活中,為用戶提供更多的功能選擇。