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

熱線電話:13121318867

登錄
首頁精彩閱讀5類系統(tǒng)推薦算法
5類系統(tǒng)推薦算法
2016-06-01
收藏
序言

最近因?yàn)镻AC平臺(tái)自動(dòng)化的需求,開始探坑推薦系統(tǒng)。這個(gè)乍一聽去樂趣無窮的課題,對(duì)于算法大神們來說是這樣的:
而對(duì)于剛接觸這個(gè)領(lǐng)域的我來說,是這樣的:
在深坑外圍徘徊了一周后,我整理了一些推薦系統(tǒng)的基本概念以及一些有代表性的簡(jiǎn)單的算法,作為初探總結(jié),也希望能拋磚引玉,給同樣想入坑的伙伴們提供一些思路。

什么是推薦系統(tǒng)

1. 什么是推薦系統(tǒng)?

推薦系統(tǒng)是啥?

如果你是個(gè)多年電商(剁手)黨,你會(huì)說是這個(gè):


如果你是名充滿文藝細(xì)胞的音樂發(fā)燒友,你會(huì)答這個(gè):


如果你是位活躍在各大社交平臺(tái)的點(diǎn)贊狂魔,你會(huì)答這個(gè):


沒錯(cuò),猜你喜歡、個(gè)性歌單、熱點(diǎn)微博,這些都是推薦系統(tǒng)的輸出內(nèi)容。從這些我們就可以總結(jié)出,推薦系統(tǒng)到底是做什么的。

目的1. 幫助用戶找到想要的商品(新聞/音樂/……),發(fā)掘長(zhǎng)尾

幫用戶找到想要的東西,談何容易。商品茫茫多,甚至是我們自己,也經(jīng)常點(diǎn)開淘寶,面對(duì)眼花繚亂的打折活動(dòng)不知道要買啥。在經(jīng)濟(jì)學(xué)中,有一個(gè)著名理論叫長(zhǎng)尾理論(The Long Tail)。

套用在互聯(lián)網(wǎng)領(lǐng)域中,指的就是最熱的那一小部分資源將得到絕大部分的關(guān)注,而剩下的很大一部分資源卻鮮少有人問津。這不僅造成了資源利用上的浪費(fèi),也讓很多口味偏小眾的用戶無法找到自己感興趣的內(nèi)容。

目的2. 降低信息過載

互聯(lián)網(wǎng)時(shí)代信息量已然處于爆炸狀態(tài),若是將所有內(nèi)容都放在網(wǎng)站首頁上用戶是無從閱讀的,信息的利用率將會(huì)十分低下。因此我們需要推薦系統(tǒng)來幫助用戶過濾掉低價(jià)值的信息。

目的3. 提高站點(diǎn)的點(diǎn)擊率/轉(zhuǎn)化率

好的推薦系統(tǒng)能讓用戶更頻繁地訪問一個(gè)站點(diǎn),并且總是能為用戶找到他想要購(gòu)買的商品或者閱讀的內(nèi)容。

目的4. 加深對(duì)用戶的了解,為用戶提供定制化服務(wù)

可以想見,每當(dāng)系統(tǒng)成功推薦了一個(gè)用戶感興趣的內(nèi)容后,我們對(duì)該用戶的興趣愛好等維度上的形象是越來越清晰的。當(dāng)我們能夠精確描繪出每個(gè)用戶的形象之后,就可以為他們定制一系列服務(wù),讓擁有各種需求的用戶都能在我們的平臺(tái)上得到滿足。

推薦算法

算法是什么?我們可以把它簡(jiǎn)化為一個(gè)函數(shù)。函數(shù)接受若干個(gè)參數(shù),輸出一個(gè)返回值。

算法如上圖,輸入?yún)?shù)是用戶和item的各種屬性和特征,包括年齡、性別、地域、商品的類別、發(fā)布時(shí)間等等。經(jīng)過推薦算法處理后,返回一個(gè)按照用戶喜好度排序的item列表。

推薦算法大致可以分為以下幾類[1]:

基于流行度的算法

協(xié)同過濾算法

基于內(nèi)容的算法

基于模型的算法

混合算法

2.1 基于流行度的算法

基于流行度的算法非常簡(jiǎn)單粗暴,類似于各大新聞、微博熱榜等,根據(jù)PV、UV、日均PV或分享率等數(shù)據(jù)來按某種熱度排序來推薦給用戶。

這種算法的優(yōu)點(diǎn)是簡(jiǎn)單,適用于剛注冊(cè)的新用戶。缺點(diǎn)也很明顯,它無法針對(duì)用戶提供個(gè)性化的推薦?;谶@種算法也可做一些優(yōu)化,比如加入用戶分群的流行度排序,例如把熱榜上的體育內(nèi)容優(yōu)先推薦給體育迷,把政要熱文推給熱愛談?wù)撜蔚挠脩簟?/span>

2.2 協(xié)同過濾算法

協(xié)同過濾算法(Collaborative Filtering, CF)是很常用的一種算法,在很多電商網(wǎng)站上都有用到。CF算法包括基于用戶的CF(User-based CF)和基于物品的CF(Item-based CF)。

基于用戶的CF原理如下:

分析各個(gè)用戶對(duì)item的評(píng)價(jià)(通過瀏覽記錄、購(gòu)買記錄等);

依據(jù)用戶對(duì)item的評(píng)價(jià)計(jì)算得出所有用戶之間的相似度;

選出與當(dāng)前用戶最相似的N個(gè)用戶;

將這N個(gè)用戶評(píng)價(jià)最高并且當(dāng)前用戶又沒有瀏覽過的item推薦給當(dāng)前用戶。

示意圖如下:

基于物品的CF原理大同小異,只是主體在于物品:

分析各個(gè)用戶對(duì)item的瀏覽記錄。

依據(jù)瀏覽記錄分析得出所有item之間的相似度;

對(duì)于當(dāng)前用戶評(píng)價(jià)高的item,找出與之相似度最高的N個(gè)item;

將這N個(gè)item推薦給用戶。

示意圖如下:

舉個(gè)栗子,基于用戶的CF算法大致的計(jì)算流程如下:

首先我們根據(jù)網(wǎng)站的記錄計(jì)算出一個(gè)用戶與item的關(guān)聯(lián)矩陣,如下:

圖中,行是不同的用戶,列是所有物品,(x, y)的值則是x用戶對(duì)y物品的評(píng)分(喜好程度)。我們可以把每一行視為一個(gè)用戶對(duì)物品偏好的向量,然后計(jì)算每?jī)蓚€(gè)用戶之間的向量距離,這里我們用余弦相似度來算:

然后得出用戶向量之間相似度如下,其中值越接近1表示這兩個(gè)用戶越相似:

最后,我們要為用戶1推薦物品,則找出與用戶1相似度最高的N名用戶(設(shè)N=2)評(píng)價(jià)的物品,去掉用戶1評(píng)價(jià)過的物品,則是推薦結(jié)果。

基于物品的CF計(jì)算方式大致相同,只是關(guān)聯(lián)矩陣變?yōu)榱薸tem和item之間的關(guān)系,若用戶同時(shí)瀏覽過item1和item2,則(1,1)的值為1,最后計(jì)算出所有item之間的關(guān)聯(lián)關(guān)系如下:

我們可以看到,CF算法確實(shí)簡(jiǎn)單,而且很多時(shí)候推薦也是很準(zhǔn)確的。然而它也存在一些問題:

依賴于準(zhǔn)確的用戶評(píng)分;

在計(jì)算的過程中,那些大熱的物品會(huì)有更大的幾率被推薦給用戶;

冷啟動(dòng)問題。當(dāng)有一名新用戶或者新物品進(jìn)入系統(tǒng)時(shí),推薦將無從依據(jù);

在一些item生存周期短(如新聞、廣告)的系統(tǒng)中,由于更新速度快,大量item不會(huì)有用戶評(píng)分,造成評(píng)分矩陣稀疏,不利于這些內(nèi)容的推薦。

對(duì)于矩陣稀疏的問題,有很多方法來改進(jìn)CF算法。比如通過矩陣因子分解(如LFM),我們可以把一個(gè)nm的矩陣分解為一個(gè)nk的矩陣乘以一個(gè)k*m的矩陣,如下圖:

這里的k可以是用戶的特征、興趣愛好與物品屬性的一些聯(lián)系,通過因子分解,可以找到用戶和物品之間的一些潛在關(guān)聯(lián),從而填補(bǔ)之前矩陣中的缺失值。

2.3 基于內(nèi)容的算法

CF算法看起來很好很強(qiáng)大,通過改進(jìn)也能克服各種缺點(diǎn)。那么問題來了,假如我是個(gè)《指環(huán)王》的忠實(shí)讀者,我買過一本《雙塔奇兵》,這時(shí)庫(kù)里新進(jìn)了第三部:《王者歸來》,那么顯然我會(huì)很感興趣。然而基于之前的算法,無論是用戶評(píng)分還是書名的檢索都不太好使,于是基于內(nèi)容的推薦算法呼之欲出。

舉個(gè)栗子,現(xiàn)在系統(tǒng)里有一個(gè)用戶和一條新聞。通過分析用戶的行為以及新聞的文本內(nèi)容,我們提取出數(shù)個(gè)關(guān)鍵字,如下圖:

將這些關(guān)鍵字作為屬性,把用戶和新聞分解成向量,如下圖:

之后再計(jì)算向量距離,便可以得出該用戶和新聞的相似度了。這種方法很簡(jiǎn)單,如果在為一名熱愛觀看英超聯(lián)賽的足球迷推薦新聞時(shí),新聞里同時(shí)存在關(guān)鍵字體育、足球、英超,顯然匹配前兩個(gè)詞都不如直接匹配英超來得準(zhǔn)確,系統(tǒng)該如何體現(xiàn)出關(guān)鍵詞的這種“重要性”呢?這時(shí)我們便可以引入詞權(quán)的概念。在大量的語料庫(kù)中通過計(jì)算(比如典型的TF-IDF算法),我們可以算出新聞中每一個(gè)關(guān)鍵詞的權(quán)重,在計(jì)算相似度時(shí)引入這個(gè)權(quán)重的影響,就可以達(dá)到更精確的效果。

sim(user, item) = 文本相似度(user, item) * 詞權(quán)

然而,經(jīng)常接觸體育新聞方面數(shù)據(jù)的同學(xué)就會(huì)要提出問題了:要是用戶的興趣是足球,而新聞的關(guān)鍵詞是德甲、英超,按照上面的文本匹配方法顯然無法將他們關(guān)聯(lián)到一起。在此,我們可以引用話題聚類:

利用word2vec一類工具,可以將文本的關(guān)鍵詞聚類,然后根據(jù)topic將文本向量化。如可以將德甲、英超、西甲聚類到“足球”的topic下,將lv、Gucci聚類到“奢侈品”topic下,再根據(jù)topic為文本內(nèi)容與用戶作相似度計(jì)算。

綜上,基于內(nèi)容的推薦算法能夠很好地解決冷啟動(dòng)問題,并且也不會(huì)囿于熱度的限制,因?yàn)樗侵苯踊趦?nèi)容匹配的,而與瀏覽記錄無關(guān)。然而它也會(huì)存在一些弊端,比如過度專業(yè)化(over-specialisation)的問題。這種方法會(huì)一直推薦給用戶內(nèi)容密切關(guān)聯(lián)的item,而失去了推薦內(nèi)容的多樣性。

2.4 基于模型的算法

基于模型的方法有很多,用到的諸如機(jī)器學(xué)習(xí)的方法也可以很深,這里只簡(jiǎn)單介紹下比較簡(jiǎn)單的方法——Logistics回歸預(yù)測(cè)。我們通過分析系統(tǒng)中用戶的行為和購(gòu)買記錄等數(shù)據(jù),得到如下表:

表中的行是一種物品,x1~xn是影響用戶行為的各種特征屬性,如用戶年齡段、性別、地域、物品的價(jià)格、類別等等,y則是用戶對(duì)于該物品的喜好程度,可以是購(gòu)買記錄、瀏覽、收藏等等。通過大量這類的數(shù)據(jù),我們可以回歸擬合出一個(gè)函數(shù),計(jì)算出x1~xn對(duì)應(yīng)的系數(shù),這即是各特征屬性對(duì)應(yīng)的權(quán)重,權(quán)重值越大則表明該屬性對(duì)于用戶選擇商品越重要。

在擬合函數(shù)的時(shí)候我們會(huì)想到,單一的某種屬性和另一種屬性可能并不存在強(qiáng)關(guān)聯(lián)。比如,年齡與購(gòu)買護(hù)膚品這個(gè)行為并不呈強(qiáng)關(guān)聯(lián),性別與購(gòu)買護(hù)膚品也不強(qiáng)關(guān)聯(lián),但當(dāng)我們把年齡與性別綜合在一起考慮時(shí),它們便和購(gòu)買行為產(chǎn)生了強(qiáng)關(guān)聯(lián)。比如(我只是比如),20~30歲的女性用戶更傾向于購(gòu)買護(hù)膚品,這就叫交叉屬性。通過反復(fù)測(cè)試和經(jīng)驗(yàn),我們可以調(diào)整特征屬性的組合,擬合出最準(zhǔn)確的回歸函數(shù)。最后得出的屬性權(quán)重如下:

基于模型的算法由于快速、準(zhǔn)確,適用于實(shí)時(shí)性比較高的業(yè)務(wù)如新聞、廣告等,而若是需要這種算法達(dá)到更好的效果,則需要人工干預(yù)反復(fù)的進(jìn)行屬性的組合和篩選,也就是常說的Feature Engineering。而由于新聞的時(shí)效性,系統(tǒng)也需要反復(fù)更新線上的數(shù)學(xué)模型,以適應(yīng)變化。

2.5 混合算法

現(xiàn)實(shí)應(yīng)用中,其實(shí)很少有直接用某種算法來做推薦的系統(tǒng)。在一些大的網(wǎng)站如Netflix,就是融合了數(shù)十種算法的推薦系統(tǒng)。我們可以通過給不同算法的結(jié)果加權(quán)重來綜合結(jié)果,或者是在不同的計(jì)算環(huán)節(jié)中運(yùn)用不同的算法來混合,達(dá)到更貼合自己業(yè)務(wù)的目的。

2.6 結(jié)果列表

在算法最后得出推薦結(jié)果之后,我們往往還需要對(duì)結(jié)果進(jìn)行處理。比如當(dāng)推薦的內(nèi)容里包含敏感詞匯、涉及用戶隱私的內(nèi)容等等,就需要系統(tǒng)將其篩除;若數(shù)次推薦后用戶依然對(duì)某個(gè)item毫無興趣,我們就需要將這個(gè)item降低權(quán)重,調(diào)整排序;另外,有時(shí)系統(tǒng)還要考慮話題多樣性的問題,同樣要在不同話題中篩選內(nèi)容。

推薦結(jié)果評(píng)估

當(dāng)推薦算法完成后,怎樣來評(píng)估這個(gè)算法的效果?CTR(點(diǎn)擊率)、CVR(轉(zhuǎn)化率)、停留時(shí)間等都是很直觀的數(shù)據(jù)。在完成算法后,可以通過線下計(jì)算算法的RMSE(均方根誤差)或者線上進(jìn)行ABTest來對(duì)比效果。

改進(jìn)策略

用戶畫像是最近經(jīng)常被提及的一個(gè)名詞,引入用戶畫像可以為推薦系統(tǒng)帶來很多改進(jìn)的余地,比如:

打通公司各大業(yè)務(wù)平臺(tái),通過獲取其他平臺(tái)的用戶數(shù)據(jù),徹底解決冷啟動(dòng)問題;

在不同設(shè)備上同步用戶數(shù)據(jù),包括QQID、設(shè)備號(hào)、手機(jī)號(hào)等;

豐富用戶的人口屬性,包括年齡、職業(yè)、地域等;

更完善的用戶興趣狀態(tài),方便生成用戶標(biāo)簽和匹配內(nèi)容。

另外,公司的優(yōu)勢(shì)——社交平臺(tái)也是一個(gè)很好利用的地方。利用用戶的社交網(wǎng)絡(luò),可以很方便地通過用戶的好友、興趣群的成員等更快捷地找到相似用戶以及用戶可能感興趣的內(nèi)容,提高推薦的準(zhǔn)確度。

總結(jié)

隨著大數(shù)據(jù)機(jī)器學(xué)習(xí)的火熱,推薦系統(tǒng)也將愈發(fā)成熟,需要學(xué)習(xí)的地方還有很多,坑還有很深,希望有志的同學(xué)共勉~

文 | FERD劉雨丹

來源 | 騰訊大數(shù)據(jù)

數(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); }