LibRec使用重现trustsvd和`Exception in thread"main"net.librec.common.LibrecException:Loss=NaN or Infinity

1.首先 下载
2.下载后解压。
3.在windows下演示,linux同理。
4.直接先进入cmd,切换到解压的目录bin下如图:
这里写图片描述

这里写图片描述


5.测试运行一个简单的推荐算法:Global Average

librec rec -exec -D rec.recommender.class=globalaverage

这里写图片描述

从图上可知,LibRec自动(从类路径classpath中)加载了 librec.properties配置文件来指定程序运行的必要配置,包括数据集位置,数据分割的方式,评估器等内容。执行完成后,把评估的结果存储到指定位置。

贴了6的结果图
这里写图片描述


6.最近看来Trustsvd论文:好奇它的结果如何

librec rec -exec -conf ../core\src\main\resources\rec\context\rating/trustsvd-test.properties

结果:

8/04/19 21:26:10 INFO RecommenderJob: Evaluator value:MPE is 0.9901213660739486
18/04/19 21:26:10 INFO RecommenderJob: Evaluator value:MSE is 0.6271031037849762
18/04/19 21:26:10 INFO RecommenderJob: Evaluator value:MAE is 0.6133142404960893
18/04/19 21:26:10 INFO RecommenderJob: Evaluator value:RMSE is 0.7918984175921658
18/04/19 21:26:10 INFO RecommenderJob: Result path is ../result/filmtrust/rating-trustsvd-output/trustsvd

这里写图片描述

默认的都是filmtrust数据集,看到达不到论文里的水平,配置文件里的参数可能不一样。看一下论文里的水平。
这里写图片描述


7.配置选项–追求论文水平
core\src\main\resources\rec\context\rating\trustsvd-test.properties下的配置和论文里一样

data.appender.class=social
data.appender.path=test/test-append-dir
rec.recommender.class=trustsvd
rec.iterator.learnrate=0.005
rec.iterator.learnrate.maximum=-1
rec.iterator.maximum=100
rec.user.regularization=1.2
rec.item.regularization=1.2
rec.social.regularization=0.9
rec.bias.regularization=1.2
rec.factor.number=10
rec.learnrate.bolddriver=false
rec.learnrate.decay=1.0
rec.recommender.earlystop=false
rec.recommender.verbose=true
#添加两条
data.model.splitter=kcv
data.splitter.cv.number=5

7.1.1.这样把放置在 conf / librec.properties文件中设置覆盖了如下设置:下面的设置比例0.8有一个特点就是
就是产生的结果是不变的,不像论文的5折交叉验证结果每次都不一样。最后贴张很接近论文的值了(论文中应该用的是交叉验证中较低的值非平均值)。

data.model.splitter=ratio
# this value should in (0,1)
data.splitter.trainset.ratio=0.8

7.1.2.或者把前者去掉,只在在 conf / librec.properties文件中设置

data.model.splitter=kcv
data.splitter.cv.number=5

7.2.配置后还是执行6中的命令

这里写图片描述

Librec.properties 是优先导入的,其配置项可以被具体算法的配置文件重置。例如,我们可以在 svdpp-test.properties 覆盖并指定新的数据分割方式。

详细说明参考


更新
官网测试结果汇总
官方数据推荐
我的目的是重现trustsvd论文里的结果,注意数据集的大小
paper中:
这里写图片描述
Epinions(665K)
Filmtrust(35K)
Flixster(410K)
Ciao(280K)
前两个已经弄到,后两个还找不到同样大小的,微信群里问作者要,还被嘲讽了一下 哈哈


测试新数据Epinions(665K)
更改文件测试在 在conf / librec.properties 文件中设置:

# convertor
# load data and splitting data 
# into two (or three) set
# setting dataset name
data.input.path=Epinions/rating
data.input.path=filmtrust/trust

1.在运行SocialMF,默认参数就可以!先看一下Epinions在SocialMF的效果
这里写图片描述
2.在运行trustsvd注意配置参数不然会崩见图,但是这样就不能保证最优,尽管我用的是论文的参数还是崩。不是trustsvd最优但必须比其他要优,不然真是垃圾。
这里写图片描述

当前的配置:

data.appender.class=social
data.appender.path=test/test-append-dir
rec.recommender.class=trustsvd
rec.iterator.learnrate=0.005
rec.iterator.learnrate.maximum=-1
rec.iterator.maximum=100
rec.user.regularization=1.2
rec.item.regularization=1.2
rec.social.regularization=0.9
rec.bias.regularization=1.2
rec.factor.number=10
rec.learnrate.bolddriver=false
rec.learnrate.decay=1.0
rec.recommender.earlystop=false
rec.recommender.verbose=true

Exception in thread "main" net.librec.common.LibrecException: Loss = NaN or Infinity: current settings does not fit the recommender! Change the settings and try again!

2.修改后配置可以出正常结果

data.appender.class=social
data.appender.path=test/test-append-dir
rec.recommender.class=trustsvd
rec.iterator.learnrate=0.005
rec.iterator.learnrate.maximum=1
rec.iterator.maximum=10
rec.user.regularization=0.0001
rec.item.regularization=0.0001
rec.social.regularization=0.0001
rec.bias.regularization=0.0001
rec.factor.number=10
rec.learnrate.bolddriver=false
rec.learnrate.decay=0.0001
rec.recommender.earlystop=false
rec.recommender.verbose=true

这里写图片描述


现在我才知道出错原来是学习率的问题,之前虽然跑通了但是也说了与论文中的结果0.805相差太多。之前正则系数太差了,更新一下:

调学习率的过程中如果再出现delta_loss负值(除了第一次迭代)肯定会崩

这里写图片描述

这里写图片描述
Epinions的最接近理想值配置:

data.appender.class=social
data.appender.path=test/test-append-dir
rec.recommender.class=trustsvd
rec.iterator.learnrate=0.005
rec.iterator.learnrate.maximum=0.003
rec.iterator.maximum=100
rec.user.regularization=0.9
rec.item.regularization=0.9
rec.social.regularization=0.5
rec.bias.regularization=0.9
rec.factor.number=5
rec.learnrate.bolddriver=false
rec.learnrate.decay=-1
rec.recommender.earlystop=false
rec.recommender.verbose=true
data.splitter.cv.number=5

这里写图片描述
结果是0.809,d=5,trustsvd.

猜你喜欢

转载自blog.csdn.net/dongyanwen6036/article/details/80011313