#集體智慧型程式設計學習
概要:文章主要討論一些我遇到的問題,學習到的方法,總結一些演算法的實現過程。
注:所參考的版本為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]
(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′)
]找出列表時遇到困難,怎麼構造要使用的資料集是我們需要考慮的。關於此問題,我會重新學習爬蟲的相關知識,重開一文。
1.unhashable type: 『slice』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(
(prefs[
'45'])
#數碼隨機選的
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 評價值特點 歐幾里德距離 多維空間中兩點之間的距離,用來衡量二者的相似度。距離越小,相...