微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 CVXPy 中使用逻辑函数时溢出

如何解决在 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 举报,一经查实,本站将立刻删除。