我的特征数据是这样定义的,我相信所有的权重都必须是非负的。我正在寻找一个参考,讨论如何优化逻辑回归分类器的权重,其中权重必须是非负的,也许还有对偏差符号的约束。
用平方权重替换权重并使用带有局部优化方案的常规 ML 成本函数是否有效?
我的特征数据是这样定义的,我相信所有的权重都必须是非负的。我正在寻找一个参考,讨论如何优化逻辑回归分类器的权重,其中权重必须是非负的,也许还有对偏差符号的约束。
用平方权重替换权重并使用带有局部优化方案的常规 ML 成本函数是否有效?
我已经使用投影梯度下降成功地做到了这一点。
该算法非常简单——采取梯度步骤,然后将所有负系数设置为零(即投影到可行集上)。
我从 Leon Bottou 的代码开始:http: //leon.bottou.org/projects/sgd。
如果您熟悉凸优化,我怀疑这可以形式化为二次规划问题(或其他一些凸问题),然后使用 QP 求解器求解。如果您对这个方向感兴趣,我可以进一步详细说明。
无论使用哪种方法,如果问题是凸的(有很多方法可以检查这一点,而且我知道无约束逻辑回归是凸的),则可以保证局部最小值也将是全局最小值。
我可能弄错了,但它似乎是凸的,因为如果原始解空间是凸的并且正解的集合也是凸的(它是一个圆锥),那么新问题将是凸的,因为凸集的交集是凸的。但这是挥手,最好正式检查一下。
您的目标可以使用 R 包“glmnet”来实现。它是 R 中的一个机器学习包,通过惩罚最大似然拟合广义线性模型。但是,它也允许对系数进行约束。这可以用来解决您的问题。欲了解更多详情,请点击以下链接: https ://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
回到您的问题,glmnet 仅适用于矩阵,因此请确保以矩阵形式获取所有数据。创建两个单独的矩阵,一个用于预测变量 (X),另一个用于响应 (Y)。运行以下代码:
library(glmnet)
loReg <- glmnet(x=X, y=Y, family = "binomial", lower.limits = 0, lambda = 0, standardize=TRUE)
上面的行将创建一个惩罚系数为零的逻辑模型(这是你想要的)。由于所有变量的下限都相同(即零),因此设置 lower.limits=0 即可。
预测新的观察:假设你想预测 m 个新的观察。在 mxp 矩阵中获取这些观察结果,其中 p 是预测变量的数量。设这个新观察矩阵为 newX。
predict(loReg, newx = newX, type="response")
希望这会有所帮助。
我已经在这篇博文中回答了这个问题。这是关于添加一些虚拟数据,但真正的解决方案当然是在原始数据中进行投影梯度下降,正如 user1149913 所说。