我们知道在 librec 中有许多已经实现的推荐算法,因为每种推荐算法的参数不一定一样,而又有大部分参数是一样的,比如都会涉及到划分数据集的方式、评估方式等等。所以 librec 项目为了方便,把大部分推荐算法都有的参数配置都固定到 librec-default.properties 这个文件中,那么这些参数就成为了默认的配置项,下面例举出来并且配上相关解释:
dfs.data.dir=../data
: 用于设置数据集读取路径
dfs.result.dir=../result
:用于设置推荐结果的保存路径
data.input.path=movielens/ml-100k
:指定输入的数据集,目录是dfs.data.dir
data.column.format=UIRT
:指定数据集每一列的含义,是user item rating 还是 user item rating time,前者用UIR,后者用UIRT
data.convert.sep = ::
和data.convert.sep = \t
:用于设定数据的分隔方式
data.cache = true
:
data.model.splitter=ratio
:设置划分数据集的方式,librec中提供 ratio、loocv、given、kcv等几种划分方式
data.splitter.cv.number=5
和 data.splitter.cv.index=1
: 选择kcv划分数据集方式的时候需要设定,前者表示划分成多少份,后者的取值范围为1到data.splitter.cv.number,用于设置测试集的是哪一份数据。
之后执行算法时, 只是针对于当前这次训练集测试集合进行计算. 因此如果要统计所有次的结果, 还需要实现循环来分别设置配置项"data.splitter.cv.index"并进行分割执行算法。
KCVDataSplitter splitter = new KCVDataSplitter(convertor, conf);
for (int i = 1; i <= 6; i++) {
// split into 5 parts by default
splitter.splitFolds();
splitter.splitData(i);
}
data.splitter.ratio=rating
: 选择ratio方式划分方式时需要设定这个参数,这里的意思是按照分数来进行比例划分,还可以进行选择的按比例划分方式有user, userfixed, item, valid, ratingdate, userdate, itemdate。使用userfixed在数据量较小时可以获得更精确的划分结果。使用valid时还需要指定data.splitter.validset.ratio。附带有date的方法为根据数据量在date序列上进行划分. 在时间数值上较大的划分为testset,时间数值较小的划分为trainset。
data.splitter.trainset.ratio=0.8
: 选择ratio方式划分需要设定,意思是划分比例,数值在(0,1)之间
data.model.format=text
: 这里指的是数据集是 text 还是 arff 格式(只有这两种格式),当数据列大于4时,需要使用arff格式的数据来进行存储
rec.random.seed=1
: 为了保证每次生成的结果是可以复现的,设定全局的随机种子,固定随机种子则固定了诸如初始化参数、每次划分数据集的结果等,设定随机种子可以保证每次运行得到的结果都是一样的(前提是参数不变)
data.convert.binarize.threshold=-1.0
: 是否二值化分数值,有的推荐算法会把显性的评分数据转成01表示的隐性反馈数据,这样的做法一般用在ranking算法上。如果这个值=-1,则代表不用二值化,如果这个值=value,则当分数大于这个value的时候,该评分改为1,小于这个value的时候,该评分改为0。
rec.eval.enable=true
: 是否要评估推荐结果
rec.eval.classes=auc
: 择具体的评估方式,还可以选择的是auc,precision,recall…如果 rec.eval.class 值是空的,则表示所有的评估方法都会计算
rec.recommender.isranking=false
: 如果这个推荐算法是ranking算法,则为true
rec.recommender.similarities=user
: 可以选择计算用户(user)、物品(item)、社交朋友(social)之间的相似度
rec.recommender.verbose=true
:对于部分推荐算法, 可以选择将每次迭代的学习情况打印输出。
原配置项主要内容可以参考这个链接。
除了这些共有的配置项参数,每一个推荐算法是有其不一样的参数设置的,这些算法的配置项也都保存在 librec 下的ibrec\core\src\main\resources\rec
的目录下了,执行不同推荐算法时可以在命令行输入这些配置项的路径从而进行运行。如果不会的话,可以参考一下我的上一篇博文:librec 如何使用命令行和参数或者配置文件运行指定推荐算法?
至于不同的推荐算法有哪些特殊的配置项,可以参考官方文档AlgorithmList,比如下面是TrustMFRecommender的配置项trustmf-test.properties,具体路径是在librec/core/src/main/resources/rec/context/rating/trustmf-test.properties
另外,值得一提的是,在运行某个推荐算法时,默认的配置项文件 librec-default.properties 文件是一定会执行的,而具体的推荐算法的配置项,如 trustmf 算法中,它的 trustmf-test.properties 文件也会执行,如果有重复的参数设置,后者的会覆盖前者,比如可以在 trustmf-test.properties 文件中覆盖并指定新的数据分割方式。所以记住,执行顺序是先执行默认配置文件,再执行具体算法的配置文件。
如果不想使用已经定义好的默认配置文件或者具体算法的配置文件,完全是可以在命令行中直接进行修改的或者导入自己写的配置文件。
读完以上内容,不出意外,您大概已经知道 librec 中的默认配置项里面的参数是什么意思了!ヾ(◍°∇°◍)ノ゙
本人目前刚开始学习使用 librec,欢迎同伴一起交流进步,哪里有写的不对的地方,欢迎评论指正呀!ヾ(◍°∇°◍)ノ゙
如果这篇博客帮助了您,可以请我吃包5毛钱的辣条吗?(下面为微信收款码)或者点个赞也行呀!您小小的鼓励会是我持续更新的动力!ヾ(◍°∇°◍)ノ゙