1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| import cornac from cornac.eval_methods import RatioSplit from cornac.models import BPR from cornac.hyperopt import Discrete, Continuous from cornac.hyperopt import GridSearch, RandomSearch
ml_100k = cornac.datasets.movielens.load_feedback()
''' 在 RatioSplit 方法中添加了验证集。 实例化用于跟踪模型性能的 Recall@100 指标 ''' rs = RatioSplit(data=ml_100k, test_size=0.1, val_size=0.1, rating_threshold=4.0, seed=123)
rec100 = cornac.metrics.Recall(100)
bpr = BPR(k=10, max_iter=200, learning_rate=0.001, lambda_reg=0.01, seed=123)
''' 想要优化 k 和 learning_rate 超参数。为此,可以使用 cornac.hyperopt 模块来执行搜索 '''
gs_bpr = GridSearch( model=bpr, space=[ Discrete(name='k', values=[5, 10, 50]), Discrete(name="learning_rate", values=[0.001, 0.05, 0.01, 0.1]) ], metric=rec100, eval_method=rs, )
rs_bpr = RandomSearch( model=bpr, space=[ Discrete(name='k', values=[5, 10, 50]), Continuous(name="learning_rate", low=0.001, high=0.01) ], metric=rec100, eval_method=rs, n_trails=20, )
cornac.Experiment( eval_method=rs, models=[gs_bpr, rs_bpr], metrics=[rec100], user_based=False, ).run()
print(gs_bpr.best_params) print(rs_bpr.best_params)
|