首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CVX/CVXPY求解L2正则化logistic回归

用CVX/CVXPY求解L2正则化logistic回归
EN

Stack Overflow用户
提问于 2015-05-16 16:49:38
回答 1查看 3K关注 0票数 1

我已经尝试了2-3天让L2正则化的logistric回归在Matlab (CVX)和Python(CVXPY)中工作,但没有成功。我对凸优化相当陌生,所以我很沮丧。下面是我使用CVX/CVXPY试图解决的方程。我从admm.pdf的论文中提取了这个方程

我的Matlab (CVX)代码是

代码语言:javascript
复制
function L2
m = 800; N = 5;
lambda =0.000001;

A = load('/path/to/training/file'); 
b= A(:,6); //Label Matrix (800x1)
A = A(:,1:5); //Feature matrix (800x5)

cvx_begin
    variable x(N)
    minimize( (1/m * sum( log(1+ exp(-1* A' * (b * x')) ) ) ) + lambda*(norm(x,2)))

cvx_end

CVX返回一个错误的说法,这是有意义的,但本文提到了上述方程。我该怎么解决呢?

你的目标函数不是标量。

在Matlab上尝试之后,我尝试了CVXPY。这里是python代码

代码语言:javascript
复制
from cvxopt import solvers, matrix,log, exp,mul
from cvxopt.modeling import op,variable
import numpy as np

n = 5
m=800
data = np.ndarray(shape=(m,n), dtype=float,)
bArray = []

file = open('/path/to/training/file')

i = 0;
j=0;
for line in file:
    for num in line.split():
        if(j==5):
            bArray.append(float(num))
        else:
            data[i][j] = num
            j = j + 1

    j=0
    i = i + 1

A = matrix(data)
b_mat= matrix(bArray)
m, n = A.size


lamb_default = 0.000001

x=variable(n)

b = -1*b_mat
w = exp(A.T*b*x)
f = (1/m) + sum(log(1+w)) + lamb_default*mul(x,x)

lp1 = op(f)
lp1.solve()
lp1.status
print(lp1.objective.value())

我知道错误了

TypeError:不兼容尺寸

所以,我的问题是:在CVX/CVXPY中计算L2问题的代码中,我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-16 20:35:14

MATLAB代码的目标是输出一个向量,而不是一个数字(标量)。改为:

代码语言:javascript
复制
(1/m * sum( log(1+ exp(-b.* (A * x)) ) ) )

它将返回一个数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30278323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档