如何进行Algobase() 类的功能分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联建站是一家集网站建设,康马企业网站建设,康马品牌网站建设,网站定制,康马网站建设报价,网络营销,网络优化,康马网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
AlgoBase() 类我们前面提到过,是所有算法的父类,那么 AlgoBase() 就应该把所有算法的共同的方法抽象出来。换句话说,AlgoBase() 中的方法,是所有子类都可能拥有的功能。
那么我们先看一下都有哪些函数,然后挑其中几个比较重要的看一下代码。
简单的都介绍一下它们的功能。
fit() 我们在 KNN 的算法中看到,子类也重写了这个函数,那么在父类中主要做了什么呢?父类中主要的作用是给 self 绑定上对应的 trainset,也就是对当前算法对象赋予一个 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
代码我们可以简单的看为三部分,第一部分是两个 try 的异常处理,将数据集中的 raw id 转为处理过后的内部 ID。在前面数据集处理的时候,我们看了将所有 ID 转化为一个内部的 inner ID。
第二部分是去调用该算法自己的 estimate() 函数,这个函数一般在对应算法的子类中写了。不同的算法对应不同的 estimate() 方法。同时返回值有时候会包含一个 details 的内容,这个时候预测结果 est 就是一个包含了预测得分和 details 的元组,此处进行了拆分。如果预测失败,则调用下一个函数:default_prediction(),我们马上就介绍它。
第三部分是一个 clip() 的内容,就是判断预测的结果是否超出范围,进行一个规范化。
通过这三步完成了一个预测,最后返回一个用 Prediction() 进行预测的结果值.
当预测出现问题的时候,就会选择调用 default_prediction(),这个函数调用 trainset 本身的 global_mean 方法,最终返回整个数据集的评分的平均值。
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 结果。
这部分会计算 user 和 items 的 baseline,只计算一次,如果在同一个数据集中已经被调用过了,下次则是直接返回结果,这里和算法之间的具体交互目前还没有看到,后面我们遇到再详细介绍。
这个方法构建一个相似性矩阵,在 AlgoBase() 类初始化的时候会有一个变量 sim_options,这个变量决定了以什么相似性来构建相似性矩阵。
在 surprise 中有一个 similarities.cpython-37m-darwin.so 文件,这个文件封装了不同的相似性计算方法。
在 compute_similarities 中会利用这个文件构建的 similarities 包,最终返回一个目标的相似性矩阵。
这个方法传入一个 user ID,传入一个 int 值 k,返回结果为和这个 user 最相似的 k 个 user 的 ID。
AlgoBase() 基类构建了一些常用的方法,基本上包含了拟合,预测,验证等功能接口,在具体的算法中会重写这些方法,后者调用。
看完上述内容,你们掌握如何进行Algobase() 类的功能分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!