自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

推薦算法集錦(補充)——近鄰選擇與算法拓展

原創(chuàng)
開發(fā) 項目管理 算法
在這篇文稿中,我將會對前面闡述的遺漏內容進行補充,并在之前的基礎上提高一個層次,來在推薦系統(tǒng)算法中更加深入一步。

推薦算法集錦(補充)——近鄰選擇與算法拓展

【51CTO.com原創(chuàng)稿件】

1.導讀

通過上面幾篇文稿可以詳細了解到推薦算法的種類和優(yōu)缺點,對于推薦算法這塊內容還有很多,之前的幾篇文稿在內容程度上多少有些許遺漏,以及之前闡述的算法內容深入程度上仍舊達不到一個專業(yè)推薦系統(tǒng)開發(fā)人員的水平。為此,在這篇文稿中,我將會對前面闡述的遺漏內容進行補充,并在之前的基礎上提高一個層次,來在推薦系統(tǒng)算法中更加深入一步。

2.協(xié)同過濾算法(CF)拓展

2.1 相似度度量延伸

在之前的協(xié)同過濾算法中,闡述了在近鄰推薦中運用到的相似度度量方法包括皮爾遜相關系數(shù)(Pearson Correlation)和改進余弦向量相似度(Adjuested Cosine)。皮爾遜相關系數(shù)在基于用戶近鄰推薦算法中常用的一種度量公式,它的推薦效果最佳。而改進余弦向量相似度是在基于物品近鄰推薦算法中最常用的一個相似度度量計算公式,效果最佳。除此之外,還有一些不太常用的兩種度量公式,因為它的推薦效果不是很好,因此在之前內容中就沒有進行介紹了,在實際應用中也不推薦使用。但是有必要去了解下。

(1)均方差(Mean Squared Difference),它是使用用戶u和用戶v之間對相同物品評分差的平方和均值的倒數(shù)來表示兩個人的相似度,然而有一個缺點就是不能表示負關聯(lián)的關系。

(2)斯皮爾曼等級關聯(lián)(Spearman Correlation),它是利用用戶對物品評分的排名來計算兩個用戶之間的相似度。但是缺點就是計算排名時,消耗就比較大了,而且對于用戶評分只有少量可選值的情況下,就會產生大量并列的排名,也就會造成推薦效果不佳。

2.2 兩種特殊情況?

第一種情況就是在基于近鄰推薦算法運用中,當兩個用戶對物品進行評分的時候,如果評分的商品比較少,并且對商品的評分的分數(shù)比較一致的情況下,我們自然就會認為這兩個用戶時比較相似的。在基于物品近鄰推薦算法中也是一樣的。但是其實在這個時候兩個用戶的愛好在事實上可能是完全不同的。因此為了解決這個問題,可以通過在相似度上添加一個重要性權重過著是進行一個相似度縮放的方式來對相似度進行轉換。這樣處理后的相似度才更能接近實際的用戶相似情況。下面,就這重要性權威和相似度縮放這兩個方式來進行延伸。

(1)重要性權重:對于兩個用戶或者物品之間的共同評分的物品和用戶數(shù)量小于給定閾值的時候,那就降低相似度重要性的權重。閾值的選定一般是通過交叉驗證的方法來進行的。實際場景中,一般當閾值大于或者等于25的時候,往往會收到比較好的預測效果。

(2)相似度縮放:給出一個收縮因子對用戶或者物品相似度進行收縮轉換時,當最后的共同評分數(shù)量遠遠大于收縮因子的時候,物品的相似度幾乎沒有變化;在實際場景中,當收縮因子為100的時候,得到的效果不錯。

下面就是通過重要性權重和相似度縮放兩種方式來計算的相似度公式:

另外一種情況就是當兩個用戶對物品給出一致的喜歡和不喜歡的評分的時候,可能會不如他們給出差異更大的評分的時候提供的信息量多而有用。這個時候可以通過使用反用戶頻率(Inverse User Frequence)來對相似度計算公式進行轉換,每個物品都會被賦以權重,權重的公式如下:

通過反用戶頻率對相似度計算公式進行轉換時,所用到的皮爾遜相關系數(shù)也就變成了頻率加權皮爾遜相關系數(shù)(Frequencey-Weighted Pearson Correlation),相應的公式如下:

頻率加權皮爾遜相關系數(shù) 2.3 近鄰的選擇問題?

之前的稿子中提到了協(xié)同過濾算法,它是通過選擇當前用戶的近鄰用戶群來完成對當前用戶的推薦??墒遣恢雷x者有沒有想過,近鄰的選擇是憑空隨便選的嗎?難道沒有近鄰選擇的方法嗎?答案是有的。不過在之前沒有進行深入,因為之前的相關知識點太多,很容易弄混淆。在這,就近鄰的選擇問題來闡述下:

在基于近鄰進行推薦的算法中,近鄰數(shù)量的選擇以及對于近鄰選擇的規(guī)則都會對推薦系統(tǒng)的最終效果產生重要影響。在實際運用場景中,一般在基于近鄰推薦算法中近鄰的選擇方式有以下方式:

(1)先過濾出預選近鄰,過濾的方法有Top-N過濾、閾值過濾和負數(shù)過濾。這幾個過濾通過名字基本就知道了過濾方法了。Top-N過濾無非就是選取排名靠前的N個物品或者用戶;閾值過濾無非就是設置個參數(shù),超過或者低于這個參數(shù)就會被過濾掉之類的;而負數(shù)過濾也就無非過濾掉負數(shù)這類的。

(2).在從預選的近鄰列表中獲取所設定的k個近鄰;如果所選取的k的數(shù)目過小的話,就會導致預測精度非常低。當隨著k的增大,預測精度就會有一定的提升,但是過猶不及,達到一定參數(shù)值的時候(一般在實際場景中是50),由于存在一些重要的關聯(lián)被不重要的關聯(lián)給削弱了,就會導致預測精度下降了,因此推薦k的選值為25至50之間。不過在實際運用場景中,最優(yōu)的k值還得通過訓練集和測試集來通過交叉驗證來獲取。k-近鄰(KNN)具體的選取步驟即對未知類別屬性的數(shù)據(jù)集的每個點依次執(zhí)行以下操作:

(1)先計算已知類別數(shù)據(jù)集中的每個點與當前點之間的距離,

(2)按取距離遞增次序排序;

(3)選取和當前點距離最近的k(預設定)個點;

(4)確定前k個點所在類別的出現(xiàn)頻率,按照出現(xiàn)頻率最高的k個點的類別來作為當前點的預測類別。

3. K-means算法

在協(xié)同過濾算法的SVD矩陣因子分解中,分解后的或者未分解的評分矩陣豐富度過高,也就是評分數(shù)量過多的話,會造成算法時間復雜度過高,對實時性造成嚴重影響。這時候就會采取之前所說的K-means算法,但是在之前的文稿中也只是隨便提及了而已,并沒有進行過多闡述。因此在這里對K-means算法進行介紹下。

K-mans算法的步驟和思想其實也比較容易理解,就是將數(shù)據(jù)集中的每一個點進行分類歸整。將相同屬性類別的點歸為一類。算法接收端輸入的是一個尚未標記的數(shù)據(jù)集,然后通過聚類算法對數(shù)據(jù)集的每個點分為不同的組,這也是一種無監(jiān)督的學習算法。具體步驟大致分為以下幾步:

(1)先隨機地選取k個點(k的值先預設出來,一般選取小值比較好),來作為聚類的中心點;

(2)計算每個點分別到選取好的k個聚類中心點的距離,通過每個點如其他中心點的距離來進行排序,將該點劃分給距離最近的那個聚類里面,依次分別劃分所有點的類別;

(3)再重新計算每個聚類的中心點;

(4)不斷重復以上2、3兩步,直到聚類的中心點的位置不發(fā)生改變或者已經(jīng)達到了之前預設的迭代次數(shù)為止。

4. SGD隨機梯度下降

4.1 SGD含義

在之前的文稿中也提到了SGD隨機梯度下降算法,這個算法一般用來不斷調整參數(shù)來減小函數(shù)或者結果的損失及誤差的。也就是給定一個損失函數(shù),然后通過梯度下降的算法來使這個損失函數(shù)最小化。所謂的梯度下降的理解就是,首先對于每個函數(shù)圖像曲面上都有各個方向上的導數(shù),也就是函數(shù)在各個方向上的斜率。而曲面上各個方向導數(shù)中,最大導數(shù)值的方向也就代表了梯度的方向。因此梯度下降就是沿著梯度的反方向來進行權重的更新,從而有效的找到了全局的最優(yōu)解。

4.2 小的理解案例?

這里提一個容易讓別人理解SGD隨機梯度下降的例子,就是將你放到一座山的任何一個地方,讓你通過某一方法最快到達山頂或者山底。其實這個方法就可以利用SGD隨機梯度下降方法。先找到各個方向的導數(shù),也就是斜率,然后找到斜率或者導數(shù)最大的那個方向也就是梯度,沿著梯度方向走一步然后再計算梯度方向,依次類推不斷行進。通過梯度下降方法可以讓自己每一步都是處于當前位置趨勢最大的方向,從而最快的下降到山底或者上升到山頂。通過這個原理也就可以以最快的速度來降低損失函數(shù)值或者誤差。

5.推薦系統(tǒng)擴展——攻擊

在實際應用中,因為推薦系統(tǒng)的建議或多或少會影響用戶的購買行為,因此在帶來經(jīng)濟效益的同時,不能假設所有參與評分建議的用戶都是誠實公平的。也就是說,林子大了,什么鳥類都有。在眾多提供推薦建議或者評分建議的用戶中??隙ㄊ谴嬖谝徊糠謵阂庥脩舻?,他們會影響到推薦系統(tǒng)的推薦效果,以至于讓推薦系統(tǒng)中的最終推薦列表經(jīng)常或者很少包含某類的商品,這種問題就叫推薦系統(tǒng)攻擊了。當然對于這種推薦攻擊情況,所有推薦系統(tǒng)都會遇到的,也有一些相應的解決辦法:

(1)盡可能的提高那些穩(wěn)定或者可信度高的用戶的評分權重,也就是一些長期購買的或者會員用戶等;

(2)過濾掉異常的數(shù)據(jù),比如前后評分差異懸殊的數(shù)據(jù),因為當有大量的異常數(shù)據(jù)存在時,才會對推薦結果造成不好的影響。

6.推薦系統(tǒng)的實現(xiàn)

6.1 推薦系統(tǒng)實現(xiàn)意義

對于任何一個推薦系統(tǒng)的開發(fā)人員來講,談再多理論知識只是一個基礎,關聯(lián)重點在于實際用代碼去實現(xiàn)一個推薦系統(tǒng)。畢竟理論來源于實踐,只有自己真正設計好一個推薦系統(tǒng)或者完成一個推薦功能后,才能夠真正把握之前的推薦系統(tǒng)理論知識。將理論知識進一步升華,過渡到實際運用中去,這也是任何一家公司對一個程序員基本的代碼能力要求。

對于完成設計一個推薦系統(tǒng)或者完成一個推薦功能模擬,有很多方法或者框架都可以用。運用框架可以有利于開發(fā)人員快速的去生成一個推薦功能模塊,在整體上更好地把握到自己設計的推薦系統(tǒng)功能。而且,在目前開發(fā)的行情來看,框架是絕大多數(shù)開發(fā)人員的必選條件之一。因為達到只有開發(fā)領域的技術專家程度,才能從真正意義上脫離框架,不過也;沒有必要脫離,因為運用框架也是“站在巨人的肩膀上”,前輩們的經(jīng)驗或者技巧完全可以去運用學習的。

6.2 框架分類

推薦系統(tǒng)所用到的框架中,比較通用的主要分為兩大類,一類是在學術界科研領域運用廣泛,另外一種就是在企業(yè)開發(fā)領域常用的了。學術界運用廣泛的主要有LibMF、SVDFeature等,企業(yè)開發(fā)一般會用到Mahout、SparmMLib、Waffles等。

而且在開發(fā)語言上的選取也有所不同,學術界一般更加重視理論性和發(fā)展性,采用的語言更加傾向于C、C++以及Python,而企業(yè)開發(fā)更加會重視語言的流行度后效率,因而更偏愛JAVA、scala或者Python。由此可見,Python語言在這一塊領域會更加吃香些。因此站在很多高校都新開了必修課就是Python語言的學習,企業(yè)也對會使用Python的學生和員工更加青睞。目前的發(fā)展勢頭很猛,有很多人都說有可能會追趕上開發(fā)語言流行度冠軍——JAVA,拿下榜首的位置,雖然現(xiàn)在還沒有實現(xiàn)。為此,在這一系列結束后,我會在后面開一個Python語言進階的系列,在掌握Python的基礎上,再去實現(xiàn)一個推薦系統(tǒng)會更加游刃有余。

7.總結

至此,推薦算法集錦這塊的理論知識系列已經(jīng)完全結束了,后面先通過Python技術的了解與掌握后,然后再對推薦系統(tǒng)或者推薦功能的設計來完成實戰(zhàn)性的模擬演練。這一系列的推薦算法內容比較繁多,廣大讀者只有在理解這些內容的基礎上,才能夠繼續(xù)對推薦這塊有一個更好的延伸拓展。而且對于推薦系統(tǒng)的設計,這條道路始終是沒有盡頭的,是需要精益求精的。為配合時代的發(fā)展,推薦系統(tǒng)也越來越傾向于結合火熱的人工智能領域來進一步加強推薦的效果及穩(wěn)定性,因此推薦系統(tǒng)邂逅深度學習勢不可擋,也是未來推薦系統(tǒng)能完成新的突破或蛻變的方向所在。希望在未來,深度學習技術真的能作為推薦系統(tǒng)的兩雙翅膀,來讓推薦系統(tǒng)繼續(xù)騰飛一次。因此,對于深度學習或者人工智能領域這塊的學習也是必不可少的,今后我也會就深度學習方面的知識來簡要概述下,來為讀者打下一個深度學習技術方面的基礎。

【51CTO原創(chuàng)稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2020-06-29 07:30:00

推薦算法推薦系統(tǒng)

2020-06-28 07:30:00

推薦算法推薦系統(tǒng)

2020-06-29 07:00:00

推薦算法推薦系統(tǒng)

2021-04-16 07:32:34

推薦算法機制

2016-09-30 15:03:13

推薦系統(tǒng)算法

2010-05-10 14:11:41

負載均衡算法

2021-06-09 16:00:05

近鄰算法數(shù)據(jù)

2017-07-11 09:46:29

2010-07-09 09:19:22

路由選擇協(xié)議

2013-06-09 13:13:35

算法程序

2024-08-28 08:43:58

2016-12-09 08:56:54

2016-11-22 08:50:23

2017-06-29 09:15:36

推薦算法策略

2024-01-04 17:00:59

2023-03-08 08:03:09

數(shù)據(jù)結構算法歸并排序

2010-06-23 14:55:04

eMule協(xié)議

2024-03-25 11:37:40

機器學習人工智能進化算法

2022-11-22 08:00:00

開源工具數(shù)據(jù)集

2010-01-14 11:28:54

JVM分代垃圾回收
點贊
收藏

51CTO技術棧公眾號