Scikit-learn自定义评分函数需要数据集中除X和y外的值

8 投票
1 回答
1621 浏览
提问于 2025-05-01 05:26

我正在尝试根据历史体育博彩的表现来评估一个模型。

我有一个数据集,里面包含以下几列:

feature1 | ... | featureX | oddsPlayerA | oddsPlayerB | winner

这个模型会进行回归分析,输出的是玩家A赢得比赛的赔率。

我了解到,我可以使用一个自定义评分函数,来计算如果每次满足某个条件就下注,模型会赚多少钱,并用这个值来衡量模型的好坏。这个条件大概是这样的:

if prediction_player_A_win_odds < oddsPlayerA
   money += bet_playerA(oddsPlayerA, winner) 
if inverse_odd(prediction_player_A_win_odds) < oddsPlayerB
   money += bet_playerB(oddsPlayerB, winner) 

在自定义评分函数中,我需要接收一些常规参数,比如“ground_truth, predictions”(其中,ground_truth是赢家数组,predictions是玩家A的胜利赔率数组)但还需要从数据集中获取“oddsPlayerA”和“oddsPlayerB”这两个字段(这就是问题所在!)。

如果自定义评分函数接收到的数据顺序和原始数据集完全一致,那就很简单,可以直接从数据集中获取所需的额外数据。但实际上,当使用交叉验证方法时,获取到的数据顺序是混乱的(和原始数据相比)。

我尝试了最明显的方法,就是传递y变量,包含[oddsA, oddsB, winner](维度为[n, 3]),但scikit不允许这样做。

那么,我该如何将数据集中的数据传递到自定义评分函数中,这些数据既不是X也不是y,但仍然是“按顺序关联”的呢?

暂无标签

1 个回答

4

目前没有办法做到这一点,抱歉。你可以自己写一个循环来处理交叉验证的折叠,这应该不难。不过,你不能使用 GridSearchCVcross_val_score 来实现这个。

撰写回答