コード例 #1
0
def solve(cols, W, penalty, par, parvalue):
    P = len(cols)
    N = len(cols[0])
    norm = eval("norm" + penalty)
    normFUN = eval("n" + penalty)
    normQX = 0.0
    SUMDIFF = 0.0
    X = matrix([list(x) for x in cols], (N * P, 1))
    alpha = optvar("alpha", N * P)
    PARAM = float(parvalue)
    for i in range(N):
        for j in range(i + 1, N):
            w = W[i][j]
            q = matrix(0.0, (1, N))
            q[i] = 1
            q[j] = -1
            Qij = getQij(q, P)
            SUMDIFF += norm(Qij * alpha) * w
            xidiff = [cols[k][i] - cols[k][j] for k in range(P)]
            normQX += normFUN(xidiff) * w
    from cvxmod.atoms import sum, square
    ## TDH alternate parameterization
    ##penalty_norm = 1.0/float(N*(N-1))
    ##SUMDIFF *= penalty_norm
    ##normQX  *= penalty_norm
    ##error=(0.5/N)*sum(square(X-alpha))
    error = 0.5 * sum(square(X - alpha))
    problems = {
        "lambda": (error + PARAM * SUMDIFF, []),
        "s": (error, [SUMDIFF * (1 / normQX) <= PARAM]),
    }
    tomin, constraint = problems[par]
    p = problem(minimize(tomin), constraint)
    p.solve()
    return alpha
コード例 #2
0
ファイル: cluster.py プロジェクト: fengyinyang/clusterpath
def solve(cols,W,penalty,par,parvalue):
    P=len(cols)
    N=len(cols[0])
    norm=eval("norm"+penalty)
    normFUN=eval("n"+penalty)
    normQX=0.0
    SUMDIFF=0.0
    X=matrix([list(x) for x in cols],(N*P,1))
    alpha=optvar("alpha",N*P)
    PARAM=float(parvalue)
    for i in range(N):
        for j in range(i+1,N):
            w=W[i][j]
            q=matrix(0.0,(1,N))
            q[i]=1
            q[j]=-1
            Qij=getQij(q,P)
            SUMDIFF+= norm(Qij*alpha)*w
            xidiff=[cols[k][i]-cols[k][j] for k in range(P)]
            normQX += normFUN(xidiff)*w
    from cvxmod.atoms import sum,square
    ## TDH alternate parameterization
    ##penalty_norm = 1.0/float(N*(N-1))
    ##SUMDIFF *= penalty_norm
    ##normQX  *= penalty_norm
    ##error=(0.5/N)*sum(square(X-alpha))
    error=0.5*sum(square(X-alpha))
    problems={
        "lambda":(error+PARAM*SUMDIFF,[]),
        "s":(error,[SUMDIFF*(1/normQX) <= PARAM]),
        }
    tomin,constraint=problems[par]
    p=problem(minimize(tomin),constraint)
    p.solve()
    return alpha
コード例 #3
0
def n1(V):
    return sum([abs(x) for x in V])
コード例 #4
0
def sum_squares(V):
    return sum([x**2 for x in V])
コード例 #5
0
ファイル: cluster.py プロジェクト: fengyinyang/clusterpath
def sum_squares(V):
    return sum([x**2 for x in V])
コード例 #6
0
ファイル: cluster.py プロジェクト: fengyinyang/clusterpath
def n1(V):
    return sum([abs(x) for x in V])