簡體   English   中英

當我使用 scipy.optimize.minimize() 最小化它時,為什么我的目標 function 的矩陣參數發生了變化?

[英]Why is a matrix argument of my objective function changed when I minimize it with scipy.optimize.minimize()?

目標函數 我正在嘗試進行時空自動回歸( STAR )。 下面的代碼基本上定義了上面我需要最小化的目標 function ,其中 Y 是 N×K 矩陣,D 是 N×N 矩陣。

import numpy as np
from sys import exit

def obj_func(Y, D, Phi):

    # check what went wrong
    if not D.shape[0]==D.shape[1]:
        print("D =", D)
        exit()
    if not Y.shape[0]==D.shape[0]:
        print("Y =", Y)
        print("D =", D)
        exit()
    if Y.shape[1]<len(Phi):
        print("Y =", Y)
        print("T =", len(Phi)-1)
        exit()

    T = len(Phi) - 1
    N = Y.shape[0]
    K = Y.shape[1]
    c = Phi[0] * np.ones((N,1))

    loss = 0
    for j in range(T,K):
        y = Y[:,j].reshape((N,1))
        v = y - c 
        for tau in range(1,T+1):
            y = Y[:, j-tau].reshape((N,1))
            v = v - Phi[tau] * D.dot(y)
        loss += np.linalg.norm(v)

    return(loss / (K-T))

優化出錯了,所以只添加了第一個塊來檢查究竟是哪一部分出錯了。 我使用scipy.optimize.minimize( )來最小化目標 function。

from scipy.optimize import minimize

def STAR_pm(Y, D, T):
    phi = np.random.normal(loc=0, scale=5, size=T+1)
    result = minimize(obj_func, x0=phi, args=(Y,D,), )
    if not result.success:
        print("No convergence. Try again.")
        exit()
    return(result.x)

但是,當我運行以下命令時,優化失敗並打印出矩陣 D。結果不知何故, Y 已分配給 D ,因此 D 不再是 N×N 矩陣。

Y = np.random.randint(0,10, (3,10))
D = np.random.rand(3,3)

STAR_pm(Y, D, T=2)

我覺得很混亂。 為什么D完全改變了? 這是否發生在其他人身上? 有人幫我嗎?

scipy.optimize.minimize中,目標 function 的第一個參數始終是設計向量。 額外的 arguments 帶有 args,它將被稱為obj_func(x, *args) 從您的示例中,我假設您的設計向量是Phi ,您需要做的就是將目標的簽名重寫為obj_func(Phi, Y, D)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM