温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行Algobase() 类的功能分析

发布时间:2021-12-10 16:09:54 来源:亿速云 阅读:157 作者:柒染 栏目:大数据

如何进行Algobase() 类的功能分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

AlgoBase() 类我们前面提到过,是所有算法的父类,那么 AlgoBase() 就应该把所有算法的共同的方法抽象出来。换句话说,AlgoBase() 中的方法,是所有子类都可能拥有的功能。

那么我们先看一下都有哪些函数,然后挑其中几个比较重要的看一下代码。

如何进行Algobase() 类的功能分析

简单的都介绍一下它们的功能。

fit()

fit() 我们在 KNN 的算法中看到,子类也重写了这个函数,那么在父类中主要做了什么呢?父类中主要的作用是给 self 绑定上对应的 trainset,也就是对当前算法对象赋予一个 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


代码我们可以简单的看为三部分,第一部分是两个 try  的异常处理,将数据集中的 raw id 转为处理过后的内部 ID。在前面数据集处理的时候,我们看了将所有 ID 转化为一个内部的 inner ID。

第二部分是去调用该算法自己的 estimate() 函数,这个函数一般在对应算法的子类中写了。不同的算法对应不同的 estimate() 方法。同时返回值有时候会包含一个 details 的内容,这个时候预测结果 est 就是一个包含了预测得分和 details 的元组,此处进行了拆分。如果预测失败,则调用下一个函数:default_prediction(),我们马上就介绍它。

第三部分是一个 clip() 的内容,就是判断预测的结果是否超出范围,进行一个规范化。

通过这三步完成了一个预测,最后返回一个用 Prediction() 进行预测的结果值.

default_prediction()

当预测出现问题的时候,就会选择调用 default_prediction(),这个函数调用 trainset 本身的 global_mean 方法,最终返回整个数据集的评分的平均值。

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() 函数直接为 testset 中的每组数据去调用前面的 predict() 函数,返回一个 list 结果。

compute_baselines()

这部分会计算 user 和 items 的 baseline,只计算一次,如果在同一个数据集中已经被调用过了,下次则是直接返回结果,这里和算法之间的具体交互目前还没有看到,后面我们遇到再详细介绍。

compute_similarities()

这个方法构建一个相似性矩阵,在 AlgoBase() 类初始化的时候会有一个变量 sim_options,这个变量决定了以什么相似性来构建相似性矩阵。

在 surprise 中有一个 similarities.cpython-37m-darwin.so 文件,这个文件封装了不同的相似性计算方法。

在 compute_similarities 中会利用这个文件构建的 similarities 包,最终返回一个目标的相似性矩阵。

get_neighbors()

这个方法传入一个 user ID,传入一个 int 值 k,返回结果为和这个 user 最相似的 k 个 user 的 ID。

AlgoBase() 基类构建了一些常用的方法,基本上包含了拟合,预测,验证等功能接口,在具体的算法中会重写这些方法,后者调用。

看完上述内容,你们掌握如何进行Algobase() 类的功能分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI