如何解决在 CVXPy 中使用逻辑函数时溢出
我目前正在开发的一种机器学习方法与逻辑回归方法有关。我想使用 CVXPy(带有 DCCP 扩展名)来解决这个问题。我使用逻辑函数来获得我的错误函数的 DCP 兼容形式,如下所示:
<Style targettype="{x:Type TextBox}">
...
<TextBlock x:Name="SearchTextBlock"
Grid.Column="1"
Foreground="{TemplateBinding Foreground}"
Text="???"
VerticalAlignment="Center"/>
<ScrollViewer Grid.Column="1"
VerticalContentAlignment="Center"
x:Name="PART_ContentHost" />
...
</Style>
问题在于,在优化过程中,# X,s are a feature matrix and binary class vector,respectively,c_estimate is a scalar in [0,1]
...
b = cvx.Variable(n_params)
f2 = cvx.multiply(s,X @ b) - cvx.logistic(X @ b)
f3 = cvx.multiply(s - 1,cvx.logistic(cvx.log(1 - c_estimate) + X @ b))
...
向量中的值变得非常高,进而导致该表达式的指数溢出,从而导致整个优化过程失败:>
X @ b
我使用两种方法在类似方法的代码(不使用 CVXPy)中解决了类似问题:
- 对于大
...\cvxpy\atoms\elementwise\logistic.py:76: RuntimeWarning: overflow encountered in exp exp_val = np.exp(values[0]) ...\cvxpy\atoms\elementwise\logistic.py:77: RuntimeWarning: invalid value encountered in true_divide grad_vals = exp_val/(1 + exp_val)
,您可以将X @ b
替换为X @ b
(元素) - 您可以将
cvx.logistic(X @ b)
剪裁到某个最大值
在 CVXPy 中,我不能使用第二种方法,因为它使我的函数不符合 DCP。我也不知道实现第一个结果的机制。
我怀疑在优化传统逻辑回归函数时也会出现这个问题。我可以使用任何技巧或机制来防止溢出的发生吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。