日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

apache mahout_使用Apache Mahout创建在线推荐系统

發(fā)布時間:2023/12/3 windows 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache mahout_使用Apache Mahout创建在线推荐系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

apache mahout

最近, 我們一直在為Yap.TV實施推薦系統(tǒng):您可以在安裝應用程序并轉到“ Just for you”標簽后才能看到它的運行情況。 我們以Apache Mahout為基礎進行建議。 Mahout是一個“可擴展的機器學習庫”,包含使用協(xié)作過濾算法的基于用戶和項目的推薦者的本地和分布式實現(xiàn)。

現(xiàn)在,我們將專注于本地單機實施。 如果您擁有多達數(shù)千萬的首選項值,它應該會很好地工作。 除此之外,您可能應該考慮基于Hadoop的實現(xiàn),因為數(shù)據(jù)根本無法放入內存中。

用Mahout編寫基本的推薦器非常簡單; 由于Mahout的可配置性很強,因此通常有不同的實現(xiàn)方式可供選擇。 我只是描述一下我認為是“好的起點”。

基本

首先,您需要一個包含輸入數(shù)據(jù)的文件。 格式非常簡單:以逗號分隔的(用戶ID,商品ID)對或(用戶ID,商品ID,偏好值)三倍。 這表示您已經知道:哪些用戶喜歡哪些項目,以及可選多少(例如1-5比例)。 id必須為整數(shù),首選項值被視為浮點型。

讓我們首先創(chuàng)建一個基于用戶的推薦器:這是一個推薦器,當被問及用戶A的推薦時,它首先查找與“ A”相似的用戶,然后嘗試查找這些相似用戶已評價過的最佳商品,但A還沒有。 為此,我們需要創(chuàng)建4個組件:

  • 數(shù)據(jù)模型 :這將使用文件
  • 用戶相似度 :給定兩個用戶的度量,將返回代表他們相似度的數(shù)字
  • 鄰域 :用于查找給定用戶的鄰域
  • 推薦者 :將這些片段組合在一起以產生推薦

對于一元輸入數(shù)據(jù)(用戶喜歡商品或我們不知道的商品),一個好的起點是:

val dataModel = new FileDataModel(file) val userSimilarity = new LogLikelihoodSimilarity(dataModel) val neighborhood = new NearestNUserNeighborhood(25, userSimilarity, dataModel) val recommender = new GenericBooleanPrefUserBasedRecommender(dataModel, neighborhood, userSimilarity)

如果我們有偏好值(輸入數(shù)據(jù)中的三倍):

val dataModel = new FileDataModel(file) val userSimilarity = new PearsonCorrelationSimilarity(dataModel) val neighborhood = new NearestNUserNeighborhood(25, userSimilarity, dataModel) val recommender = new GenericUserBasedRecommender(dataModel, neighborhood, userSimilarity)

現(xiàn)在我們準備得到一些建議; 這很簡單:

// Gets 10 recommendations val result = recommender.recommend(userId, 10)// We get back a list of item-estimated preference value, // sorted from the highest score result.foreach(r => println(r.getItemID() + ": " + r.getValue()))

線上

在線方面呢? 以上內容對現(xiàn)有用戶非常有用; 在服務中注冊的新用戶呢? 當然,我們也希望為他們提供一些合理的建議。 創(chuàng)建推薦器實例非常昂貴(肯定會比“正常”網絡請求花費更長的時間),因此我們不能每次都創(chuàng)建一個新的推薦器。

幸運的是Mahout可以將臨時用戶添加到數(shù)據(jù)模型中。 常規(guī)設置如下:

  • 使用當前數(shù)據(jù)定期重新創(chuàng)建整個推薦器(例如每天或每小時-取決于需要多長時間)
  • 進行推薦時,請檢查用戶是否存在于系統(tǒng)中
  • 如果是,請像往常一樣做建議
  • 如果不是,請創(chuàng)建一個臨時用戶,填寫首選項,然后進行建議

如果內存有限,第一部分(定期重新創(chuàng)建推薦器)實際上可能非常棘手:創(chuàng)建新推薦器時,您需要在內存中保存兩個數(shù)據(jù)副本(以便仍然能夠處理來自服務器的請求老)。 但這實際上與建議沒有任何關系,因此在這里我將不做詳細介紹。

對于臨時用戶,我們可以使用PlusAnonymousConcurrentUserDataModel實例包裝數(shù)據(jù)模型。 此類允許獲取臨時用戶ID。 該ID必須稍后發(fā)布,以便可以重復使用(此類ID數(shù)量有限)。 獲取ID后,我們必須填寫首選項,然后我們可以像往常一樣繼續(xù)進行推薦:

val dataModel = new PlusAnonymousConcurrentUserDataModel(new FileDataModel(file),100)val recommender: org.apache.mahout.cf.taste.recommender.Recommender = ...// we are assuming a unary model: we only know which items a user likes def recommendFor(userId: Long, userPreferences: List[Long]) = {if (userExistsInDataModel(userId)) {recommendForExistingUser(userId)} else {recommendForNewUser(userPreferences)} }def recommendForNewUser(userPreferences: List[Long]) = {val tempUserId = dataModel.takeAvailableUser()try {// filling in a Mahout data structure with the user's preferencesval tempPrefs = new BooleanUserPreferenceArray(userPreferences.size)tempPrefs.setUserID(0, tempUserId)userPreferences.zipWithIndex.foreach { case (preference, idx) => tempPrefs.setItemID(idx, preference) }dataModel.setTempPrefs(tempPrefs, tempUserId)recommendForExistingUser(tempUserId)} finally {dataModel.releaseUser(tempUserId)} }def recommendForExistingUser(userId: Long) = {recommender.recommend(userId, 10) }

整合業(yè)務邏輯

由于某些業(yè)務規(guī)則,我們常常想提高所選項目的得分。 在我們的用例中,例如,如果某個節(jié)目有新劇集,我們希望給它更高的分數(shù)。 使用Mahout的IDRescorer接口可以實現(xiàn)。 調用Recommender.recommend時,提供了一個rescorer實例。 例如:

val rescorer = new IDRescorer {def rescore(id: Long, originalScore: Double) = {if (showIsNew(id)) {originalScore * 1.2 } else {originalScore}}def isFiltered(id: Long) = false }// Gets 10 recommendations val result = recommender.recommend(userId, 10, rescorer)

摘要

Mahout是創(chuàng)建推薦器的重要基礎。 它是非常可配置的,并提供許多擴展點。 選擇正確的配置參數(shù)值,設置評分和評估推薦結果還有很多工作要做,但是算法是可靠的,因此無需擔心。

還有一本非常好的書《 Mahout in Action》 ,其中涵蓋了推薦系統(tǒng)和Mahout的其他組件。 它基于版本0.5(當前版本為0.8),但是代碼示例大部分有效,并且項目的主要邏輯是相同的。

參考:在Adam Warski博客的Blog中 ,我們的JCG合作伙伴 Adam Warski 使用Apache Mahout創(chuàng)建了一個在線推薦系統(tǒng) 。

翻譯自: https://www.javacodegeeks.com/2013/10/creating-an-on-line-recommender-system-with-apache-mahout.html

apache mahout

總結

以上是生活随笔為你收集整理的apache mahout_使用Apache Mahout创建在线推荐系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 毛片在哪里看 | 久久精品电影网 | 人妻妺妺窝人体色www聚色窝 | 国产成人午夜精品无码区久久 | 国产精品久久久久影院色老大 | 久久av免费 | 黄色激情毛片 | 黄色大毛片| 让男按摩师摸好爽视频 | 成人免费一区 | 国产人澡人澡澡澡人碰视频 | 少妇在军营h文高辣 | 国产午夜激情 | 性久久久久久久久久久 | 午夜影视福利 | 农村少妇 | 天天干天天操天天干 | 自拍偷拍色综合 | 欧美精品第二页 | 午夜精品久久久 | 国产va视频 | 青青99 | 在线播放不卡 | 亚洲专区av | 秋霞在线一区 | 在线精品视频播放 | 日产电影一区二区三区 | av免费看网站 | 久久性爱视频网站 | 四虎网站在线观看 | 四虎国产在线观看 | 日韩精品三区 | 国产精品久久久久久久久久久不卡 | 一区二区美女 | 91麻豆精品秘密入口 | 日韩中文字幕免费 | 亚洲五月花 | 日韩一区免费视频 | 国产123区 | 国产精品欧美久久久久久 | 在线成人亚洲 | 日本不卡一区二区 | 美女少妇一区二区 | 亚洲乱码国产乱码精品精 | 亚洲免费观看高清在线观看 | 豆豆色成人网 | 精品黄色| 明日花绮罗高潮无打码 | 北条麻妃久久精品 | 中文字幕人成 | 国产精品嫩草影院av蜜臀 | www.亚洲一区二区三区 | 天堂中文8 | 国产精选视频在线观看 | 天天干夜夜嗨 | 校园春色中文字幕 | 中文字幕在线有码 | 一区二区三区影院 | 午夜精品视频 | 国产亚洲视频在线 | 我要看一级片 | 91在线精品一区二区三区 | 69视频在线播放 | 天天干,天天干 | 精品国产av 无码一区二区三区 | 久久久视频在线 | 欧美一区二区久久久 | 美人被强行糟蹋np各种play | 玩偶姐姐在线观看免费 | 我的丝袜美腿尤物麻麻 | 国产高清视频免费 | 亚洲视频免费 | 中文字幕一区不卡 | 操人视频免费看 | 亚洲色成人www永久网站 | 中文字幕有码在线视频 | 欧美资源网| 亚洲a精品| 人人爽人人爽人人 | 视频免费在线观看 | 麻豆视频二区 | 丰满饥渴老女人hd | 国产精品一区二区小说 | 久久久久久人妻一区二区三区 | 国产精品成人一区二区 | 天堂中文在线观看视频 | 伊人成年网| 911精品 | 久久婷婷综合国产 | 亚洲黄色免费在线观看 | 久久人人爽人人爽人人片亚洲 | 成人久久毛片 | a v视频在线播放 | 精品视频一区二区三区四区 | 污污免费在线观看 | 风间由美在线视频 | 毛片在线播放视频 | 国产香蕉网 | 五月激情五月婷婷 |