python成对设置

2024-09-27 21:34:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在XGBoost中,我尝试了多种方法使成对组与组集一起工作,但是没有成功。下面的代码在使用set_group时不起作用,但是在set_group注释掉xgbTrain时可以使用

import xgboost
import pandas as pd
from xgboost import DMatrix,train

xgb_params ={    
    'booster' : 'gbtree',
    'eta': 0.1,
    'gamma' : 1.0 ,
    'min_child_weight' : 0.1,
    'objective' : 'rank:pairwise',
    'eval_metric' : 'merror',
    #'num_class': 3,  # 
    'max_depth' : 6,
    'num_round' : 4,
    'save_period' : 0 
}


n_group=2
n_choice=3    

#training dataset

dtrain=np.random.uniform(0,100,[n_group*n_choice,2])    
dtarget=np.array([np.random.choice([0,1,2],3,False) for i in range(n_group)]).flatten()
dgroup=np.array([np.repeat(i,3)for i in range(n_group)]).flatten()

xgbTrain = DMatrix(dtrain, label = dtarget)
xgbTrain =xgbTrain.set_group(dgroup)

#watchlist

dtrain_eval=np.random.uniform(0,100,[n_group*n_choice,2])        

xgbTrain_eval = DMatrix(dtrain_eval, label = dtarget)
#xgbTrain_eval =xgbTrain_eval .set_group(dgroup)

#test dataset

dtest=np.random.uniform(0,100,[n_group*n_choice,2])    
dtestgroup=np.array([np.repeat(i,3)for i in range(n_group)]).flatten()

xgbTest = DMatrix(dtest)
#xgbTest =xgbTest.set_group(dgroup)
evallist  = [(xgbTrain_eval, 'eval')]

rankModel = xgboost.train(params=xgb_params,dtrain=xgbTrain  )
print(rankModel.predict( xgbTest))

返回的错误似乎指出缺少eval数据,但甚至将eval指定为

^{pr2}$

错误仍然存在。在

注意num_class被注释掉了,但是直觉上它应该有一个值3(这里对应于类的数量)或者2(对于成对排序的情况下的组数)?在

有什么能帮你指出问题的吗?在

(xG增压0.6)


Tags: importevalnpgrouprandomparamsnumset
1条回答
网友
1楼 · 发布于 2024-09-27 21:34:10

错误: 我是说,set AU组不正确,应该是

     xgbTrain.set_group(dgroup)

而不是

^{pr2}$

解决方案:

set_group中的数据应该是每组每个项目的计数,每组有一个项目。在

      dgroup=np.array([n_choice for i in range(n_group)]).flatten()

那就成功了!在

相关问题 更多 >

    热门问题