这两个函数中两个局部变量b_grad和k_grad的位置,给最终返回的b,k值带来的影响在哪里?


def gradient_descent_runner(b, k):
    # 计算数据总数
    m = float(len(x_data))

    for i in range(epochs):
        # 计算梯度总和求平均
        b_grad = 0
        k_grad = 0
        for j in range(0, len(x_data)):
            b_grad += (1 / m) * ((k * x_data[j] + b) - y_data[j])
            k_grad += (1 / m) * x_data[j] * ((k * x_data[j] + b) - y_data[j])
        # 更新b和k
        b = b - (Ir * b_grad)
        k = k - (Ir * k_grad)

    return b, k

def gradient_descent_runner(b, k):
    # 计算数据总数
    m = float(len(x_data))
    b_grad = 0
    k_grad = 0
    for i in range(epochs):
        # 计算梯度总和求平均

        for j in range(0, len(x_data)):
            b_grad += (1 / m) * ((k * x_data[j] + b) - y_data[j])
            k_grad += (1 / m) * x_data[j] * ((k * x_data[j] + b) - y_data[j])
        # 更新b和k
        b = b - (Ir * b_grad)
        k = k - (Ir * k_grad)

    return b, k

方法一赋值在循环里面,b_grad和g_grad每次循环都会先重置为0,所以最终只有最后一个循环的结果

 

方法二赋值在循环外面,b_grad和g_grad会叠加每次循环的结果,最后得到所有循环的总合