我可以在R
使用中训练逻辑回归
glm(y ~ x, family=binomial(logit)))
但是,IIUC可以优化对数可能性。
有没有办法使用线性()损失函数(在这种情况下与总变化距离相同)来训练模型?
即,给定一个数值向量和一个位(逻辑)向量,我想构造一个单调(实际上是增加的)函数,使得被最小化。
也可以看看
我可以在R
使用中训练逻辑回归
glm(y ~ x, family=binomial(logit)))
但是,IIUC可以优化对数可能性。
有没有办法使用线性()损失函数(在这种情况下与总变化距离相同)来训练模型?
即,给定一个数值向量和一个位(逻辑)向量,我想构造一个单调(实际上是增加的)函数,使得被最小化。
也可以看看
Answers:
您不想要做的事情并不存在,因为缺少更好的单词,它在数学上是有缺陷的。
但是首先,我将强调为什么我认为您提出问题的前提是正确的。然后,我将尝试解释为什么我认为您从中得出的结论基于对逻辑模型的误解,最后,我将提出另一种方法。
我将表示您在p维空间( x的第一项)中的n个观测值(粗体字母表示矢量)是1)p<Ñ, ÿ 我 ∈[0,1]和 ˚F( X是 x的单调函数,像逻辑曲线那样说来修正想法。为方便起见,我将只是假设 ñ是足够比较大的 p。
您是正确的,如果您打算使用TVD作为评估拟合模型的标准,那么可以合理地期望您的拟合在所有可能的候选数据中对同一标准进行优化。因此
问题是误差项: 以及如果我们强制 E (ϵ(我们只是希望我们的模型是渐近无偏的),则 ϵ i必须是异方差的。这是因为 y 我只能取两个值0和1。因此,给定 x , ϵ i也只能取两个值:1−f( x当 ÿ 我 = 1,这与发生概率 ˚F (X,以及 - ˚F (X当 ÿ 我 = 1,这与发生概率 1 - ˚F (X。
这些考虑因素共同暗示:
因此不是恒定的而是凹的抛物线形,并且在 x时最大化使得 E (y | x。
残差的这种固有的异方差具有后果。它暗示着,当最小化损失函数时,您会渐进地使样本的一部分过重。也就是说,拟合的β完全不适合数据,而仅适合聚集在 x周围的部分使得 E (y。也就是说,这些是样本中信息最少的数据点:它们对应于噪声分量最大的那些观测值。因此,您的适合度被拉向 β,例如由无关。
从上面的论述可以清楚地看出,一种解决方案是放弃无偏性的要求。一种偏向估计量的流行方法(附加了一些贝叶斯解释)是包括收缩项。如果我们重新缩放响应:
我不确定为什么您要对限制在0和1之间的值使用L1损失。根据您的目标,您可能需要考虑类似于铰链损失的事情,这类似于一个方向上的L1损失和平坦的损失。在另一个。
无论如何,下面的代码应该可以满足您的要求。注意,最佳响应基本上是一个阶跃函数。
set.seed(1)
# Fake data
x = seq(-1, 1, length = 100)
y = rbinom(100, plogis(x), size = 1) # plogis is the logistic function
# L1 loss
loss = function(y, yhat){
sum(abs(y - yhat))
}
# Function to estimate loss associated with a given slope & intercept
fn = function(par){
a = par[1]
b = par[2]
loss(y = y, yhat = plogis(a + b * x))
}
# Find the optimal parameters
par = optim(
par = c(a = 0, b = 0),
fn = fn
)$par
# Plot the results
plot(y ~ x)
curve(plogis(par[1] + par[2] * x), add = TRUE, n = 1000)
您可以使用glmnet软件包来安装L1,L2模型。它不仅限于逻辑回归,还包括它。
这是小插图:http : //web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
还有一个网络研讨会:https : //www.youtube.com/watch? v = BU2gjoLPfDc
Liblinear很好,但是我发现glmnet更容易上手。Glmnet包含执行交叉验证并根据不同的度量标准(例如AUC)为您选择正则化参数的函数。
关于理论,我将阅读有关套索(L1正则化)的tibshiarini论文以及统计学习元素中的这一章。 http://statweb.stanford.edu/~tibs/lasso/lasso.pdf
关于对数丢失,仅用于评估模型。这不是模型拟合的损失函数。