1

L2正規化ロジスティック回帰をMatlab(CVX)およびPython(CVXPY)で機能させるために2〜3日間試みましたが、成功しませんでした。私は凸最適化にかなり慣れていないので、かなりイライラしています。以下は、CVX/CVXPY を使用して解こうとしている方程式です。私は紙からこの方程式を取りまし

ここに画像の説明を入力

私のMatlab(CVX)コードは

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コードがあります

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 問題の計算のコードで何が間違っているのですか?

4

1 に答える 1

1

MATLAB コードの目的は、数値 (スカラー) ではなくベクトルを出力することです。次のように変更します。

(1/m * sum( log(1+ exp(-b.* (A * x)) ) ) )

そして、単一の数値を返します。

于 2015-05-16T20:35:14.883 に答える