集體智慧型程式設計學習

2021-08-14 09:18:52 字數 3804 閱讀 9160

#集體智慧型程式設計學習

概要:文章主要討論一些我遇到的問題,學習到的方法,總結一些演算法的實現過程。

注:所參考的版本為2023年出版。[書中packages與現在有變化,但是可以通過查閱相關packages文件來找到相關功能 ]

3.相似度排序

4.相似人群加權排名及歸一化

6.構建基於[del.icio.us](的推薦系統

7.使用[movieslens](

待解決的問題

功能:找出與我們品味相近的一群人(推薦演算法)

相關:正因為使用者的對某事物的評分,我們的演算法可以利用這些資訊來建立乙個過濾系統,即利用匹配相同愛好的人來推薦相同的有興趣的事物。_

字典結構、資料庫

歐幾里得幾何距離、皮爾遜相關度

1) 歐幾里得幾何距離

s = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2) )

距離越近,相似度越大,則轉化為下式:sim_distance = 1 / (1+s)

2) 皮爾遜相關度

給出原始碼如下:

#returns the pearson correlation coefficient for p1 and p2

defsim_pearson

(prefs,p1,p2)

:# get the list of mutually rated items

si=for item in prefs[p1]

:if item in prefs[p2]

: si[item]=1

# if they are no ratings in common, return 0

iflen

(si)==0

:return

0# sum calculations

n=len(si)

#計算相同的偏好的個數

# sums of all the preferences

sum1=

sum(

[prefs[p1]

[it]

for it in si]

) sum2=

sum(

[prefs[p2]

[it]

for it in si]

)# sums of the squares

sum1sq=

sum(

[pow

(prefs[p1]

[it],2

)for it in si]

) sum2sq=

sum(

[pow

(prefs[p2]

[it],2

)for it in si]

)# sum of the products

psum=

sum(

[prefs[p1]

[it]

*prefs[p2]

[it]

for it in si]

)# calculate r (pearson score)

num=psum-

(sum1*sum2/n)

den=sqrt(

(sum1sq-

pow(sum1,2)

/n)*

(sum2sq-

pow(sum2,2)

/n))

if den==0:

return

0 r=num/den

return r

演算法和概率論協方差係數有關係。

3) 其他演算法

jaccard係數

比較文字相似度,用於文字查重與去重;計算物件間距離,用於資料聚類等。

曼哈頓距離

用以標明兩個點在標準座標系上的絕對軸距總和

def

topmatches

(prefs,person,n=

5,similarity=sim_pearson)

: scores=

[(similarity(prefs,person,other)

,other)

for other in prefs if other!=person]

scores.sort(

) scores.reverse(

)return scores[

0:n]

print

(topmatches(critics, 'toby)

輸出:[

(0.9912407071619299,′

lisa

rose

′),(

0.9244734516419049,′

mick

lasa

lle′

),

(0.8934051474415647,′

clau

diap

uig′

)]

[(0.9912407071619299, 'lisa rose'), (0.9244734516419049, 'mick lasalle'), (0.8934051474415647, 'claudia puig')]

[(0.99

1240

7071

6192

99,′

lisa

rose

′),(

0.92

4473

4516

4190

49,′

mick

lasa

lle′

),(0

.893

4051

4744

1564

7,′c

laud

iapu

ig′)

]找出列表時遇到困難,怎麼構造要使用的資料集是我們需要考慮的。關於此問題,我會重新學習爬蟲的相關知識,重開一文。

def

loadmovielens

(path=

'c:\\'):

#路徑記得加\\,若乙個短斜槓會被轉義成tab

# get movie titles

movies=

for line in

open

(path+

'u.item'):

(id,title)

=line.split(

'|')[0

:2] movies[id]

=title

# load data

prefs=

for line in

open

(path+

'u.data'):

(user,movieid,rating,ts)

=line.split(

'\t'

) prefs.setdefault(user,

) prefs[user]

[movies[movieid]]=

float

(rating)

return prefs

prefs = loadmovielens(

)print

(prefs[

'45'])

#數碼隨機選的

1.unhashable type: 『slice』

2.float division by zero

3.列表輸出評價資訊全為零(基於物體構造相似度字典)

集體智慧型程式設計學習筆記 更新

本人是python初學者,本系列用來熟悉python和記錄學習點滴 度量 引數 函式 名詞 注意 第二章 推薦演算法 語言python 步驟 1 數值化 將屬性的值對應到數字,如喜歡 1不喜歡 1 已購買2,已瀏覽1未購買0 2 相似度係數 用來確定與其他人評委的相似程度的度量。常用兩種度量 歐幾里...

《集體智慧型程式設計》學習筆記(一)

先構造乙個簡單的資料集 使用者對不同電影的評分 critics gene seymour michael phillips claudia puig mick lasalle jack matthews toby 評價值特點 歐幾里德距離 多維空間中兩點之間的距離,用來衡量二者的相似度。距離越小,相...

《集體智慧型程式設計》學習筆記(一)

先構造乙個簡單的資料集 使用者對不同電影的評分 critics gene seymour michael phillips claudia puig mick lasalle jack matthews toby 評價值特點 歐幾里德距離 多維空間中兩點之間的距離,用來衡量二者的相似度。距離越小,相...