美文网首页
使用lightgbm做learning to rank

使用lightgbm做learning to rank

作者: _龙雀 | 来源:发表于2019-05-27 17:33 被阅读0次

官方有一个使用命令行做LTR的example,实在是不方便在系统内集成使用,于是探索了下如何使用lightgbm的python API调用lambdarank算法. 而且这种方法不需要提前将数据格式转化为libsvm格式!可以直接利用DataFame格式

import lightgbm as lgb
# 生成group list  官方文档有介绍 
#比如[10 20 30]表示data里面前10个样本属于一个group,其后20个属于一个group,最后30个属于一个group

n_size = 20  #每一个query对应的doc数量 我的每一个group具有相同的doc数量
dgroup_train= np.array([n_size for i in range(5)]).flatten() #[20 20 20 20 20]
dgroup_valid= np.array([n_size for i in range(5)]).flatten() #[20 20 20 20 20]
lgb_train = lgb.Dataset(dtrain, dtrain_y, group = dgroup_train,free_raw_data=False)
lgb_valid = lgb.Dataset(dvalid, dvalid_y, group = dgroup_valid, free_raw_data=False)


lgb_train.set_group(dgroup_train)
lgb_valid.set_group(dgroup_valid)
params =  {
    'objective' : 'lambdarank',
    'boosting_type' : 'gbdt',
    'num_trees' : 30,
    'num_leaves' : 128,
    'feature_fraction' : 0.2,
    'bagging_fraction' : 0.2,
    'max_bin' : 256,
    'learning_rate' : 0.1,
    'metric':'ndcg'
}

gbm = lgb.train(params,
            lgb_train,
            num_boost_round=1500,
            valid_sets=[lgb_train, lgb_valid],
            early_stopping_rounds=150  
)

相关文章

网友评论

      本文标题:使用lightgbm做learning to rank

      本文链接:https://www.haomeiwen.com/subject/mzrraqtx.html