我可以根据总体的子集指定GBM(或任何ML算法)的损失函数吗



我试图为GBM创建一个损失函数,其中我有两个子种群,比方说按性别划分。除了试图正确预测实际情况外,我还想惩罚模型在一种性别上比另一种性别表现更好的情况。例如,我可能愿意牺牲模型的整体性能,只是为了减少男性和女性假阴性率之间的差异。我找到了为损失函数添加额外参数的解决方案,但我找不到任何基于底层总体特征操纵损失函数的方法。标签y_true,y_pred不会包含这些信息,所以我有办法提供这种区别吗?如有任何见解,我们将不胜感激!

您可以尝试操作数据的权重,如下所述(在"权重数据"部分(。假设你使用的是LightGBM,根据变量应用权重(例如,如果你希望男性的损失值女性损失的一半(,方法如下(Python代码(:


weights = pd.Series(index = ['male', 'female'], data = [0.5, 1])
train_weights = X_train.Gender.replace('male',weights.loc['male']).replace('female',weights.loc['female'])
test_weights = X_test.Gender.replace('male',weights.loc['male']).replace('female',weights.loc['female'])
model = LGBMClassifier()
model.fit(X = X_train, y = y_train, sample_weight = train_weights,
eval_set = (X_test, y_test), eval_sample_weight = [test_weights])

你可以在这里找到更多关于它的信息,并链接到以前的讨论。

最新更新