溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行Algobase() 類的功能分析

發(fā)布時(shí)間:2021-12-10 16:09:54 來(lái)源:億速云 閱讀:150 作者:柒染 欄目:大數(shù)據(jù)

如何進(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è)比較重要的看一下代碼。

如何進(jìn)行Algobase() 類的功能分析

簡(jiǎn)單的都介紹一下它們的功能。

fit()

fit() 我們?cè)?KNN 的算法中看到,子類也重寫了這個(gè)函數(shù),那么在父類中主要做了什么呢?父類中主要的作用是給 self 綁定上對(duì)應(yīng)的 trainset,也就是對(duì)當(dāng)前算法對(duì)象賦予一個(gè) self.trainset 屬性。

predict()
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é)果值.

default_prediction()

當(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)分的平均值。

test()
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é)果。

compute_baselines()

這部分會(huì)計(jì)算 user 和 items 的 baseline,只計(jì)算一次,如果在同一個(gè)數(shù)據(jù)集中已經(jīng)被調(diào)用過(guò)了,下次則是直接返回結(jié)果,這里和算法之間的具體交互目前還沒(méi)有看到,后面我們遇到再詳細(xì)介紹。

compute_similarities()

這個(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)的相似性矩陣。

get_neighbors()

這個(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è)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI