Минимизировать функцию - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть списки значений Y и X, и я хочу свести к минимуму эту функциюначать поиск (0,01604 = Theta2, 1,143 = Theta1, 1,537 = Theta0)

Я понимаю функцию Хубера

def Huber(l,delta):

    if m.fabs(l)<=delta:
        return 1/2*(l)**2
    else:
        return delta*m.fabs(l)-1/2*delta**2

Затем я пытаюсь

def my_function(start, X, y):
    Theta0, Theta1, Theta2 = start
    u = Huber((y - (Theta0 + Theta1*X+Theta2*X*X)),7)
    return u

optimized = minimize(my_function(start, X, y), start)

И иметь

TypeError: cannot convert the series to <class 'float'>

Как правильно сделать?

1 Ответ

3 голосов
/ 28 сентября 2019

Просто предоставьте список с вашей отправной точкой:

start = [1.537, 1.143, 0.01604]

А затем используйте SciPy's optimize ( документы ):

from scipy.optimize import minimize

def my_function(args):
    Theta0, Theta1, Theta2 = args
    # here return the value of the function

optimized = minimize(my_function, start)

В приведенном вышеTheta0, Theta1 и Theta2 - переменные.Из вопроса не ясно, являются ли они постоянными.Если это так, просто используйте приведенный выше код в качестве шаблона и распакуйте начальную точку в переменные, например,

from scipy.optimize import minimize

start = [1, 1]

def my_function(args):
    X, y = args # Thetas constant
    # here return the value of the function

optimized = minimize(my_function, start)

Примечание. Вы должны передавать только имя функции, а не вызов функции, т.е.

minimize(my_function, start) # works
minimize(my_function(....), start) # doesn't work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...