189 8069 5689

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

如何进行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() 类的功能分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


网站名称:如何进行Algobase()类的功能分析
URL地址:http://cdxtjz.cn/article/piejjd.html

其他资讯