Prediction算法使用
Surprise 提供了许多built-in算法. 所有算法从AlgoBase基类继承, 当使用一些关键的函数时(比如predict, fit 和 test). 可以从prediction_algorithms包文档中获得所有可以使用的算法的详细信息
每一个算法都是Surprise的一个全局的命名空间, 所以我们需要从Surprise包中导入算法, 比如 一些算法可能会使用 baseline estimates,也有一些可能会使用 similarity measure,现在我们回顾一下baselines and similarities是如何计算的
Baselines estimates配置 这部分仅仅适用于最小化带正则化的squared error 对于不同的算法(比如SVD),Baselines estimates配置也是不同的,对每一个算法都是特定的,请参考他们各自的文档。
如果你不想对Baselines estimates进行配置,它自己带有默认的参数。
Baselines可以通过随机梯度下降法Stochastic Gradient Descent (SGD)和交替最小二乘法Alternating Least Squares (ALS)进行计算。
可以通过 bsl_options 参数进行 Baselines的配置,method参数表示要使用的方法, ‘als’ (默认) 或者是 ‘sgd’.
ALS的相关参数如下:
'reg_i':items的正则化项,对应着λ2,默认值是10 'reg_u':users的正则化项,对应着λ3,默认值是15 'n_epochs':ALS执行的轮数,默认是10SGD的相关参数如下:
'reg':所要优化的损失函数的正则化项,对应着λ1和λ5,默认值是0.02 'learning_rate':SGD的学习速率,对应着γ,默认是0.005 'n_epochs':SGD执行的轮数,默认是20不管是ALS还是SGD,user和item偏置(bu和 bi)初始化为0
#ALS初始化例子: print('Using ALS') bsl_options = {'method': 'als', 'n_epochs': 5, 'reg_u': 12, 'reg_i': 5 } algo = BaselineOnly(bsl_options=bsl_options) Using ALS #SGD初始化例子: print('Using SGD') bsl_options = {'method': 'sgd', 'learning_rate': .00005, } algo = BaselineOnly(bsl_options=bsl_options)值得注意的一点是在进行相似度测量时,也可能使用 baselines, 比如pearson_baseline相似度。
不管是在用在实际的预测 r^ui或者其他地方,配置工作和之前的一样。
bsl_options = {'method': 'als', 'n_epochs': 20, } sim_options = {'name': 'pearson_baseline'} algo = KNNBasic(bsl_options=bsl_options, sim_options=sim_options) #KNNBasic为基础的协同过滤算法相似度度量配置 许多算法使用相似度度量来估计评分,配置方法和baseline rating类似,在算法建立时,使用sim_options进行配置,下面介绍关键的参数:
'name':相似度度量方法的名称, 这些方法定义在similarities中,默认是'MSD' 'user_based':控制是否计算users和items之间的相似度,这个参数对于预测算法的性能有着重要的影响,默认是True(计算users之间的相似度) False(计算items之间的相似度) 'min_support':相同items的最小数量(当'user_based'为True时)或者相同users的最小数量(当'user_based'为False时),如果满足最小数量,那 么相似度不为0,如果|Iuv|<min_support 然后 sim(u,v)=0. 'shrinkage':Shrinkage参数仅仅在使用(相关性或者相似度度量)时使用,默认是100 #使用例子 sim_options = {'name': 'cosine', 'user_based': False # 计算items之间的相似度 } algo = KNNBasic(sim_options=sim_options) sim_options = {'name': 'pearson_baseline', 'shrinkage': 0 # no shrinkage } algo = KNNBasic(sim_options=sim_options)