surprise框架之使用预测算法(翻译)

surprise框架提供了一堆内建的算法。所有算法都来自AlgoBase基类,其中实现了一些关键方法(例如预测,拟合和测试)。 可用预测算法的列表和详细信息可以在prediction_algorithms包文档中找到。

每个算法都是surprise的全局命名空间的一部分,所以你仅仅只需从surprise包中导入他们的名字即可,例如:

1
2
from surprise import KNNBasic
algo = KNNBasic()

其中一些算法可能使用基准估计,有些可能使用相似性度量。我们将在这里回顾如何配置基线和相似性的计算方法。
我们来回顾一下基准估计和相似度估计.

基准估计设置
说明:
本节只适用于最小化正则化平方误差(或等价)的算法(或相似性度量):

对于在另一个目标函数(例如SVD算法)中使用基线的算法,基线配置是不同的,对每个算法都是特定的。请参考他们自己的文档。

首先,如果你不想配置通过基准估计的方法,你也就无需进行修改,默认的参数也能很好的完成。如果你想更好,那这就是为你准备的。

你可能需要阅读这里,来了解什么是基准估计。
基准可以用两种方式进行估算:
使用随机梯度下降
使用交替最小二乘法

你可以配置使用bsl_options在创建算法时传递参数来计算基准的方法。这个参数是一个字典,其中’method’表示要使用的方法,接受的值是’ALS’(默认)和’SGD’,根据其值,可以设置其他选项,对于ALS:

  • ‘reg_i’:表示项目的正规化参数,默认值是10;
  • ‘reg_u’:表示用户的正规化参数,默认值是15;
  • ‘n-epochs’: 表示ALS过程的迭代次数,默认是10.

对于SGD:

  • ‘reg’:表示优化的成本函数的正规化参数,默认值是0.02
  • ‘learing_rate’: 表示SGD的学习率,默认值是0.05
  • ‘n-epochs’:表示SGD的迭代次数,默认值是20

对于两个处理方式(ALS和SGD),用户和物品的偏差都被初始化为0。

使用案例:
ALS:

1
2
3
4
5
6
7
print('Using ALS')
bsl_options = {'method': 'als',
'n_epochs': 5,
'reg_u': 12,
'reg_i': 5
}
algo = BaselineOnly(bsl_options=bsl_options)

SGD:

1
2
3
4
5
print('Using SGD')
bsl_options = {'method': 'sgd',
'learning_rate': .00005,
}
algo = BaselineOnly(bsl_options=bsl_options)

说明:一些相似性度量可能会用到基准,例如pearson_baseline相似。无论在实际的预测中是否用到r^ui,配置的工作都是相同的。

1
2
3
4
5
bsl_options = {'method': 'als',
'n_epochs': 20,
}
sim_options = {'name': 'pearson_baseline'}
algo = KNNBasic(bsl_options=bsl_options, sim_options=sim_options)

这将引导我们进行相似性度量配置,我们现在将对此进行回顾。

相似度估计配置

许多算法使用相似度度量来评分。

  • ‘name’:在similarities模块中定义的相似度的名称 。默认是’MSD’。
  • ‘user_based’:是否在用户之间或项目之间计算相似度。这对预测算法的性能有很大的影响。默认是True。
  • ‘min_support’:共同项目的最小数量(当’user_based’ 是’True’)或最小数量的普通用户
  • ‘shrinkage’:要应用的收缩参数(仅与pearson_baseline相似性相关 )。默认值是100。

代码:

1
2
3
4
sim_options = {'name': 'cosine',
'user_based': False # compute similarities between items
}
algo = KNNBasic(sim_options=sim_options)

1
2
3
4
5
sim_options = {'name': 'pearson_baseline',
'shrinkage': 0 # no shrinkage
}
algo = KNNBasic(sim_options=sim_options)
See also