Python NDCG作为带有GridSearchCV和分层数据的评分函数?

Python NDCG作为带有GridSearchCV和分层数据的评分函数?,python,scikit-learn,grid-search,Python,Scikit Learn,Grid Search,我正在学习排序任务,数据集有一列thread\u id,这是一个组标签(分层数据)。 在评估阶段,我必须考虑到这些组,因为我的评分功能是以每线程的方式工作的(例如) 现在,如果我使用签名记分器(估计器,X,y)实现nDCG,我可以轻松地将其传递给as记分函数,如下例所示: def my_nDCG(estimator, X, y): # group by X['thread_id'] # compute the result return result splitter

我正在学习排序任务,数据集有一列
thread\u id
,这是一个组标签(分层数据)。 在评估阶段,我必须考虑到这些组,因为我的评分功能是以每线程的方式工作的(例如)

现在,如果我使用签名
记分器(估计器,X,y)
实现nDCG,我可以轻松地将其传递给as记分函数,如下例所示:

def my_nDCG(estimator, X, y):
    # group by X['thread_id']
    # compute the result
    return result

splitter = GroupShuffleSplit(...).split(X, groups=X['thread_id'])
cv = GridSearchCV(clf, cv=splitter, scoring=my_nDCG)
通过调用
my\u nDCG()
选择模型。 不幸的是,在
myndcg
中,X没有
thread\u id
列,因为它必须在将X传递到
fit()
之前删除,否则我将使用
thread\u id
作为特性来训练模型

cv.fit(X.drop('best_answer', axis=1), y)
如果没有将
thread\u id
作为
global
分开,并将其与
my\u nDCG()中的X合并,我怎么能做到这一点呢

使用scikit learn还有其他方法吗?我看到scikit支持分层数据,但当涉及到分层数据的模型评估时,它似乎缺少适当的支持

编辑 刚刚注意到接受了一个
groups
参数,在我的例子中,它仍然是
X['thread\u id']

此时,我只需要在自定义评分函数中读取该参数。怎么做?

你能提供更多的细节吗?为什么
thread\u id
会被删除?对于给定的度量,这有多重要?为什么您不能将
线程id
存储在本地,并在必要时使用拆分器提供的列车测试索引进行索引?我已经重写了这个问题。是的,存储线程id并在评分函数中使用它似乎是可行的@Grr