您好,登錄后才能下訂單哦!
如何進(jìn)行Algobase() 類的功能分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
AlgoBase() 類我們前面提到過(guò),是所有算法的父類,那么 AlgoBase() 就應(yīng)該把所有算法的共同的方法抽象出來(lái)。換句話說(shuō),AlgoBase() 中的方法,是所有子類都可能擁有的功能。
那么我們先看一下都有哪些函數(shù),然后挑其中幾個(gè)比較重要的看一下代碼。
簡(jiǎn)單的都介紹一下它們的功能。
fit() 我們?cè)?KNN 的算法中看到,子類也重寫了這個(gè)函數(shù),那么在父類中主要做了什么呢?父類中主要的作用是給 self 綁定上對(duì)應(yīng)的 trainset,也就是對(duì)當(dāng)前算法對(duì)象賦予一個(gè) self.trainset 屬性。
def predict(self, uid, iid, r_ui=None, clip=True, verbose=False):
# Convert raw ids to inner ids
try:
iuid = self.trainset.to_inner_uid(uid)
except ValueError:
iuid = 'UKN__' + str(uid)
try:
iiid = self.trainset.to_inner_iid(iid)
except ValueError:
iiid = 'UKN__' + str(iid)
details = {}
try:
est = self.estimate(iuid, iiid)
# If the details dict was also returned
if isinstance(est, tuple):
est, details = est
details['was_impossible'] = False
except PredictionImpossible as e:
est = self.default_prediction()
details['was_impossible'] = True
details['reason'] = str(e)
# clip estimate into [lower_bound, higher_bound]
if clip:
lower_bound, higher_bound = self.trainset.rating_scale
est = min(higher_bound, est)
est = max(lower_bound, est)
pred = Prediction(uid, iid, r_ui, est, details)
if verbose:
print(pred)
return pred
代碼我們可以簡(jiǎn)單的看為三部分,第一部分是兩個(gè) try 的異常處理,將數(shù)據(jù)集中的 raw id 轉(zhuǎn)為處理過(guò)后的內(nèi)部 ID。在前面數(shù)據(jù)集處理的時(shí)候,我們看了將所有 ID 轉(zhuǎn)化為一個(gè)內(nèi)部的 inner ID。
第二部分是去調(diào)用該算法自己的 estimate() 函數(shù),這個(gè)函數(shù)一般在對(duì)應(yīng)算法的子類中寫了。不同的算法對(duì)應(yīng)不同的 estimate() 方法。同時(shí)返回值有時(shí)候會(huì)包含一個(gè) details 的內(nèi)容,這個(gè)時(shí)候預(yù)測(cè)結(jié)果 est 就是一個(gè)包含了預(yù)測(cè)得分和 details 的元組,此處進(jìn)行了拆分。如果預(yù)測(cè)失敗,則調(diào)用下一個(gè)函數(shù):default_prediction(),我們馬上就介紹它。
第三部分是一個(gè) clip() 的內(nèi)容,就是判斷預(yù)測(cè)的結(jié)果是否超出范圍,進(jìn)行一個(gè)規(guī)范化。
通過(guò)這三步完成了一個(gè)預(yù)測(cè),最后返回一個(gè)用 Prediction() 進(jìn)行預(yù)測(cè)的結(jié)果值.
當(dāng)預(yù)測(cè)出現(xiàn)問(wèn)題的時(shí)候,就會(huì)選擇調(diào)用 default_prediction(),這個(gè)函數(shù)調(diào)用 trainset 本身的 global_mean 方法,最終返回整個(gè)數(shù)據(jù)集的評(píng)分的平均值。
def test(self, testset, verbose=False): predictions = [self.predict(uid, iid, r_ui_trans, verbose=verbose) for (uid, iid, r_ui_trans) in testset] return predictions
test() 函數(shù)直接為 testset 中的每組數(shù)據(jù)去調(diào)用前面的 predict() 函數(shù),返回一個(gè) list 結(jié)果。
這部分會(huì)計(jì)算 user 和 items 的 baseline,只計(jì)算一次,如果在同一個(gè)數(shù)據(jù)集中已經(jīng)被調(diào)用過(guò)了,下次則是直接返回結(jié)果,這里和算法之間的具體交互目前還沒(méi)有看到,后面我們遇到再詳細(xì)介紹。
這個(gè)方法構(gòu)建一個(gè)相似性矩陣,在 AlgoBase() 類初始化的時(shí)候會(huì)有一個(gè)變量 sim_options,這個(gè)變量決定了以什么相似性來(lái)構(gòu)建相似性矩陣。
在 surprise 中有一個(gè) similarities.cpython-37m-darwin.so 文件,這個(gè)文件封裝了不同的相似性計(jì)算方法。
在 compute_similarities 中會(huì)利用這個(gè)文件構(gòu)建的 similarities 包,最終返回一個(gè)目標(biāo)的相似性矩陣。
這個(gè)方法傳入一個(gè) user ID,傳入一個(gè) int 值 k,返回結(jié)果為和這個(gè) user 最相似的 k 個(gè) user 的 ID。
AlgoBase() 基類構(gòu)建了一些常用的方法,基本上包含了擬合,預(yù)測(cè),驗(yàn)證等功能接口,在具體的算法中會(huì)重寫這些方法,后者調(diào)用。
看完上述內(nèi)容,你們掌握如何進(jìn)行Algobase() 類的功能分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。