梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。
![948cb18a0a55c37db9bcaaeb7660d20a.png](https://img-blog.csdnimg.cn/img_convert/948cb18a0a55c37db9bcaaeb7660d20a.png)
梯度下降的三种方式:批量梯度下降,随机梯度下降,小批量梯度下降,下面我们用python代码实现这三种下降方式!
1.在实现梯度下降之前先做好准备工作.
- 导包
- 随机种子
- 保存图像
- 定义保存图像函数
- 过滤掉讨厌的警告信息
- 导包
import
- 保存图像
#保存图像
- 随机种子
np
- 定义保存图像函数
#定义一个保存图像的函数
- 过滤掉讨厌的警告信息
import
2.在做好准备工作后,我们来定义变量.
import
然后画出图形
plt
结果如下:
![5c87c17bb47bed9eb2cc77112c8c1a82.png](https://img-blog.csdnimg.cn/img_convert/5c87c17bb47bed9eb2cc77112c8c1a82.png)
- 添加新特征
x_b
- 创建测试数据
x_new
- 对测试集进行预测
line_reg
一、用批量梯度下降求解线性回归
eta
结果如下:
![5093e12595f7706fbaf2a6b3e1bdcc98.png](https://img-blog.csdnimg.cn/img_convert/5093e12595f7706fbaf2a6b3e1bdcc98.png)
二、用随机梯度下降求解线性回归
theta_path_sgd
结果如下:
![1f53c59b723f0ee52942049f3a89bd28.png](https://img-blog.csdnimg.cn/img_convert/1f53c59b723f0ee52942049f3a89bd28.png)
from
结果如下:
SGDRegressor(alpha=0.0001, average=False, early_stopping=False, epsilon=0.1,
eta0=0.1, fit_intercept=True, l1_ratio=0.15,
learning_rate='invscaling', loss='squared_loss', max_iter=50,
n_iter_no_change=5, penalty=None, power_t=0.25, random_state=42,
shuffle=True, tol=inf, validation_fraction=0.1, verbose=0,
warm_start=False)
查看截取,斜率
sgd_reg.intercept_,sgd_reg.coef_
结果:(array([4.25857953]), array([2.95762926]))
三、用小批量梯度下降求解线性回归
theta_path_mgd
结果如下:
![38d5196c6697ab8d996bed5e4707ab67.png](https://img-blog.csdnimg.cn/img_convert/38d5196c6697ab8d996bed5e4707ab67.png)
总结:梯度下降对初始值敏感,这种算法根据损失函数求偏导所得。