05機(jī)器學(xué)習(xí)協(xié)同過(guò)濾推薦算法與應(yīng)用_第1頁(yè)
05機(jī)器學(xué)習(xí)協(xié)同過(guò)濾推薦算法與應(yīng)用_第2頁(yè)
05機(jī)器學(xué)習(xí)協(xié)同過(guò)濾推薦算法與應(yīng)用_第3頁(yè)
05機(jī)器學(xué)習(xí)協(xié)同過(guò)濾推薦算法與應(yīng)用_第4頁(yè)
05機(jī)器學(xué)習(xí)協(xié)同過(guò)濾推薦算法與應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1. CF 協(xié)同過(guò)濾推薦算法原理1.1 概述什么是協(xié)同過(guò)濾 (Collaborative Filtering, 簡(jiǎn)稱 CF)?首先想一個(gè)簡(jiǎn)單的問(wèn)題,如果你現(xiàn)在想看個(gè),但你不知道具體看哪部,你會(huì)怎么做?大部分的人會(huì)問(wèn)問(wèn)周?chē)呐笥?,看看最近有什么好看的味比較類似的朋友那里得到推薦。這就是協(xié)同過(guò)濾的推薦,而我們一般更傾向于從口思想。協(xié)同過(guò)濾算法又分為基于用戶的協(xié)同過(guò)濾算法和基于物品的協(xié)同過(guò)濾算法1.2 案例需求如下數(shù)據(jù)是各用戶對(duì)各文檔的偏好:現(xiàn)在需要基于上述數(shù)據(jù),給 A 用戶推薦一篇文檔用戶/文檔文檔 A文檔 B文檔 C文檔 D用戶 A推薦?推薦?用戶 B用戶 C用戶 D1.3 算法分析1.3.1

2、基于用戶相似度的分析直覺(jué)分析:“用戶 A/B”都喜歡物品 A 和物品 B,從而“用戶 A/B”的口味最為相近因此,為“用戶 A”推薦物品時(shí)可參考“用戶 B”的偏好,從而推薦 D這種就是基于用戶的協(xié)同過(guò)濾算法 UserCF 指導(dǎo)思想1.3.2 基于物品相似度的分析直覺(jué)分析:物品組合(A,D)被同時(shí)偏好出現(xiàn)的次數(shù)最多,因而可以認(rèn)為 A/D 兩件物品的相似度最高,從而,可以為選擇了 A 物品的用戶推薦 D 物品這種就是基于物品的協(xié)同過(guò)濾算法 ItemCF 指導(dǎo)思想1.4 算法要點(diǎn)1.4.1、指導(dǎo)思想這種過(guò)濾算法的有效性基礎(chǔ)在于:1、用戶偏好具有相似性,即用戶可分類。這種分類的特征越明顯,推薦準(zhǔn)確率越

3、高2、物品之間具有相似性,即偏好某物品的人,都很可能也同時(shí)偏好另一件相似物品1.4.2、兩種 CF 算法適用的場(chǎng)景什么情況下使用哪種算法推薦效果會(huì)更好?不同環(huán)境下這兩種理論的有效性也不同,應(yīng)用時(shí)需做相應(yīng)調(diào)整。a.如豆瓣上的文藝,用戶對(duì)其的偏好程度與用戶自身的品位關(guān)聯(lián)性較強(qiáng);適合 UserCFb.而對(duì)于電子商務(wù)來(lái)說(shuō),商品之間的內(nèi)在對(duì)用戶的行為影響更為顯著。1.5 算法實(shí)現(xiàn)總的來(lái)說(shuō),要實(shí)現(xiàn)協(xié)同過(guò)濾,需要一下幾個(gè)步驟:1收集用戶偏好2找到相似的用戶或物品3計(jì)算推薦1.5.1 收集用戶偏好用戶有很多方式向系統(tǒng)提供行介紹:的偏好信息,而且不同的應(yīng)用也可能大不相同,下面舉例進(jìn)1.5.2 原始偏好數(shù)據(jù)的預(yù)處

4、理v 用戶行為識(shí)別/組合在一般應(yīng)用中,我們提取的用戶行為一般都多于一種,關(guān)于如何組合這些不同的用戶行為,比如,可以將用戶行為分為“查看”和“戶 / 物品相似度。”等等,然后基于不同的行為,計(jì)算不同的用類似于當(dāng)當(dāng)網(wǎng)或者京東給出的“看了 .”了該的人還了 .”,“查看了的人還查v 喜好程度根據(jù)不為反映用戶喜好的程度將它們進(jìn)行,得到用戶對(duì)于物品的總體喜好。一般來(lái)說(shuō),顯式的用戶反饋比隱式的,但比較稀疏,畢竟進(jìn)行顯示反饋的用戶是少數(shù);同時(shí)相對(duì)于“查看”,“”行為反映用戶喜好的程度更大,但這也因應(yīng)用而異。v 數(shù)據(jù)減噪和歸一化。用戶行為類型特征作用評(píng)分顯式整數(shù)量化值0,n可以得到精確偏好投票顯式量化值 0|

5、1可以得到精確偏好轉(zhuǎn)發(fā)顯式量化值 0|1可以得到精確偏好保存書(shū)簽顯式量化值 0|1可以得到精確偏好標(biāo)記書(shū)簽 Tag顯式一些單詞需要進(jìn)一步分析得到偏好評(píng)論顯式一些文字需要進(jìn)一步分析得到偏好點(diǎn)擊流隱式一組點(diǎn)擊需要進(jìn)一步分析得到偏好頁(yè)面停留時(shí)間隱式一組時(shí)間信息噪音偏大,不好利用隱式量化值 0|1可以得到精確偏好減噪:用戶行為數(shù)據(jù)是用戶在使用應(yīng)用過(guò)程中產(chǎn)生的,它可能存在大量的噪音和用戶的誤操作,我們可以通過(guò)經(jīng)典的數(shù)據(jù)挖掘算法過(guò)濾掉行為數(shù)據(jù)中的噪音,這樣可以是我們的分析更加精確。歸一化:如前面講到的,在計(jì)算用戶對(duì)物品的喜好程度時(shí),可能需要對(duì)不同的行為數(shù)據(jù)進(jìn)行。但可以想象,不為的數(shù)據(jù)取值可能相差很大,比如

6、,用戶的查看數(shù)據(jù)必然比數(shù)據(jù)大的多,如何將各個(gè)行為的數(shù)據(jù)統(tǒng)一在一個(gè)相同的取值范圍中,從而使得求和得到的總體喜好更加精確,就需要我們進(jìn)行歸一化處理。最簡(jiǎn)單的歸一化處理,就是將各類數(shù)據(jù)除以此類中的最大值,以保證歸一化后的數(shù)據(jù)取值在 0,1 范圍中。v 形成用戶偏好矩陣一般是二維矩陣,一維是用戶列表,另一維是物品列表,值是用戶對(duì)物品的偏好,一般是 0,1或者 -1, 1 的浮點(diǎn)數(shù)值。1.5.3 找到相似用戶或物品當(dāng)已經(jīng)對(duì)用戶行為進(jìn)行分析得到用戶喜好后,我們可以根據(jù)用戶喜好計(jì)算相似用戶和物品, 然后基于相似用戶或者物品進(jìn)行推薦,這就是最典型的 CF 的兩個(gè)分支:基于用戶的 CF 和基于物品的 CF。這兩

7、種方法都需要計(jì)算相似度,下面我們先看看最基本的幾種計(jì)算相似度的方法。1.5.4 相似度的計(jì)算相似度的計(jì)算,現(xiàn)有的幾種基本方法都是基于向量(Vector)的,其實(shí)也就是計(jì)算兩個(gè)向量的距離,距離越近相似度越大。在推薦的場(chǎng)景中,在用戶 - 物品偏好的二維矩陣中,我們可以將一個(gè)用戶對(duì)所有物品的偏好作為一個(gè)向量來(lái)計(jì)算用戶之間的相似度,或者將所有用戶對(duì)某個(gè)物品的偏好作為一個(gè)向量來(lái)計(jì)算物品之間的相似度。CF 的常用方法有三種,分別是歐式距離法、相關(guān)系數(shù)法、余弦相似度法。為了測(cè)試算法,給出以下簡(jiǎn)單的用好偏好數(shù)據(jù)矩陣:行表示三名用戶,列表示三個(gè)品牌,對(duì)品牌的喜愛(ài)度按照 15 增加。(1)距離法就是計(jì)算每?jī)蓚€(gè)點(diǎn)的

8、距離,比如 Nike 和 Sony 的相似度 。數(shù)值越小,表示相似度越高。(2)相關(guān)系數(shù)兩個(gè)變量之間的相關(guān)系數(shù)越高,從一個(gè)變量去另一個(gè)變量的精確度就越高,這是因?yàn)橄嚓P(guān)系數(shù)越高,就意味著這兩個(gè)變量的共變部分越多,所以從其中一個(gè)變量的變化就可越多地獲知另一個(gè)變量的變化。如果兩個(gè)變量之間的相關(guān)系數(shù)為 1 或-1,那么你完全可由變量 X 去獲知變量 Y 的值。當(dāng)相關(guān)系數(shù)為 0 時(shí),X 和 Y 兩變量無(wú)關(guān)系。當(dāng)X 的值增大,Y 也增大,正相關(guān)關(guān)系,相關(guān)系數(shù)在 0.00 與 1.00 之間當(dāng)X 的值減小,Y 也減小,正相關(guān)關(guān)系,相關(guān)系數(shù)在 0.00 與 1.00 之間當(dāng)X 的值增大,Y 減小,負(fù)相關(guān)關(guān)系,

9、相關(guān)系數(shù)在-1.00 與 0.00 之間當(dāng) X 的值減小,Y 增大,負(fù)相關(guān)關(guān)系,相關(guān)系數(shù)在-1.00 與 0.00 之間相關(guān)系數(shù)的絕對(duì)值越大,相關(guān)性越強(qiáng),相關(guān)系數(shù)越接近于 1 和-1,相關(guān)度越強(qiáng),相關(guān)系數(shù)越接近于 0,相關(guān)度越弱。def OsDistance(vector1, vector2): sqDiffVector = vector1-vector2 sqDiffVector=sqDiffVector*2 sqDistances = sqDiffVector.sum() distance = sqDistances*0.5return distance用戶蘋(píng)果小米魅族zhangsan55

10、2Lisi354wangwu125在 python 中用函數(shù) corrcoef 實(shí)現(xiàn),具體方法見(jiàn)參考資料(3)余弦相似度通過(guò)測(cè)量?jī)蓚€(gè)向量?jī)?nèi)積空間的夾角的余弦值來(lái)度量它們之間的相似性。0 度角的余弦值是 1, 而其他任何角度的余弦值都不大于 1;并且其最小值是-1。從而兩個(gè)向量之間的角度的余弦值確定兩個(gè)向量是否大致指向相同的方向。兩個(gè)向量有相同的指向時(shí),余弦相似度的值為 1;兩個(gè)向量夾角為 90時(shí),余弦相似度的值為 0;兩個(gè)向量指向完全相反的方向時(shí),余弦相似度的值為-1。在比較過(guò)程中,向量的規(guī)模大小不予考慮,僅僅考慮到向量的指向方向。余弦相似度通常用于兩個(gè)向量的夾角小于 90之內(nèi),因此余弦相似度

11、的值為 0 到 1 之間。注:本課程的實(shí)戰(zhàn)案例基于相關(guān)系數(shù)法實(shí)現(xiàn)1.5.3 計(jì)算推薦UserCF 基于用戶相似度的推薦計(jì)算推薦的過(guò)程其實(shí)就是 KNN 算法的計(jì)算過(guò)程ItemCF 基于物品相似度的推薦算法思路1. 構(gòu)建物品的同現(xiàn)矩陣2. 構(gòu)建用戶對(duì)物品的評(píng)分矩陣3. 通過(guò)矩陣計(jì)算得出推薦結(jié)果def cosSim(inA,inB):num = float(inA.T*inB)denom = la.norm(inA)*la.norm(inB) return 0.5+0.5*(num/denom)推薦結(jié)果=用戶評(píng)分矩陣*同現(xiàn)矩陣實(shí)質(zhì):計(jì)算各種物品組合的出現(xiàn)次數(shù)2. CF 協(xié)同過(guò)濾算法 Python 實(shí)

12、戰(zhàn)2.1推薦需求根據(jù)一個(gè)用戶對(duì)評(píng)分的數(shù)據(jù)集來(lái)實(shí)現(xiàn)基于用戶相似度的協(xié)同過(guò)濾算法推薦,相似度的算法采用相關(guān)系數(shù)法數(shù)據(jù)樣例如下:用戶 ID:ID:評(píng)分:時(shí)間1:1193:5:9783007601:661:3:9783021091:914:3:9783019681:3408:4:9783002751:2355:5:9788242911:1197:3:9783022681:1287:5:9783020391:2804:5:9783007191:594:4:9783022681:919:4:9783013682.2 算法實(shí)現(xiàn)本案例使用的數(shù)據(jù)分析包為 pandas,Numpy 和matplotlib2.2.

13、1 數(shù)據(jù)規(guī)整首先將評(píng)分?jǐn)?shù)據(jù)從 ratings.dat 中讀出到一個(gè) DataFrame里:ratings 表中對(duì)我們有用的僅是 user_id、movie_id 和 rating 這三列,因此出,放到一個(gè)以 user 為行,movie 為列,rating 為值的表 data 里面。這三列取可以看到這個(gè)表相當(dāng)?shù)孟∈瑁畛渎蚀蠹s只有 5%,接下來(lái)要實(shí)現(xiàn)推薦的第一步是計(jì)算 user data = ratings.pivot(index=user_id,columns=movie_id,values=rating)#形成一個(gè)表 data:5 import pandas as pd from panda

14、s import Series,DataFrame rnames = user_id,movie_id,rating,timestamp ratings = pd.read_table(rratings.dat,sep=:,header=None,names=rnames) ratings:3user_idmovie_idratingtimestamp01119359783007601166139783021092191439783019683 rows x 4 columns之間的相關(guān)系數(shù)2.2.2 相關(guān)度測(cè)算DataFrame 對(duì)象有一個(gè)很親切的方法:.corr(method=pearso

15、n, min_periods=1) 方法,可以對(duì)所有列互相計(jì)算相關(guān)系數(shù)。其中:method 默認(rèn)為相關(guān)系數(shù),min_periods 參數(shù),這個(gè)參數(shù)的作用是設(shè)定計(jì)算相關(guān)系數(shù)時(shí)的最小樣本量,低于此值的一對(duì)列將不進(jìn)行運(yùn)算。這個(gè)值的取舍關(guān)系到相關(guān)系數(shù)計(jì)算的準(zhǔn)確性,因此有必要先來(lái)確定 一下這個(gè)參數(shù)。min_periods 參數(shù)測(cè)定2.2.3測(cè)定這樣一個(gè)參數(shù)的基本方法:v 統(tǒng)計(jì)在 min_periods 取不同值時(shí),相關(guān)系數(shù)的標(biāo)準(zhǔn)差大小,越小越好;但同時(shí)又要考慮到,我們的樣本空間十分稀疏,min_periods 定得太高會(huì)導(dǎo)致出來(lái)的結(jié)果集太小,所以只能選定一個(gè)折中的值。這里我們測(cè)定評(píng)分系統(tǒng)標(biāo)準(zhǔn)差的方法為:

16、v 在 data 中挑選一對(duì)重疊評(píng)分最多的用戶,用他們之間的相關(guān)系數(shù)的標(biāo)準(zhǔn)差去對(duì)整體標(biāo)準(zhǔn)差做點(diǎn)估計(jì)。在此前提下對(duì)這一對(duì)用戶在不同樣本量下的相關(guān)系數(shù)進(jìn)行統(tǒng)計(jì),觀察其標(biāo)準(zhǔn)差變化。首先,要找出重疊評(píng)分最多的一對(duì)用戶。我們新建一個(gè)以 user 為行列的方陣 foo,然后挨個(gè)填充不同用戶間重疊評(píng)分的個(gè)數(shù):這段代碼特別費(fèi)時(shí)間,因?yàn)樽詈笠恍姓Z(yǔ)句要執(zhí)行 4000*4000 = 1600 萬(wàn)遍;找到的最大值所對(duì)應(yīng)的行列分別為424 和4169,這兩位用戶之間的重疊評(píng)分?jǐn)?shù)為998:把 424 和 4169 的評(píng)分?jǐn)?shù)據(jù)單獨(dú)拿出來(lái),放到一個(gè)名為 test 的表里,另外計(jì)算了一下這兩個(gè)用戶之間的相關(guān)系數(shù)為 0.456,

17、還算不錯(cuò),另外通過(guò)柱狀圖了解一下他倆的評(píng)分分布情 for i in foo.index:foo.ixi,i=0#先把對(duì)角線的值設(shè)為 0 ser = Series(np.zeros(len(foo.index) for i in foo.index:seri=fooi.max()#計(jì)算每行中的最大值 ser.idxmax()#返回 ser 的最大值所在的行號(hào)4169 ser4169#取得最大值998 foofoo=9984169.dropna()#取得另一個(gè) user_id 4244169Name: user_id, dtype: float64 foo = DataFrame(np.empty

18、(len(data.index),len(data.index),dtype=int),index=data.index,columns=data.index)#print(empt.shape): (6040, 6040) for i in foo.index:for j in foo.columns:foo.ixi,j = data.ixidata.ixj.notnull().dropna().count()況: data.ix4169.corr(data.ix424) 0.45663851303413217 test = data.reindex(424,4169,columns=dat

19、a.ix4169data.ix424.notnull().dropna().index) testmovie_id2610111217 .424444415 .4169344425 . test.ix424.value_counts(sort=False).plot(kind=bar) test.ix4169.value_counts(sort=False).plot(kind=bar)對(duì)這倆用戶的相關(guān)系數(shù)統(tǒng)計(jì),我們分別隨機(jī)抽取 20、50、100、200、500 和 998 個(gè)樣本值,各抽 20 次。并統(tǒng)計(jì)結(jié)果: periods_test = DataFrame(np.zeros(20,7)

20、,columns=10,20,50,100,200,500,998) for i in periods_test.index:for j in periods_test.columns:sample = test.reindex(columns=np.random.permutation(test.columns):j) periods_test.ixi,j = sample.iloc0.corr(sample.iloc1) periods_test:51020501002005009980 -0.3067190.7090730.5043740.3769210.4771400.4269380.

21、45663910.3866580.6075690.4347610.4719300.4372220.4307650.45663920.5074150.5858080.4406190.6347820.4905740.4367990.45663930.6281120.6282810.4523310.3800730.4720450.4442220.45663940.7925330.6415030.4449890.4992530.4264200.4412920.4566395 rows x 7 columns periods_test.describe()102050100200500#998略coun

22、t20.00000020.00000020.00000020.00000020.00000020.000000mean0.3468100.4647260.4588660.4501550.4675590.452448std0.3985530.1817430.1038200.0936630.0364390.029758min-0.4443020.0873700.1923910.2421120.4122910.39987525%0.1745310.3209410.4347440.3756430.4392280.43529050%0.4871570.5252170.4766530.4688500.47

23、25620.44377275%0.6386850.6166430.5198270.5008250.4873890.465787從 std 這一行來(lái)看,理想的接近)。min_periods 參數(shù)值應(yīng)當(dāng)為 200 左右(標(biāo)準(zhǔn)差和均值、極值最2.2.3 算法檢驗(yàn)為了確認(rèn)在 min_periods=200 下本推薦算法的靠譜程度,最好還是先做個(gè)檢驗(yàn)。具體方法為:在評(píng)價(jià)數(shù)大于 200 的用戶中隨機(jī)抽取 1000 位用戶,每人隨機(jī)提取一個(gè)評(píng)價(jià)另存到一個(gè)數(shù)組里,并在數(shù)據(jù)表中刪除這個(gè)評(píng)價(jià)。然后基于過(guò)的數(shù)據(jù)表計(jì)算被提取出的1000 個(gè)評(píng)分的期望值,最后與真實(shí)評(píng)價(jià)數(shù)組進(jìn)行相關(guān)性比較,看結(jié)果如何。 check_si

24、ze = 1000 check = check_data = data.copy()#一份 data 用于檢驗(yàn),以免篡改原數(shù)據(jù) check_data = check_data.ixcheck_data.count(axis=1)200#濾除評(píng)價(jià)數(shù)小于 200 的用戶 for user in np.random.permutation(check_data.index):movie = np.random.permutation(check_data.ixuser.dropna().index)0 check(user,movie) = check_data.ixuser,moviecheck_

25、data.ixuser,movie = np.nan check_size -= 1if not check_size: break corr = check_data.T.corr(min_periods=200) corr_clean = corr.dropna(how=all) corr_clean = corr_clean.dropna(axis=1,how=all)#刪除全空的行和列 check_ser = Series(check)#這里是被提取出來(lái)的 1000 個(gè)真實(shí)評(píng)分max0.8509630.7090730.5920400.6347820.5460010.5134868 ro

26、ws x 7 columns接下來(lái)要基于 corr_clean 給 check_ser 中的 1000 個(gè)用戶-影片對(duì)計(jì)算評(píng)分期望。計(jì)算方法為:對(duì)與用戶相關(guān)系數(shù)大于 0.1 的其他用戶評(píng)分進(jìn)行平均,相關(guān)系數(shù) result = Series(np.nan,index=check_ser.index) for user,movie in result.index:#這個(gè)循環(huán)很亂,實(shí)際內(nèi)容就是平均而已prediction = if user in corr_clean.index:corr_set = corr_cleanusercorr_cleanuser0.1.dropna()#僅限大于 0.1

27、 的用戶else:continuefor other in corr_set.index:if not np.isnan(data.ixother,movie) and other != user:#注意 bool(np.nan)=True prediction.append(data.ixother,movie,corr_setother)if prediction:result(user,movie) = sum(value*weight for value,weight in prediction)/sum(pair1 for pair inprediction) resuropna(i

28、nplace=True) len(result)#隨機(jī)抽取的 1000 個(gè)用戶中也有被 min_periods=200 刷掉的862 result:5 check_ser:5 (15, 593)4(23, 555)3(33, 3363)4(36, 2355)5(53, 3605)4dtype: float64862 的樣本量能達(dá)到 0.436 的相關(guān)系數(shù),應(yīng)該說(shuō)結(jié)果還不錯(cuò)。如果一開(kāi)始沒(méi)有濾掉評(píng)價(jià)數(shù)小于 200 的用戶的話,那么首先在計(jì)算 corr 時(shí)會(huì)明顯感覺(jué)時(shí)間變長(zhǎng),其次 result 中的樣本量會(huì)很小,大約 200+個(gè)。但因?yàn)闃颖玖孔冃〉木壒?,相關(guān)系數(shù)可以提升到 0.50.6 。另外從期望

29、與實(shí)際評(píng)價(jià)的差的絕對(duì)值的統(tǒng)計(jì)量上看,數(shù)據(jù)也比較理想。2.2.4 實(shí)現(xiàn)推薦在上面的檢驗(yàn),尤其是平均的部分做完后,推薦的實(shí)現(xiàn)就沒(méi)有什么新東西了。首先在原始未的 data 數(shù)據(jù)上重做一份 corr 表:(23, 555)3.967617(33, 3363)4.073205(36, 2355)3.903497(53, 3605)2.948003(62, 1488)2.606582dtype: float64 result.corr(check_ser.reindex(result.index) 0.436227437429696 (result-check_ser.reindex(result.ind

30、ex).abs().describe()#推薦期望與實(shí)際評(píng)價(jià)之差的絕對(duì)值count862.000000mean0.785337std0.605865min0.00000025%0.29038450%0.68603375%1.132256max3.629720dtype: float64我們?cè)?corr_clean 中隨機(jī)挑選一位用戶為他做一個(gè)推薦列表:最后的任務(wù)就是填充這個(gè) gift: corr_lucky = corr_cleanlucky.drop(lucky)#lucky 與其他用戶的相關(guān)系數(shù) Series,不包含 lucky自身 corr_lucky = corr_luckycorr_

31、lucky0.1.dropna()#篩選相關(guān)系數(shù)大于 0.1 的用戶 for movie in gift.index:#遍歷所有 lucky 沒(méi)看過(guò)的prediction = for other in corr_lucky.index:#遍歷所有與 lucky 相關(guān)系數(shù)大于 0.1 的用戶if not np.isnan(data.ixother,movie):prediction.append(data.ixother,movie,corr_cleanluckyother) if prediction:giftmovie = sum(value*weight for value,weight

32、in prediction)/sum(pair1 for pair inprediction) gift.dropna().order(ascending=False)#將 gift 的非空元素按降序排列movie_id32455.00000029305.00000028305.000000 lucky = np.random.permutation(corr_clean.index)0 gift = data.ixlucky gift = giftgift.isnull()#現(xiàn)在 gift 是一個(gè)全空的序列 corr = data.T.corr(min_periods=200) corr_c

33、lean = corr.dropna(how=all) corr_clean = corr_clean.dropna(axis=1,how=all)25695.00000017955.0000009815.0000006965.0000006825.0000006665.0000005725.00000014205.00000033384.8453316694.6604642144.65579834104.624088.28331277712039117731172011692115381143011311111641843166013、CF 協(xié)同過(guò)濾算法補(bǔ)充3.1、計(jì)算距離的數(shù)學(xué)公式距離(Euclidean Distance)最初用于計(jì)算空間中兩個(gè)點(diǎn)的距離,假設(shè) x,y 是 n的兩個(gè)點(diǎn),它們之間的距離是:可以看出,當(dāng) n=2 時(shí),距離就是平面上兩個(gè)點(diǎn)的距離。當(dāng)用距離表示相似度,一般采用以下公式進(jìn)行轉(zhuǎn)換:距離越小,相似度越大相關(guān)系數(shù)(Pearson

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論