美文网首页
使用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