В рамках моего курса ML ML я изучаю линейную регрессию. Странно, я столкнулся со следующей проблемой, и я не уверен, как решить эту проблему.

Даны два вектора x и y:

x = np.linspace(x_min, x_max,50)
y = np.random.randint(-5/2,5/2, size=50)
y = y + 3 + 2*x 

Мне нужно заполнить код в этих двух методах:

def linear_hypothesis(theta_0, theta_1):
    ''' Combines given arguments in a linear equation and returns it as a function

    Args:
        theta_0: first coefficient
        theta_1: second coefficient

    Returns:
        lambda that models a linear function based on theta_0, theta_1 and x
    ''' 
def mse_cost_function(x, y):
    ''' Implements MSE cost function as a function J(theta_0, theta_1) on given tranings data 

    Args:
        x: vector of x values 
        y: vector of ground truth values y 

    Returns:
        lambda J(theta_0, theta_1) that models the cost function
    '''

Указанные выше функции должны затем вызываться с помощью следующего кода:

j = mse_cost_function(x, y)
print(j(2.1, 2.9))

И это то, что смущает меня. Я не уверен, какой тип возврата должна быть у каждой функции, и я не понимаю, что должна делать эта строка j(2.1, 2.9), поскольку j - это возвращаемое значение этого метода. кто-нибудь может просветить меня? Спасибо за любую помощь!

1
hispaniccoder 23 Окт 2019 в 23:34
Он написан довольно ясно - mse_cost_function должен возвращать функцию (лямбда), поэтому выполнение j(2.1, 2.9) вполне разумно
 – 
Ofer Sadan
23 Окт 2019 в 23:37
В Python функции, как и почти все остальное, являются «объектами первого класса», что означает, что вы можете хранить их в переменных, передавать их как аргументы или возвращать значения других функций и т. д.
 – 
Paul Panzer
24 Окт 2019 в 00:07

1 ответ

Mse_cost_function - это функция, которая возвращает функцию .

лямбда J (theta_0, theta_1), которая моделирует функцию стоимости

Так что j является функцией . как и любая функция (или, в общем, вызываемая), она может получать входные данные (в данном случае две).

Для более простого объяснения, вот функция add_x, которая принимает x и возвращает новую функцию, которая принимает z и вычисляет z + x

def add_x(x):
  return lambda z: z+x


g = add_x(3)
print(type(g))  # -> <class 'function'>
print(g(2))  # 5
1
Lior Cohen 24 Окт 2019 в 00:45