99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀基于用戶的協(xié)同過濾推薦算法原理和實(shí)現(xiàn)
基于用戶的協(xié)同過濾推薦算法原理和實(shí)現(xiàn)
2016-04-17
收藏

基于用戶的協(xié)同過濾推薦算法原理和實(shí)現(xiàn)

推薦系統(tǒng)眾多方法中,基于用戶的協(xié)同過濾推薦算法是最早誕生的,原理也較為簡(jiǎn)單。該算法1992年提出并用于郵件過濾系統(tǒng),兩年后1994年被 GroupLens 用于新聞過濾。一直到2000年,該算法都是推薦系統(tǒng)領(lǐng)域最著名的算法。

本文簡(jiǎn)單介紹基于用戶的協(xié)同過濾算法思想以及原理,最后基于該算法實(shí)現(xiàn)園友的推薦,即根據(jù)你關(guān)注的人,為你推薦博客園中其他你有可能感興趣的人。

基本思想

俗話說“物以類聚、人以群分”,拿看電影這個(gè)例子來說,如果你喜歡《蝙蝠俠》、《碟中諜》、《星際穿越》、《源代碼》等電影,另外有個(gè)人也都喜歡這些電影,而且他還喜歡《鋼鐵俠》,則很有可能你也喜歡《鋼鐵俠》這部電影。

所以說,當(dāng)一個(gè)用戶 A 需要個(gè)性化推薦時(shí),可以先找到和他興趣相似的用戶群體 G,然后把 G 喜歡的、并且 A 沒有聽說過的物品推薦給 A,這就是基于用戶的系統(tǒng)過濾算法。

原理

根據(jù)上述基本原理,我們可以將基于用戶的協(xié)同過濾推薦算法拆分為兩個(gè)步驟:

1. 找到與目標(biāo)用戶興趣相似的用戶集合

2. 找到這個(gè)集合中用戶喜歡的、并且目標(biāo)用戶沒有聽說過的物品推薦給目標(biāo)用戶

1. 發(fā)現(xiàn)興趣相似的用戶

通常用 Jaccard 公式或者余弦相似度計(jì)算兩個(gè)用戶之間的相似度。設(shè) N(u) 為用戶 u 喜歡的物品集合,N(v) 為用戶 v 喜歡的物品集合,那么 u 和 v 的相似度是多少呢:

Jaccard 公式:

1460625079-6120-201504

余弦相似度:

1460625091-2862-201504

假設(shè)目前共有4個(gè)用戶: A、B、C、D;共有5個(gè)物品:a、b、c、d、e。用戶與物品的關(guān)系(用戶喜歡物品)如下圖所示:

1460625081-5320-201504

如何一下子計(jì)算所有用戶之間的相似度呢?為計(jì)算方便,通常首先需要建立“物品—用戶”的倒排表,如下圖所示:

1460625094-6119-201504

然后對(duì)于每個(gè)物品,喜歡他的用戶,兩兩之間相同物品加1。例如喜歡物品 a 的用戶有 A 和 B,那么在矩陣中他們兩兩加1。如下圖所示:

1460625097-9528-201504

計(jì)算用戶兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以余弦相似度為例,對(duì)上圖進(jìn)行進(jìn)一步計(jì)算:

1460625086-2450-201504

到此,計(jì)算用戶相似度就大功告成,可以很直觀的找到與目標(biāo)用戶興趣較相似的用戶。

2. 推薦物品

首先需要從矩陣中找出與目標(biāo)用戶 u 最相似的 K 個(gè)用戶,用集合 S(u, K) 表示,將 S 中用戶喜歡的物品全部提取出來,并去除 u 已經(jīng)喜歡的物品。對(duì)于每個(gè)候選物品 i ,用戶 u 對(duì)它感興趣的程度用如下公式計(jì)算:

1460625104-8252-201504

其中 rvi 表示用戶 v 對(duì) i 的喜歡程度,在本例中都是為 1,在一些需要用戶給予評(píng)分的推薦系統(tǒng)中,則要代入用戶評(píng)分。

舉個(gè)例子,假設(shè)我們要給 A 推薦物品,選取 K = 3 個(gè)相似用戶,相似用戶則是:B、C、D,那么他們喜歡過并且 A 沒有喜歡過的物品有:c、e,那么分別計(jì)算 p(A, c) 和 p(A, e):

1460625089-1948-201504

1460625101-3171-201504

看樣子用戶 A 對(duì) c 和 e 的喜歡程度可能是一樣的,在真實(shí)的推薦系統(tǒng)中,只要按得分排序,取前幾個(gè)物品就可以了。

園友推薦

在社交網(wǎng)絡(luò)的推薦中,“物品”其實(shí)就是“人”,“喜歡一件物品”變?yōu)椤瓣P(guān)注的人”,這一節(jié)用上面的算法實(shí)現(xiàn)給我推薦 10 個(gè)園友。

1. 計(jì)算 10 名與我興趣最相似的園友

由于只是為我一個(gè)人做用戶推薦,所以沒必要建立一個(gè)龐大的用戶兩兩之間相似度的矩陣了,與我興趣相似的園友只會(huì)在這個(gè)群體產(chǎn)生:我關(guān)注的人的粉絲。除我自己之外,目前我一共關(guān)注了23名園友,這23名園友一共有22936個(gè)唯一粉絲,我對(duì)這22936個(gè)用戶逐一計(jì)算了相似度,相似度排名前10的用戶及相似度如下:

昵稱 關(guān)注數(shù)量 共同數(shù)量 相似度
藍(lán)楓葉1938 5 4 0.373001923296126
FBI080703 3 3 0.361157559257308
魚非魚 3 3 0.361157559257308
Lauce 3 3 0.361157559257308
藍(lán)色蝸牛 3 3 0.361157559257308
shanyujin 3 3 0.361157559257308
Mr.Huang 6 4 0.340502612303499
對(duì)世界說你好 6 4 0.340502612303499
strucoder 28 8 0.31524416249564
Mr.Vangogh 4 3 0.312771621085612

2. 計(jì)算對(duì)推薦園友的興趣度

這10名相似用戶一共推薦了25名園友,計(jì)算得到興趣度并排序:

排序 昵稱 興趣度
1 wolfy 0.373001923296126
2 Artech 0.340502612303499
3 Cat Chen 0.340502612303499
4 WXWinter(冬) 0.340502612303499
5 DanielWise 0.340502612303499
6 一路前行 0.31524416249564
7 Liam Wang 0.31524416249564
8 usharei 0.31524416249564
9 CoderZh 0.31524416249564
10 博客園團(tuán)隊(duì) 0.31524416249564
11 深藍(lán)色右手 0.31524416249564
12 Kinglee 0.31524416249564
13 Gnie 0.31524416249564
14 riccc 0.31524416249564
15 Braincol 0.31524416249564
16 滴答的雨 0.31524416249564
17 Dennis Gao 0.31524416249564
18 劉冬.NET 0.31524416249564
19 李永京 0.31524416249564
20 浪端之渡鳥 0.31524416249564
21 李濤 0.31524416249564
22 阿不 0.31524416249564
23 JK_Rush 0.31524416249564
24 xiaotie 0.31524416249564
25 Leepy 0.312771621085612

只需要按需要取相似度排名前10名就可以了,不過看起來整個(gè)列表的推薦質(zhì)量都還不錯(cuò)!

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }