1.参数要同时更新
2.初始化不同,获得的最小值也不同,即得到的参数也不同,算法收敛到不同的局部最优解。凸函数只有全局最优解,无论如何初始化,不必担心陷入局部最优解
3.越接近最小值时,收敛的速度最逐渐减慢,在学习率不变的情况下,越接近最小值(最优解),偏导数的绝对值会越来越小,所以算法收敛的速度会逐渐的减慢
4.梯度下降求解参数时,如果特征处在相近的范围时(量纲相近)时,算法收敛得更快
5.学习率较小时,算法每一次迭代,损失函数都是在不断减小的,但是如果学习率取值过小就会导致算法收敛需要的迭代次数更多,需要消耗更多的时间;如果发现算法不收敛(损失函数随着迭代次数不断增加或者振荡)(画图),很有可能就是学习率取值偏大所导致的
如何选择合适的学习率:可以绘制损失函数和迭代次数的图像来判断学习率的取之是偏大还是偏小,学习率取一系列值(0.001,0.003,0.01,0.03,0.1,0.3,1.....),不同的学习率对于梯度下降法的影响非常大,选择合适的学习率至关重要
import numpy as np
import random
import matplotlib.pyplot as plt
np.random.seed(10) #设置随机数种子
x=np.random.randint(1,10,100).reshape(100,1)
# x1=(x-x.min())/(x.max()-x.min()) #特征缩放
y=x*5+1
alpha=0.01 #学习率
#一元回归梯度下降
def gd(x,y,alpha):
Cost = [] #损失函数的取值
Count &#