本發(fā)明涉及一種基于矩陣和張量聯(lián)合分解的汽車推薦方法及系統(tǒng)。
背景技術(shù):
推薦問題由來已經(jīng),即按照用戶與產(chǎn)品之間已有的信息來向用戶推薦新產(chǎn)品或者可能購買的產(chǎn)品。常見的方法往往是根據(jù)用戶與產(chǎn)品的聯(lián)系,如用戶的購買記錄或用戶的打分記錄,來預(yù)測用戶可能喜愛的產(chǎn)品來推薦給用戶。在汽車領(lǐng)域,則會根據(jù)一個(gè)用戶對某車型的打分來預(yù)測其他車型的打分情況。而這樣的打分記錄往往是極為稀疏的。
張量分解補(bǔ)全技術(shù)考慮了用戶與車型之間多方面的聯(lián)系,比如用戶-車型-評價(jià)指標(biāo)的打分,能夠更好地分析三者之間的潛在聯(lián)系。其主要原理是,構(gòu)造一個(gè)張量,里面的值是具體的打分(1到5分),缺失值為0,利用張量中常用的CP分解來對張量進(jìn)行補(bǔ)全,來預(yù)測缺失值的真實(shí)打分。然而,在常見的張量分解補(bǔ)全的過程中,并沒有考慮到其他的輔助信息。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是為了解決上述問題,提供一種基于矩陣和張量聯(lián)合分解的汽車推薦方法及系統(tǒng),它利用汽車制造商和汽車零部件供應(yīng)商之間的供應(yīng)關(guān)系以及按照汽車所屬的車系和制造商所形成的樹狀層次關(guān)系來進(jìn)行約束損失函數(shù),以達(dá)到更好的預(yù)測結(jié)果。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種基于矩陣和張量聯(lián)合分解的汽車推薦方法,包括以下步驟:
S1、構(gòu)造汽車打分張量X,構(gòu)造汽車制造商與供應(yīng)商關(guān)系矩陣E,構(gòu)造汽車產(chǎn)品結(jié)構(gòu)樹T,汽車制造商與供應(yīng)商關(guān)系矩陣E和汽車產(chǎn)品結(jié)構(gòu)樹T都是完整的,用來協(xié)助預(yù)測張量X中缺失的具體值;
S2、根據(jù)汽車產(chǎn)品結(jié)構(gòu)樹T,引入樹組套索模型Tree-guided Group Lasso來對最終的損失函數(shù)進(jìn)行規(guī)約,得到權(quán)重W(v);
S3、根據(jù)S1得到的汽車打分張量X、汽車制造商與供應(yīng)商關(guān)系矩陣E以及S2得到的權(quán)重W(v),建立損失函數(shù),用交替最小二乘法法ALS對損失函數(shù)進(jìn)行迭代;對損失函數(shù)求導(dǎo)置零,然后求出矩陣A、B、C、S和M的迭代函數(shù);
S4、矩陣A、B和C通過S3中的迭代后,通過矩陣A,B,C的外積來還原張量X,即補(bǔ)全張量X的缺失值;計(jì)算出迭代的RMSE和MAE,RMSE和MAE的數(shù)值越小說明預(yù)測結(jié)果越好,RMSE和MAE的數(shù)值越小說明預(yù)測數(shù)值與實(shí)際數(shù)值相差越??;
S5、判斷S4中求得的RMSE是否滿足設(shè)定的收斂條件或判斷迭代次數(shù)是否滿足設(shè)定的收斂條件,若滿足則循環(huán)結(jié)束,否則返回S3;
S6、針對不同的用戶,依據(jù)補(bǔ)全的張量X中的元素,按照打分的從高到低的次序依次給用戶推薦用戶喜歡的車型。
S1的步驟為:
構(gòu)造汽車打分張量X,汽車打分張量維度為I×J×K,I為用戶個(gè)數(shù),J為車型數(shù)量,K為評分標(biāo)準(zhǔn)個(gè)數(shù);
構(gòu)造汽車制造商與供應(yīng)商關(guān)系矩陣E;矩陣E的兩個(gè)維度分別是制造商和供應(yīng)商。矩陣E的維度是U×V,其中U表示制造商個(gè)數(shù),V表示供應(yīng)商個(gè)數(shù);矩陣中的值Euv表示的是制造商u是否與供應(yīng)商v存在供應(yīng)關(guān)系;若等于1,則表示制造商u和供應(yīng)商v之間存在供應(yīng)關(guān)系。相反,若等于0,則不存在供應(yīng)關(guān)系;
構(gòu)造汽車產(chǎn)品結(jié)構(gòu)樹T;根據(jù)汽車領(lǐng)域中,車型-車系-制造商之間的從屬關(guān)系構(gòu)建出一棵樹;每一個(gè)葉子節(jié)點(diǎn)為每個(gè)車型,中間節(jié)點(diǎn)為按照車型所屬的車系或制造商所構(gòu)成的集合,根節(jié)點(diǎn)為所有車型所組成的大集合;每個(gè)子節(jié)點(diǎn)只有一個(gè)父節(jié)點(diǎn),并且同一層節(jié)點(diǎn)沒有重疊。
S1中,汽車打分張量X中的元素表示的是用戶i對車型j的評分標(biāo)準(zhǔn)k的打分;汽車打分張量X的缺失值是需要預(yù)測的;評分標(biāo)準(zhǔn)包括:空間、動力、舒適性、油耗、操控、外觀、內(nèi)飾和性價(jià)比。
所述樹組套索模型Tree-guided Group Lasso:
其中,a代表的是汽車產(chǎn)品結(jié)構(gòu)樹T的中間節(jié)點(diǎn)的權(quán)重,b代表的是汽車產(chǎn)品結(jié)構(gòu)樹T葉子節(jié)點(diǎn)的權(quán)重;gv是中間節(jié)點(diǎn)所包含車型的個(gè)數(shù)、車系的打分情況和制造商評級三者的乘積,然后對乘積進(jìn)行歸一化,歸一化到0-1之間,而sv=1-gv;GV代表的是樹中的任意一個(gè)節(jié)點(diǎn)(可能是葉子節(jié)點(diǎn),也可能是中間節(jié)點(diǎn)或根節(jié)點(diǎn)),是車型的集合;在對應(yīng)矩陣B(矩陣B是張量X通過CP分解出來的第二個(gè)因子矩陣,維度是J×R,J代表車型數(shù)量,R代表張量的秩)的若干行,所述若干行所對應(yīng)的車型屬于樹中的節(jié)點(diǎn)GV,||*||表示的是歐幾里得范數(shù);|*|代表的是L1范數(shù);c是結(jié)構(gòu)樹T中節(jié)點(diǎn)v的子節(jié)點(diǎn)。
所述損失函數(shù)如下:
f(A,B,C,M,S)=Tensor(A,B,C)+Enterp(M,S)+Weight(B)+Manu(M,B)
其中,Tensor(A,B,C),Enterp(M,S),Manu(M,B),Weight(B)分別為:
其中,所涉及到的A、B和C是張量X通過CP分解出來的因子矩陣,維度分別為I×R,J×R,K×R,其中R為張量的秩;CP的英文全稱是:CANDECOMP/PARAFAC decomposition;
M和S為矩陣E通過矩陣分解出來的因子矩陣,維度分別為U×R,V×R,Bk代表的矩陣B的第k行,其中,0≤k<J;λT是函數(shù)Tensor(A,B,C)的正則化參數(shù),λE是函數(shù)Enterp(M,S)的正則化參數(shù)、λM是函數(shù)Manu(M,B)的正則化參數(shù)、λW是函數(shù)Weight(B)的正則化參數(shù)。A||F、||B||F、||C||F分別對應(yīng)著矩陣A,B,C的F-范數(shù)。Mj表示的是矩陣M的第j列,其中0≤j<U,即制造商j的特征向量。代表的是第一層的第j個(gè)節(jié)點(diǎn),即j個(gè)葉子節(jié)點(diǎn);
代表的是汽車產(chǎn)品結(jié)構(gòu)樹T第i層第j個(gè)集合,是汽車產(chǎn)品結(jié)構(gòu)樹T第i層第j個(gè)集合的權(quán)重,X(2)是張量X按照2階展開mode-2展開,λ是正則化參數(shù),⊙表示Khatri-Rao乘積。
對矩陣E和張量X進(jìn)行聯(lián)合分解,并使得Mj和差值最小,即對應(yīng)約束函數(shù)Manu(M,B);對張量X分解采用CP分解,對矩陣分解采用基本的矩陣分解E=M×ST。
矩陣A、B、C、S和M的迭代函數(shù):
C=(X(3)(B⊙A))(BTB*ATA+λTIR)-1
S=ETM(MTM+λEIR)-1
X(1)代表張量X按照1階展開mode-1展開;X(2)代表張量X按照mode-2展開;X(3)代表張量X按照mode-3展開;IR代表的是R×R的單位矩陣;AT、BT、CT、ET、MT、ST表示矩陣A、B、C、E、M、S的轉(zhuǎn)置。
所述計(jì)算出迭代的RMSE和MAE:
是張量原先缺失值的預(yù)測結(jié)果,而yi是張量原先缺失值的真實(shí)結(jié)果,n代表的是缺失值的總數(shù)。
所述S5設(shè)置迭代次數(shù)為50次,并設(shè)置RMSE為0.7,當(dāng)?shù)螖?shù)超過50或者RMSE低于0.7的時(shí)候,則停止循環(huán)。
一種基于矩陣和張量聯(lián)合分解的汽車推薦系統(tǒng),包括:
構(gòu)造單元:用于構(gòu)造汽車打分張量X,構(gòu)造汽車制造商與供應(yīng)商關(guān)系矩陣E,構(gòu)造汽車產(chǎn)品結(jié)構(gòu)樹T,汽車制造商與供應(yīng)商關(guān)系矩陣E和汽車產(chǎn)品結(jié)構(gòu)樹T都是完整的,用來協(xié)助預(yù)測張量X中缺失的具體值;
規(guī)約單元:用于根據(jù)汽車產(chǎn)品結(jié)構(gòu)樹T,引入樹組套索模型Tree-guided Group Lasso來對最終的損失函數(shù)進(jìn)行規(guī)約,得到權(quán)重W(v);
損失函數(shù)建立單元:用于根據(jù)汽車打分張量X、汽車制造商與供應(yīng)商關(guān)系矩陣E以及權(quán)重W(v),建立損失函數(shù),用交替最小二乘法法ALS對損失函數(shù)進(jìn)行迭代;對損失函數(shù)求導(dǎo)置零,然后求出矩陣A、B、C、S和M的迭代函數(shù);
張量還原單元:矩陣A、B和C通過迭代后,通過矩陣A,B,C的外積來還原張量X,即補(bǔ)全張量X的缺失值;計(jì)算出迭代的RMSE和MAE,RMSE和MAE的數(shù)值越小說明預(yù)測結(jié)果越好,RMSE和MAE的數(shù)值越小說明預(yù)測數(shù)值與實(shí)際數(shù)值相差越小;
判斷單元:用于判斷求得的RMSE是否滿足設(shè)定的收斂條件或判斷迭代次數(shù)是否滿足設(shè)定的收斂條件,若滿足則循環(huán)結(jié)束,否則返回?fù)p失函數(shù)建立單元;
推薦單元:用于針對不同的用戶,依據(jù)補(bǔ)全的張量X中的元素,按照打分的從高到低的次序依次給用戶推薦用戶喜歡的車型。
構(gòu)造單元包括:
汽車打分張量構(gòu)造模塊,用于構(gòu)造汽車打分張量X,汽車打分張量維度為I×J×K,I為用戶個(gè)數(shù),J為車型數(shù)量,K為評分標(biāo)準(zhǔn)個(gè)數(shù);
關(guān)系矩陣構(gòu)造模塊,用于構(gòu)造汽車制造商與供應(yīng)商關(guān)系矩陣E;矩陣E的兩個(gè)維度分別是制造商和供應(yīng)商;矩陣E的維度是U×V,其中U表示制造商個(gè)數(shù),V表示供應(yīng)商個(gè)數(shù);矩陣中的值Euv表示的是制造商u是否與供應(yīng)商v存在供應(yīng)關(guān)系;若等于1,則表示制造商u和供應(yīng)商v之間存在供應(yīng)關(guān)系。相反,若等于0,則不存在供應(yīng)關(guān)系;
汽車產(chǎn)品結(jié)構(gòu)樹構(gòu)造模塊,用于構(gòu)造汽車產(chǎn)品結(jié)構(gòu)樹T;根據(jù)汽車領(lǐng)域中,車型-車系-制造商之間的從屬關(guān)系構(gòu)建出一棵樹;每一個(gè)葉子節(jié)點(diǎn)為每個(gè)車型,中間節(jié)點(diǎn)為按照車型所屬的車系或制造商所構(gòu)成的集合,根節(jié)點(diǎn)為所有車型所組成的大集合;每個(gè)子節(jié)點(diǎn)只有一個(gè)父節(jié)點(diǎn),并且同一層節(jié)點(diǎn)沒有重疊。
樹組套索模型是一種基于正則化方法的能夠同時(shí)實(shí)現(xiàn)稀疏特征變量選擇和模型參數(shù)估計(jì)的方法。有時(shí)樣本的多個(gè)特征變量之間存在組結(jié)構(gòu),把輸入變量之間的組結(jié)構(gòu)作為先驗(yàn)信息,提出了組套索模型。許多數(shù)據(jù)不但具有組結(jié)構(gòu),而且組之間存在偏序關(guān)系,即樹結(jié)構(gòu)。當(dāng)處理這種數(shù)據(jù)時(shí),需要充分利用樹結(jié)構(gòu)作為先驗(yàn)信息,利用上述先驗(yàn)信息得到的樹組套索模型
本發(fā)明的有益效果:
1充分利用汽車與其所屬車系、制造商之間的結(jié)構(gòu)關(guān)系以及制造商與供應(yīng)商之間的耦合關(guān)系,實(shí)現(xiàn)汽車選購的推薦方法;
2本發(fā)明在利用張量補(bǔ)全進(jìn)行打分預(yù)測的過程中增加對產(chǎn)品潛在的結(jié)構(gòu)以及制造商和供應(yīng)商之間的供應(yīng)關(guān)系的考慮,可以較為明顯的提高打分預(yù)測的準(zhǔn)確度。從均方根誤差(RMSE)和平均誤差(MAE)兩個(gè)指標(biāo)上可以看出,本發(fā)明提供的模型較其他常見方法有較大提升。
3在汽車領(lǐng)域,我們可以根據(jù)車型-車系-制造商之間的樹形層次結(jié)構(gòu)以及制造商和供應(yīng)商之間的供應(yīng)關(guān)系,來幫助預(yù)測用戶關(guān)于某個(gè)車型的評分指標(biāo)的打分,即張量中的缺失值。
因?yàn)橥脩粼谫徺I汽車車型或者給汽車評分的時(shí)候,會考慮一個(gè)車型所屬的車系,廠商以及汽車零部件的供應(yīng)商。最終按照預(yù)測出來的用戶對于車型指標(biāo)的打分,將打分較高的車型推薦給用戶。
附圖說明
圖1為本發(fā)明提供的樹引導(dǎo)的多關(guān)系張量分解模型流程圖。
圖2(a)為張量X;
圖2(b)矩陣E;
圖2(c)結(jié)構(gòu)樹T;
圖3為汽車領(lǐng)域數(shù)據(jù)集上RMSE和MAE的實(shí)驗(yàn)對比結(jié)果。
圖4為探究汽車供應(yīng)鏈對于本方法在汽車領(lǐng)域的影響。
圖5為探究由汽車車型類別關(guān)系所組成結(jié)構(gòu)樹深度對于該方法的影響。
具體實(shí)施方式
下面結(jié)合附圖與實(shí)施例對本發(fā)明作進(jìn)一步說明。
本發(fā)明提供了一種基于矩陣和張量聯(lián)合分解的方法,并利用制造商和供應(yīng)商之間的供應(yīng)關(guān)系以及車型按照所屬的車系、制造商所形成的樹狀層次關(guān)系來進(jìn)行約束。如圖1所示,包括以下步驟:
Step1、構(gòu)造張量X,矩陣E和樹T,如圖2(a)-圖2(c)所示;
Step1.1、構(gòu)造張量X,張量的三個(gè)維度是用戶-車型-評分標(biāo)準(zhǔn)。張量X中的用戶必須是評論過至少一輛車的所有屬性,同樣的,其中的車型必須被至少一個(gè)用戶打過分。評分標(biāo)準(zhǔn)有8個(gè),分別為:空間、動力、舒適性、油耗、操控、外觀、內(nèi)飾和性價(jià)比。Xijk表示的是用戶i對車型j的評價(jià)指標(biāo)k打分,其打分區(qū)間為1到5.用戶對這些評分標(biāo)準(zhǔn)進(jìn)行1-5分的打分。張量X∈RI×J×K,I為用戶個(gè)數(shù),J為車型數(shù)量,k為評分標(biāo)準(zhǔn),即數(shù)量為8.
Step1.2、構(gòu)造矩陣E,矩陣E的兩個(gè)維度分別是制造商和供應(yīng)商。矩陣E∈RU×V,其中U表示制造商個(gè)數(shù),V表示供應(yīng)商個(gè)數(shù)。矩陣中的值Euv表示的是制造商u是否與供應(yīng)商v存在供應(yīng)關(guān)系。若Euv等于1,則表示制造商u和供應(yīng)商v之間存在供應(yīng)關(guān)系。相反,若等于0,則不存在供應(yīng)關(guān)系。
Step1.3、構(gòu)造結(jié)構(gòu)樹T,根據(jù)汽車領(lǐng)域中,車型-車系-制造商之間的從屬關(guān)系可以構(gòu)建出一棵樹。每一個(gè)葉子節(jié)點(diǎn)為每個(gè)車型,如2017款320Li M運(yùn)動型。中間節(jié)點(diǎn)為按照車型所屬的車系或制造商所構(gòu)成的集合,例如2017款320Li M運(yùn)動型屬于寶馬3系,寶馬3系是由寶馬公司制造。根節(jié)點(diǎn)為所有車型所組成的大集合。
另外,算法運(yùn)行前矩陣E和結(jié)構(gòu)樹T都是完整的,用來協(xié)助預(yù)測張量中缺失的具體值。
Step2、據(jù)樹T計(jì)算每個(gè)車型v的權(quán)重W(v)。
根據(jù)S1中產(chǎn)品所產(chǎn)生的結(jié)構(gòu)樹T,每個(gè)子節(jié)點(diǎn)只有一個(gè)父節(jié)點(diǎn),并且同一層節(jié)點(diǎn)沒有重疊,因?yàn)橐粋€(gè)車型有且只屬于一個(gè)車系,一個(gè)車系有且只屬于一個(gè)制造商。基于這種異構(gòu)信息我們引入tree-guided group lasso來對最終的損失函數(shù)進(jìn)行規(guī)約,其約束函數(shù)為:
這里的λW是代表函數(shù)Weight(B)的正則化參數(shù),Bk表示的是矩陣B的第k行,對應(yīng)著第k個(gè)車型,代表的是結(jié)構(gòu)樹第i層第j個(gè)集合,是對應(yīng)該集合的權(quán)重。
其中(a)代表的是樹的中間節(jié)點(diǎn)的權(quán)重值,(b)代表的是葉子節(jié)點(diǎn)的權(quán)重,gv是由節(jié)點(diǎn)包含車型的個(gè)數(shù)以及其所屬車系和制造商的rank值所決定,而sv=1-gv。在對應(yīng)矩陣B的若干行,這些行所對應(yīng)的車型屬于樹中的節(jié)點(diǎn)GV,|*|表示的是L1范數(shù),||*||表示的是歐幾里得范數(shù)。
Step3、整個(gè)模型的損失函數(shù)為:
f(A,B,C,M,S)=Tensor(A,B,C)+Enterp(M,S)+Weight(B)+Manu(M,B)
這里面涉及到的Tensor(A,B,C),Enterp(M,S),Manu(M,B),Weight(B)為:
其中所涉及到的A,B,C是張量X分解出來的因子矩陣,維度分別為I×R,J×R,K×R,其中R為張量的秩。M、S為矩陣E分解出來的因子矩陣,維度分別為U×R,V×R,Bk代表的矩陣B的第k行,Mj代表矩陣M的第j行。X(2)是張量X按照模2展開,λ是對應(yīng)不同函數(shù)的正則化參數(shù),⊙表示Khatri-Rao乘積。
Step4、用交替最小二乘法法(ALS)對損失函數(shù)進(jìn)行迭代
對矩陣E和張量X進(jìn)行聯(lián)合分解,并使得盡量相近,即Manu(M,B)。對張量X分解我們采用CP分解,對矩陣分解采用基本的矩陣分解。使Step3中的損失函數(shù)對矩陣A,B,C,M,S求偏導(dǎo),然后使偏導(dǎo)等于零??梢郧蟮镁仃嘇,B,C,M,S的迭代函數(shù):
C=(X(3)(B⊙A))(BTB*ATA+λTIR)-1
S=ETM(MTM+λEIR)-1
其中是X(n)代表張量X按照mode-n展開,IR代表的是R×R的單位矩陣。代表的是第一層的第j個(gè)節(jié)點(diǎn),即j個(gè)葉子節(jié)點(diǎn)。代表矩陣B中除k之外的其他行。
Step5、矩陣A,B,C經(jīng)過上述的迭代之后,可以通過來還原張量X,即補(bǔ)全之前的缺失值。根據(jù)一下的計(jì)算方法可以計(jì)算出此次迭代的RMSE和MAE,RMSE和MAE的數(shù)值越小說明預(yù)測結(jié)果越好,預(yù)測數(shù)值與實(shí)際數(shù)值相差越小。
這里的代表是對張量原先缺失值的預(yù)測結(jié)果,而yi是張量原先缺失值的真實(shí)結(jié)果。這里的n代表的是缺失值的總數(shù)。
Step6、判斷每次迭代之后求得的RMSE或迭代次數(shù)是否滿足設(shè)定的收斂條件,若滿足則循環(huán)結(jié)束,否則繼續(xù)迭代。
設(shè)置迭代次數(shù)為50次,并設(shè)置RMSE為0.7,當(dāng)?shù)螖?shù)超過50或者RMSE低于0.7的時(shí)候,則停止循環(huán)。
Step7、針對不同的用戶,我們按照預(yù)測出來的結(jié)果,按照打分的從高到低的次序依次讓用戶推薦車型。
如圖3-圖5所示,本發(fā)明提供的在汽車領(lǐng)域的推薦方法與現(xiàn)有技術(shù)中的各算法相比,均方根誤差(RMSE)和平均誤差(MAE)更小,預(yù)測的準(zhǔn)確度越高,較之現(xiàn)有技術(shù)都有較大的提升。
上述雖然結(jié)合附圖對本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以內(nèi)。