ML.NET 推荐引擎中一类矩阵因子分解的缺陷
ML.NET 作為 .NET 跨平臺(tái)的機(jī)器學(xué)習(xí)套件,在回歸、預(yù)測(cè)、分類甚至是圖像識(shí)別、異常檢測(cè)都展現(xiàn)出簡(jiǎn)潔快速的優(yōu)勢(shì),以往的文章已介紹過(guò)不再贅述。其實(shí)機(jī)器學(xué)習(xí)場(chǎng)景中還有一類非常常見(jiàn)的,就是推薦,特別是在線購(gòu)物、文娛產(chǎn)品為了提升用戶體驗(yàn),一個(gè)比較好的主意就是讓用戶優(yōu)先看到他需要的物品、內(nèi)容,甚至提供用戶意料之外又情理之中的產(chǎn)商品。推薦算法正好能夠通過(guò)數(shù)據(jù)實(shí)現(xiàn)這一目標(biāo)。
?
?
?
如上圖所示,如果我們有用戶、商品的購(gòu)買關(guān)系,并且還有用戶的評(píng)級(jí)、評(píng)分、評(píng)價(jià)內(nèi)容,那么矩陣因子分解算法非常適用。如果我們還能獲取到商品本身的一些屬性,比如名稱、分類、簡(jiǎn)介、價(jià)格的話,那么場(chǎng)感知分解機(jī)算法就能發(fā)揮特別好的作用。當(dāng)然,推薦算法比較難的就是冷啟動(dòng)階段,可能什么數(shù)據(jù)都沒(méi)有,初始階段沒(méi)有更多選擇,那么也只能從相似用戶消費(fèi)記錄入手做推薦了,獲取用戶與購(gòu)買商品編號(hào)的對(duì)應(yīng)關(guān)系也算是容易的,此時(shí)用得比較多的是一類矩陣因子分解算法。仍然舉一個(gè)例子,剛剛營(yíng)業(yè)的某書店,基于借閱書的記錄,我們給借了《三國(guó)志》的讀者小強(qiáng)推薦同樣借過(guò)這本書的小王借看的其他書,可能不一定是名著,不過(guò)沒(méi)關(guān)系,這足夠達(dá)到推薦的效果,因?yàn)樗惴ū澈蟮倪壿嬍窍嘈潘麄兛傆衅渌麜嵌枷矚g看的。
了解到前面的背景知識(shí)后,回頭我們?cè)倏纯?ML.NET 的推薦引擎,它同時(shí)支持矩陣因子分解和場(chǎng)感知分解算法,官網(wǎng)文檔在《教程:使用矩陣因子分解和 ML.NET 生成影片推薦系統(tǒng)》有過(guò)詳細(xì)的介紹。Sergey Tihon 在 ML.NET 的 Github 倉(cāng)庫(kù)中提過(guò)一個(gè) Issue,詳見(jiàn)《"Label" for One-Class Matrix Factorization #873》,其中談到了 ML.NET 推薦引擎中一類矩陣因子分解算法存在一處缺陷。具體來(lái)看 MatrixFactorizationTrainer 類的詳情,針對(duì)一類矩陣因子分解,在梯度下降時(shí)默認(rèn)觀測(cè)值都是表示正向的1,而平方誤差函數(shù)調(diào)用的是MatrixFactorization將按枚舉值傳遞給損失函數(shù)。參看《Matrix Factorization and Factorization Machines for Recommender Systems》,注意到以下這一頁(yè),預(yù)測(cè)標(biāo)簽始終為1。
?所以如果數(shù)據(jù)集沒(méi)有更多的特征可用,我們必須指定矩陣因子工廠并提供對(duì)應(yīng)的參數(shù)值1而不是按默認(rèn)的枚舉值生成 Trainer。修復(fù)后的示例參見(jiàn):《Fix Label column meaning in Recommendation sample》。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的ML.NET 推荐引擎中一类矩阵因子分解的缺陷的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Xamarin.Forms 5.0 来了
- 下一篇: 晋升新一线的合肥,跨平台的.NET氛围究