HybridAlgorithm.py
首先,这个类是一个融合算法,可以将两个不同的模型按照指定比例融合成一个模型进行预测。
让我们看看该类运用到了什么库
from surprise import AlgoBase
from surprise import NormalPredictor
这个类运用了一个库中的两个类,分别是AlgoBase和NormalPredictor。其中AlgoBase是每个surprise库中每个单个预测算法都必须继承的基类。详情可以点击AlgoBase。NormalPredictor类是suprise库中的基于训练集的分布预测随机评分的算法,该分布假定为正常,详情请点击NormalPredictor。
__init__函数
该函数是该类的初始化函数,主要是继承了surprise库中的算法基类AlgoBase
# 初始化函数
def __init__(self, algorithms, weights,sim_options={}):
AlgoBase.__init__(self) # 调用AlgoBase类的初始化函数
self.algorithms=algorithms # 将传入的算法赋值给self.algorithms
self.weights=weights # 将传入的权重赋值给self.weights
fit函数
该函数是重写了基类中的fit函数,主要是将所有传入算法根据训练集进行训练。
# 重写基类中的fit函数
def fit(self,trainset):
AlgoBase.fit(self,trainset) # 在给定的训练集上训练算法。每个派生类都将此方法称为训练算法的第一步。它基本上只是初始化一些内部结构并设置self.trainset属性。
for algo in self.algorithms: # 分别用传入过的算法对给定数据集进行训练
algo.fit(trainset)
return self
estimate函数
该函数是用每个算法去计算在此电影与用户评价的所有电影之间建立相似度评分,接着提取前K个最相似的评分(默认为40),最后计算按用户评分加权的K个邻居的平均得分,再将每个算法得出的平均得分进行加权。
# 该函数是用每个算法去计算在此电影与用户评价的所有电影之间建立相似度评分,接着提取前K个最相似的评分(默认为40),最后计算按用户评分加权的K个邻居的平均得分,再将每个算法得出的平均得分进行加权。
def estimate(self,u,i):
scores_total = 0
weights_total = 0
for index in range (len(self.algorithms)): # 调用算法池里面的每个算法,进行计算
scores_total += self.algorithms[index].estimate(u,i) * self.weights[index] # 每个模型加权
weights_total += self.weights[index]
return scores_total/weights_total # 返回计算值