问题描述
我的预测变量 (x) 具有与二元结果 (y) 相关的 U 形分布,在 x 的低值和高值时都有积极的结果,导致双凹 roc
曲线下面积较差曲线 (auc
)。
为了最大化其区分结果的能力,我试图通过使用 optim
和 1 - auc
作为最小化成本函数来优化 x 的二阶多项式的参数。
x = c(13,7,1,100,3,4,2,14,8,5,12,13,9,10,6,79,9)
y = c(0,0)
theta = c(0,0)
min_auc <- function(theta,x,y) {
(1 - roc(y,(theta[1] + theta[2]*x + theta[3]*x^2))$auc)
}
optim(theta,min_auc,x = x,y = y)
结果如下:
$par
[1] 0.0 0.1 0.0
$value
[1] 0.4380054
$counts
function gradient
8 NA
$convergence
[1] 0
$message
NULL
但是,根据参数的手动定义,我知道可以进一步最小化 min_auc
。
theta = c(0,-40,1)
(1 - roc(y,(theta[1] + theta[2]*x + theta[3]*(x^2)))$auc)
[1] 0.2762803
谁能向我解释一下我做错了什么?可能是由于非凸成本函数造成的吗?
解决方法
一种可能性是共线性问题。缩放输入有助于:
min_auc <- function(theta,x,y) {
(1 - roc(y,(theta[1] + theta[2]*scale(x) + theta[3]*scale(x)^2))$auc)
}
optim(theta,min_auc,x = x,y = y)
# $par
# [1] -0.02469136 -0.03117284 0.11049383
#
# $value
# [1] 0.2762803
#
# $counts
# function gradient
# 30 NA
#
# $convergence
# [1] 0
#
# $message
# NULL
#
另一个潜在问题是您要优化的表面有一些平坦点。例如,假设我们将这个方程中的截距固定为 -2。这是关于如果您执行qlogis(mean(y))
的结果。然后,您只优化了 2 个参数,以便更容易看到表面。这是两个水平轴上剩余的两个 theta 项和 y 轴上的 1-AUC 值的样子。
min_auc <- function(theta,(-2 + theta[1]*scale(x) + theta[2]*scale(x)^2))$auc)
}
s <- seq(-.25,.25,length=50)
o <- outer(s,s,Vectorize(function(z,w)min_auc(c(z,w),y)))
library(plotly)
plot_ly(x = ~s,y = ~s,z = ~o) %>% add_surface()
正如您在上面可能已经注意到的,该问题没有唯一的解决方案。有很多解似乎达到了最小值。