Scikit-learn自定义评分函数需要数据集中除X和y外的值
我正在尝试根据历史体育博彩的表现来评估一个模型。
我有一个数据集,里面包含以下几列:
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
目前没有办法做到这一点,抱歉。你可以自己写一个循环来处理交叉验证的折叠,这应该不难。不过,你不能使用 GridSearchCV
或 cross_val_score
来实现这个。