【问题标题】:L1 regularisation in cplexcplex 中的 L1 正则化
【发布时间】:2021-12-13 08:50:48
【问题描述】:

我正在尝试使用 L1 正则化方法进行优化。

但是,我正在使用 cplex,但在使用 cplex 时,我看不到执行 L1 正则化的明显方法。有人可以帮忙吗?

【问题讨论】:

    标签: convex-optimization convex


    【解决方案1】:

    让我从Model Building 中的示例curve fitting 开始

    没有正则化:

    int n=...;
    range points=1..n;
    float x[points]=...;
    float y[points]=...;
    
    
    
    // y== b*x+a
    
    dvar float a;
    dvar float b;
    
    minimize sum(i in points) (b*x[i]+a-y[i])^2;
    
    subject to
    {
    
    }
    
    execute
    {
    writeln("b=",b);
    writeln("a=",a);
    }
    

    套索版本(L1 正则化)将是:

    int n=...;
    range points=1..n;
    float x[points]=...;
    float y[points]=...;
    
    float lambda=0.1;
    
    // y== b*x+a
    
    dvar float a;
    dvar float b;
    
    minimize sum(i in points) (b*x[i]+a-y[i])^2+lambda*(abs(a)+abs(b));
    
    subject to
    {
    
    }
    
    execute
    {
    writeln("b=",b);
    writeln("a=",a);
    }
    

    【讨论】:

    • 谢谢,如果我使用c++,cplex Concert技术是否也支持abs()?
    • 是:IloAbs 返回其参数的绝对值。
    • 嗨,Alex,我在使用上述 abs 时遇到错误。错误说:没有匹配的函数调用 abs。为什么会这样?
    • IloAbs 返回其参数的绝对值。 Concert Technology 提供了预定义的函数,这些函数从表达式上的代数函数返回一个表达式。这些预定义函数还从数值上的代数函数返回数值。 IloAbs 返回其参数的绝对值。提取的内容 IloAb 由 IloCplex 实例提取并自动线性化。
    • 谢谢 Alex,效果很好。
    猜你喜欢
    • 2017-08-26
    • 2015-04-20
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多