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

时间:2017-04-19 16:39:14

标签: python scikit-learn grid-search

我正在努力学习排名任务,数据集有一列thread_id,这是一个标签(分层数据)。 在评估阶段,我必须考虑这些组,因为我的评分函数以每线程方式工作(例如nDCG)。

现在,如果我使用签名scorer(estimator, X, y)实现nDCG,我可以轻松地将其作为评分函数传递给GridSearchCV,如下例所示:

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)

GridSearchCV通过调用my_nDCG()来选择模型。 不幸的是,在my_nDCG内,X没有thread_id列,因为必须事先将X传递给fit(),否则我会使用thread_id训练模型特征

cv.fit(X.drop('best_answer', axis=1), y)

如果没有可怕的解决方法,thread_idglobal分开,并将其与my_nDCG()内的X合并,我该怎么做呢?

有没有其他方法可以将nDCG与scikit-learn一起使用?我看到scikit支持分层数据,但是当使用分层数据进行模型评估时,似乎缺少适当的支持。

修改

注意到GridSearchCV.fit()接受groups参数,就我而言,它仍然是X['thread_id']。 此时我只需要在自定义评分函数中读取该参数。怎么做?

0 个答案:

没有答案