基于MLlib的机器学习--协同过滤与推荐
生活随笔
收集整理的這篇文章主要介紹了
基于MLlib的机器学习--协同过滤与推荐
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
《Spark快速大數(shù)據(jù)分析》 11.5.4?協(xié)同過濾與推薦 協(xié)同過濾是一種根據(jù)用戶對各種產(chǎn)品的交互與評分來推薦新產(chǎn)品的推薦系統(tǒng)技術(shù)。 協(xié)同過濾引入的地方就在于它只需要輸入一系列用戶/產(chǎn)品的交互記錄; 無論是顯式的交互(例如在購物網(wǎng)站上進(jìn)行評分)還是隱式的(例如用戶訪問了一個 產(chǎn)品的頁面但是沒有對產(chǎn)品評分)交互皆可。僅僅根據(jù)這些交互,協(xié)同過濾算法就能 夠知道哪些產(chǎn)品之間比較相似(因為相同的用戶與它們發(fā)生了交互)以及哪些用戶之間 比較相似,然后就可以做出新的推薦。 盡管MLlib的API使用了用戶和產(chǎn)品概念,但是也可以將協(xié)同過濾用于其他應(yīng)用場景中, 比如在社交網(wǎng)絡(luò)中推薦用戶,為文章推薦要添加的標(biāo)簽,為電臺推薦歌曲等。 交替最小二乘法 MLlib中包含交替最小二乘法(ALS)的一個實現(xiàn),這是一個協(xié)同過濾的常用算法,可以很好的 擴展到集群上。它位于mllib.recommendation.ALS類中。 ALS會為每個用戶和產(chǎn)品都設(shè)一個特征向量,這樣用戶向量與產(chǎn)品向量的點積就接近于它們的 得分。它接收下面所列幾個參數(shù): rank 使用的特征向量的大小,更大的特征向量會產(chǎn)生更好的模型,但是也需要話費更大的計算代價,默認(rèn)10 iterations 要執(zhí)行的迭代次數(shù),默認(rèn)10 lamda 正則化參數(shù),默認(rèn)0.01 alpha 用來在ALS中計算置信度的常量,默認(rèn)1.0 numUserBlocks, ?numProductBlocks 切分用戶和產(chǎn)品數(shù)據(jù)的塊的數(shù)目,用來控制并行度,可以選擇傳遞-1來上MLlib自動決定. 要使用ALS算法,需要有一個由mllib.recommendation.Rating對象組成的RDD,其中每個包含 一個用戶id,一個產(chǎn)品id和一個評分。實現(xiàn)過程中的一個挑戰(zhàn)是每個id都需要是一個32位的整數(shù)值。 如果id是字符串或者更大的數(shù)字,那么可以直接在ALS中使用id的哈希值, 即使有兩個用戶或者產(chǎn)品映射到同一個Id上,總體結(jié)果依然會不錯。還有一種辦法是broadcast()一張 從產(chǎn)品id到正興致的表,來付給每個產(chǎn)品獨特的id。 ALS返回一個MatrixFactorizationModel對象來表示結(jié)果,可以調(diào)用predict()來對一個由(UserId,productId)對 組成的RDD進(jìn)行預(yù)測評分。也可以對使用model.recommendProducts(userId,numProducts)來為一個 給定用戶找到最值得推薦的前numProduct個產(chǎn)品。注意,和MLlib中的其他模型不同,MatrixFactorizationModel 對象很大,為每個用戶和產(chǎn)品都存儲了一個向量。這樣我們就不能把它存儲到磁盤上,然后在另一個程序中 讀取回來。不過,可以把模型中生成的特征向量RDD,也就是model.userFeatures和 model.productFeatures保存到分布式文件系統(tǒng)上。 最后,ALS有兩個變種:顯示評分(默認(rèn)情況)和隱式反饋(通過調(diào)用ALS.trainImplicit()而非ALS.train()來打開)。 用于顯式評分時,每個用戶對于一個產(chǎn)品的評分需要是一個得分(例如1到5星),而預(yù)測出來的評分也是得分。 而用于隱式反饋時,每個評分代表的是用戶會和給定產(chǎn)品發(fā)送交互的置信度(比如隨著用戶訪問一個網(wǎng)頁次數(shù) 的增加,平跟也會提高),預(yù)測出來的也是置信度。
轉(zhuǎn)載于:https://www.cnblogs.com/ihongyan/p/5017965.html
總結(jié)
以上是生活随笔為你收集整理的基于MLlib的机器学习--协同过滤与推荐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机房承重载荷,机房承重标准及承重计算
- 下一篇: mysql 授予用户权限_mysql授权