网格搜索加权AUC

时间:2016-01-07 20:16:36

标签: scikit-learn grid-search auc

所以我使用的是样本权重函数,我不想使用默认的sklearn评分函数来衡量性能。

看起来Here我可以传递GridSearchCV字符串'roc_auc',它应该为我计算auc但是它计算的auc是加权auc还是只是一个香草auc?

1 个答案:

答案 0 :(得分:4)

感谢书呆子狙击。

我精心设计了一个二进制分类数据集来测试这个问题。

x y weight 
0 0   1
1 1   1
<repeated 25 times>
0 1   0
1 0   0
<repeated 25 times>

使用python:

X = np.array([[0], [1]] * 25 +  [[0], [1]] * 25)
y = np.array([ 0 ,  1 ] * 25 +  [ 1 ,  0 ] * 25)
w = np.array([ 1 ,  1 ] * 25 +  [ 0 ,  0 ] * 25)

在这个数据集中,我们可以看到,如果存在样本权重,模型将产生非常好的拟合并且具有非常低的对数损失。如果不存在重量,则损失将非常高。

然后我们可以构建使用GridSearchCV来查看是否使用了权重。

clf = LogisticRegression(solver='newton-cg', C=100)
gs = GridSearchCV(clf, {},
                  fit_params={"sample_weight": w}, 
                  scoring="log_loss", cv=KFold(y.shape[0],10, shuffle=True))
gs.fit(X,y)
gs.grid_scores_

[mean: -2.68562, std: 0.68038, params: {}]

我们可以看到损失相当高,这表明不使用权重。

我为scikit写了一个补丁 - 学会解决这个问题。请考虑它是实验性的。 https://github.com/scikit-learn/scikit-learn/compare/master...dmaust:master

应用补丁后,我们可以启用score_sample_weight,重复上一次测试,并且可以看到我们对所考虑的权重所期望的日志损失。

gs.score_sample_weight=True
gs.fit(X,y)
gs.grid_scores_

[mean: -0.00486, std: 0.00016, params: {}]