scipy optimize не может минимизировать; выдает предупреждение: требуемая ошибка не обязательно достигается из-за потери точности - PullRequest
0 голосов
/ 15 апреля 2020

Я использую BFGS, чтобы минимизировать мою функцию стоимости, оцененную по данным матрицы 5000x400 с известной матрицей вывода 5000x1. Алгоритм, похоже, не сходится. На самом деле, это даже не go за 0 итераций. Я попробовал Nelder-Mead, и это не помогло, так как оно заканчивается итерациями и не сходится.

res= sc.minimize(fun=lrCostFunc.lrCostFunction, x0=initial_theta, args=(X,y,lambdaa),\
                        jac=lrgradFunc.lrgradFunc,tol=1e-6,options={'disp':True})

Моя функция стоимости выглядит следующим образом:

def lrCostFunction(theta, X, y, lambdaa):

    m = y.shape[0] # number of training examples
    J = 0

    t=np.zeros((len(theta),1))
    for i in range(len(theta)):
        t[i,0]=theta[i]

    A=X@t
    h=sigmoid.sigmoid(A)

    J=-(((y.T@(np.log(h)))+((1-y).T@(np.log(1-h))))/m)
    J=float(J)
    for i in range(1,t.shape[0]):
        J+=(lambdaa*(t[i,0]**2))/(2*m)

    return J;

И функция градиента вот так ...

def lrgradFunc(theta, X, y, lambdaa):

    m = y.shape[0] # number of training examples

    t=np.zeros((len(theta),1))
    for k in range(len(theta)):
        t[k,0]=theta[k]

    g = [0]*len(theta)
    grad=np.zeros((len(theta),1))

    A=X@t
    h=sigmoid.sigmoid(A)
    a=h-y

    grad=(X.T@a)/m

    for j in range(1,t.shape[0]):
        grad[j,0]+=(lambdaa*t[j,0])/m

    for i in range(len(g)):
        g[i]=grad[i,0]

    g=np.array(g)

    return g;

В противном случае обе функции работают нормально. Я пробовал несколько вещей, но ничего не работает. Пожалуйста, помогите.

...