第六章 梯度下降法 学习笔记 上

目录

6-1 什么是梯度下降法

6-2 模拟实现梯度下降法

6-3 线性回归中的梯度下降法


6-1 什么是梯度下降法

第六章 梯度下降法 学习笔记 上_第1张图片

第六章 梯度下降法 学习笔记 上_第2张图片

 

第六章 梯度下降法 学习笔记 上_第3张图片

第六章 梯度下降法 学习笔记 上_第4张图片

加负号则J减小

图中导数为负值,则J增加的方向在x轴的负方向,也就是theta减小的,我们希望找到最小值,所以应该向减小的方向移动则加负号,其会向减小的方向移动

移动的步长乘以yita

第六章 梯度下降法 学习笔记 上_第5张图片

不等于0,继续求导向导数的反方向移动 

第六章 梯度下降法 学习笔记 上_第6张图片

对于多维函数中,要对各个方向求导,则就是梯度

第六章 梯度下降法 学习笔记 上_第7张图片

上图中也一样,导数为正,则表示J增加的方向,加负号表示向减小的方向,其公式不变

梯度下降法像在模拟一个小球在坡上滚动

第六章 梯度下降法 学习笔记 上_第8张图片

第六章 梯度下降法 学习笔记 上_第9张图片

如果yita太大,则其跳动太大,损失函数没有下降反而增大了

第六章 梯度下降法 学习笔记 上_第10张图片

并不是所有的函数都有唯一的极值点

第六章 梯度下降法 学习笔记 上_第11张图片

有可能找到局部最优解,其和初始点的选择有关

第六章 梯度下降法 学习笔记 上_第12张图片

第六章 梯度下降法 学习笔记 上_第13张图片

这一小节不需要重复多次找合理的点

6-2 模拟实现梯度下降法

第六章 梯度下降法 学习笔记 上_第14张图片

第六章 梯度下降法 学习笔记 上_第15张图片

def J(theta):
    return (theta-2.5)**2 - 1.

def dJ(theta):
    return 2*(theta-2.5)

theta = 0.0
while True:
    gradient = dJ(theta)
    last_theta = theta
    theta = theta - eta * gradient
    
    if(abs(J(theta) - J(last_theta)) < epsilon):
        break
    
print(theta)
print(J(theta))

第六章 梯度下降法 学习笔记 上_第16张图片

theta = 0.0
theta_history = [theta]
while True:
    gradient = dJ(theta)
    last_theta = theta
    theta = theta - eta * gradient
    theta_history.append(theta)
    
    if(abs(J(theta) - J(last_theta)) < epsilon):
        break

plt.plot(plot_x, J(plot_x))
plt.plot(np.array(theta_history), J(np.array(theta_history)), color="r", marker='+')
plt.show()

第六章 梯度下降法 学习笔记 上_第17张图片

theta_history = []

def gradient_descent(initial_theta, eta, epsilon=1e-8):
    theta = initial_theta
    theta_history.append(initial_theta)

    while True:
        gradient = dJ(theta)
        last_theta = theta
        theta = theta - eta * gradient
        theta_history.append(theta)
    
        if(abs(J(theta) - J(last_theta)) < epsilon):
            break
            
def plot_theta_history():
    plt.plot(plot_x, J(plot_x))
    plt.plot(np.array(theta_history), J(np.array(theta_history)), color="r", marker='+')
    plt.show()

第六章 梯度下降法 学习笔记 上_第18张图片

第六章 梯度下降法 学习笔记 上_第19张图片

学习率太大,引入异常处理的方法

但这样程序会进入死循环,所以要改进引入迭代次数

第六章 梯度下降法 学习笔记 上_第20张图片

def gradient_descent(initial_theta, eta, n_iters = 1e4, epsilon=1e-8):
    
    theta = initial_theta
    i_iter = 0
    theta_history.append(initial_theta)

    while i_iter < n_iters:
        gradient = dJ(theta)
        last_theta = theta
        theta = theta - eta * gradient
        theta_history.append(theta)
    
        if(abs(J(theta) - J(last_theta)) < epsilon):
            break
            
        i_iter += 1
        
    return

6-3 线性回归中的梯度下降法

第六章 梯度下降法 学习笔记 上_第21张图片

第六章 梯度下降法 学习笔记 上_第22张图片

拓展到了高维空间

以下是两个参数的梯度下降, x,y是参数

第六章 梯度下降法 学习笔记 上_第23张图片

梯度下降的最快

第六章 梯度下降法 学习笔记 上_第24张图片

第六章 梯度下降法 学习笔记 上_第25张图片

现存值与m有关,样本越大,值越大,更好的结果是与样本数无关

没有m分之一,则每一个值会很大

y的预测值与y的真值 

第六章 梯度下降法 学习笔记 上_第26张图片

2,求导时可以约掉

第六章 梯度下降法 学习笔记 上_第27张图片

这节中使用这个公式做为其目标函数

你可能感兴趣的:(机器学习,逻辑回归,python)