劉淑英 鄒燕飛 唐云凱 李依橋 趙子慧
摘 要:目前我們使用的酒店推薦系統(tǒng)中,會(huì)出現(xiàn)用戶評(píng)分?jǐn)?shù)據(jù)極端稀疏,矩陣的稀疏性導(dǎo)致推薦算法在相似性計(jì)算時(shí)存在較大誤差,進(jìn)而導(dǎo)致最近鄰居選擇的不準(zhǔn)確,從而影響推薦質(zhì)量。針對(duì)此問(wèn)題,我們通過(guò)對(duì)評(píng)分矩陣采用PCA降維的方法,降低評(píng)分矩陣的稀疏性,保留了最能代表用戶興趣的維數(shù),使得相似性計(jì)算更加準(zhǔn)確,保證了最近鄰居選擇的準(zhǔn)確性,從而提高了推薦質(zhì)量。
關(guān)鍵詞:機(jī)器學(xué)習(xí);PCA算法;酒店推薦系統(tǒng);降維
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-2064(2019)22-0051-02
0 引言
在信息技術(shù)和互聯(lián)網(wǎng)蓬勃發(fā)展的今天,大量的數(shù)據(jù)使人們從信息貧乏的時(shí)代走到了信息過(guò)載的時(shí)代,面對(duì)大量的信息,人們獲取到對(duì)自己有用的信息是非常慢[1]。因此,我們需要將信息進(jìn)行過(guò)濾,找到有用的信息,從而使對(duì)數(shù)據(jù)的研究更加簡(jiǎn)單方便,這樣過(guò)濾信息的能力就變成了評(píng)價(jià)一個(gè)系統(tǒng)的重要的條件[2]。PCA算法能夠?qū)崿F(xiàn)數(shù)據(jù)有效降維,并且可以利用特征值對(duì)原始指標(biāo)進(jìn)行分類,實(shí)現(xiàn)特征的準(zhǔn)確提取。
1 PCA算法
PCA算法即主成分分析法(principal component analysis),用于數(shù)據(jù)降維,是以“信息”損失較小的為前提,將高維的數(shù)據(jù)轉(zhuǎn)換到低維,這樣就可以減小計(jì)算量[3]。它可以把一個(gè)確定事物的特征提取出來(lái),舍掉沒(méi)有特點(diǎn)的特征值,提取事物的本質(zhì)因素,使復(fù)雜的問(wèn)題簡(jiǎn)單化。
PCA算法的主旨思想就是通過(guò)對(duì)大量數(shù)據(jù)進(jìn)行一系列的計(jì)算后,將高維度的數(shù)據(jù)降為低維度數(shù)據(jù),應(yīng)用于無(wú)監(jiān)督學(xué)習(xí)。得到的低維將加快模型訓(xùn)練的速度,低維特征具有更好的可視化特性。此外,數(shù)據(jù)降維將導(dǎo)致某些信息丟失。通常我們可以設(shè)置一個(gè)丟失閾值來(lái)控制信息丟失[4-5]。PCA算法的計(jì)算過(guò)程如下:
設(shè)原始樣本集為X,其有m個(gè)樣本,每個(gè)樣本有n個(gè)特征維度,可以用式(1)表示為:
(1)
接下來(lái),我們對(duì)每個(gè)特征去均值化(即均值零化),計(jì)算公式為:
(2)
然后,我們通過(guò)計(jì)算協(xié)方差矩陣,計(jì)算公式為:
(3)
將特征向量按特征值的大小排序,組成矩陣u=[u1 u2 … un],則特征向量u1為主特征向量(對(duì)應(yīng)的特征值最大),u2為次特征向量,以此類推。對(duì)于特征值越大的特征向量,樣本集在該方向上的變化越大。對(duì)于由特征向量組成的矩陣我們稱為特征矩陣,特征矩陣是一個(gè)正交矩陣,即滿足uTu=uuT=I。
PCA算法非常巧妙地利用協(xié)方差矩陣來(lái)計(jì)算出樣本集在不同方向上的分散程度,利用方差最大的方向作為樣本集的主方向。PCA算法為我們提供了一種處理大量數(shù)據(jù)便捷快速的方法,在這個(gè)信息過(guò)量,發(fā)展速度迅速的時(shí)代,可以為我們提高工作學(xué)習(xí)以及生活的效率。
當(dāng)樣本數(shù)據(jù)量大,維度高時(shí),PCA算法是非常有效的一種降維方法,它能起到的作用有兩個(gè):一個(gè)是節(jié)約存儲(chǔ)空間,當(dāng)數(shù)據(jù)量過(guò)多時(shí),通過(guò)減少減少幾個(gè)維度就可以節(jié)約很多空間;另一個(gè)是提供計(jì)算的速度,將數(shù)據(jù)降維后,無(wú)論是樣本數(shù)據(jù)訓(xùn)練時(shí),還有對(duì)新數(shù)據(jù)做出響應(yīng)時(shí),速度都會(huì)大幅提高。
2 模型實(shí)現(xiàn)
PCA算法的主要過(guò)程是首先構(gòu)建一個(gè)示例矩陣通過(guò)使用樣本集和特性,然后利用樣本集,計(jì)算協(xié)方差矩陣,然后根據(jù)協(xié)方差矩陣的特征值和特征向量,并保留最大的前k個(gè)特征值的特征向量作為新維方向。將原始樣本集轉(zhuǎn)換為新的空間維度。
2.1 數(shù)據(jù)的采集
本文用到的樣本數(shù)據(jù)集為兩類,第一類樣本數(shù)據(jù)為行為100000,列為5。100000表示的是用戶的數(shù)量,5表示有5種類型的酒店。即100000用戶對(duì)酒店在5個(gè)維度的側(cè)重點(diǎn)的評(píng)分,這5個(gè)維度分別為用戶酒店的瀏覽量,訪客數(shù),下單數(shù),成交數(shù),成交金額。第二類樣本數(shù)據(jù)集為行為5,列為100。5表示樣本,100表示的是特征點(diǎn),5個(gè)維度同樣代表的是瀏覽量,訪客數(shù),下單數(shù),成交數(shù),成交金額等。即第二類樣本數(shù)據(jù)集為100個(gè)酒店在5個(gè)維度的評(píng)分。
使用矩陣運(yùn)算,將兩類樣本數(shù)據(jù)集相乘,生成顧客對(duì)酒店的評(píng)分,其具體實(shí)現(xiàn)代碼為:
hotelRating=pd.DataFrame(generators.dot(hotelcomp),index=[‘c%.6d%i for i in range(customerNum)],columns=[‘hotel_%.3d%j for j in range(100)]).astype(int)
print(hotelRating)
2.2 數(shù)據(jù)的預(yù)處理
計(jì)算樣本集的平均值,再用樣本集減去平均值并且除以其標(biāo)準(zhǔn)差,最后將數(shù)據(jù)進(jìn)行歸一化處理。其實(shí)現(xiàn)代碼為:
def normalize(s):
if s.std()>1e-6:
return(s-s.mean())*s.std()**(-1)
else:
return (s-s.mean())
hotelRating_norm=hotelRating.apply(normalize)
2.3 模型訓(xùn)練
PCA算法的計(jì)算過(guò)程為:
(1)數(shù)據(jù)中心化,去均值。
(2)求解協(xié)方差矩陣。
(3)利用特征值分解/奇異值分解,求解特征值以及特征向量。
(4)利用特征向量構(gòu)造投影矩陣。
首先,計(jì)算協(xié)方差矩陣,然后進(jìn)行奇異值分解,PCA算法就是對(duì)協(xié)方差矩陣做特征值分解,我們使用奇異值分解來(lái)分解矩陣。其具體實(shí)現(xiàn)代碼為:
u,s,v=np.linalg.svd(hotelRating_norm_corr)
print(‘u\n{}.format(u))
在實(shí)現(xiàn)的過(guò)程中,我們使用奇異值分解矩陣,使用SVD分解特征值,降低問(wèn)題復(fù)雜性,奇異值分解,就是將一個(gè)矩陣通過(guò)運(yùn)算分解為三個(gè)矩陣。即A=U*S*V,其中U和V均是正交矩陣,S為對(duì)角矩陣。相對(duì)于PCA特征值分解,奇異值分解可處理的不只是協(xié)方差矩陣(方陣),還可以直接處理數(shù)據(jù)。
然后通過(guò)對(duì)數(shù)據(jù)的描繪,最后得到特征值碎石圖,如圖1所示。
根據(jù)碎石圖1可知,X軸為成分?jǐn)?shù),Y軸為特征值,在第五個(gè)之后變得平緩,可得知我們可提取五個(gè)主成分,實(shí)現(xiàn)了PCA數(shù)據(jù)降維。
最后我們進(jìn)行獲取分類評(píng)分。根據(jù)分析協(xié)方差矩陣中100個(gè)樣本和100個(gè)特征點(diǎn)的相似度,找出與每個(gè)特征點(diǎn)相似的樣本,得到特征值。選出明顯大的前k個(gè)特征值,舍去小的特征值。我們可以通過(guò)樣本集特征提取最高的5個(gè)主成分。截取SVD維度來(lái)確定酒店相似度,具體實(shí)現(xiàn)代碼為:
u_short=u[:,:5] ?v_short=v[:5,:] ?s_short=s[:5]
print(‘u,s,v,short{}.format(u_short,v_short,s_short))
該程序最終會(huì)得到一個(gè)行為100,列為5的矩陣,即100個(gè)酒店在前5個(gè)主特征值得評(píng)分。然后我們計(jì)算出指定酒店在各分類評(píng)分。首先獲取樣本集中的最高成分,與檢索出的30號(hào)酒店的用戶評(píng)分相乘。其具體實(shí)現(xiàn)代碼為:
top_component=hotelRating_norm.dot(u_short).dot(np.diag(np.power(s_short,-0.5)))
hotel_ind = 30
rating=hotelRating_norm.loc[:,‘hotel_%.3d% hotel_ind]
print ("classification of the dth hotel"hotel_ind,
top_component.T.dot(rating)/customerNum)
該程序的運(yùn)行結(jié)果如圖2所示。
根據(jù)圖2可以看出30號(hào)酒店與第1個(gè)分類評(píng)分最高,第3個(gè)分類的評(píng)分最低。用戶可以根據(jù)自身需求選擇是否入住30號(hào)酒店。
3 結(jié)語(yǔ)
通過(guò)用PCA算法實(shí)現(xiàn)簡(jiǎn)單的酒店推薦系統(tǒng),在實(shí)際研究中,PCA算法是不能完全的到樣本集的分類的,還要結(jié)合SVD奇異值分解獲得樣本集的特征值。PCA算法非常巧妙地利用協(xié)方差矩陣來(lái)計(jì)算出樣本集在不同方向上的分散程度,利用方差最大的方向作為樣本集的主方向。通過(guò)對(duì)該P(yáng)CA算法在酒店推薦系統(tǒng)中的應(yīng)用研究,實(shí)驗(yàn)結(jié)果表明:該酒店推薦算法具有較高的準(zhǔn)確度和覆蓋度。
參考文獻(xiàn)
[1] Justiawan.Riyanto Sigit,Zainal Arief.Tooth Color Detection Using PCA and KNN Classifier Algorithm Based on Color Moment[J].Emitter:International Journal of Engineering Technology,2017,5(1):316-325.
[2] Yan Wang.An Advanced AOI-Cast Algorithm Based on PCA[J].Advanced Materials Research,2014,3227(945):1-2.
[3] 易旺.酒店搜索推薦的設(shè)計(jì)與分析[D].武漢:華中科技大學(xué),2013.
[4] 劉艷.基于協(xié)同過(guò)濾的酒店推薦系統(tǒng)研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2011.
[5] 謝佩,吳小俊.分塊多線性主成分分析及其在人臉識(shí)別中的應(yīng)用研究[J].計(jì)算機(jī)科學(xué),2015,42(03):274-279.