python线性回归实例 python一元线性回归分析代码( 二 )


同样,梯度下降的目标是最小化函数 。在我们的例子中,这是为了使我们的模型的成本最小化 。它通过找到函数的切线并朝那个方向移动来实现这一点 。算法“步长”的大小是由已知的学习速率来定义的 。这基本上控制着我们向下移动的距离 。使用此参数,我们必须注意两种情况:

  1. 学习速率太大,算法可能无法收敛(达到最小值)并在最小值附近反弹,但永远不会达到该值
  2. 学习率太小,算法将花费太长时间才能达到最小值,也可能会“卡”在一个次优点上 。
我们还有一个参数,它控制算法迭代数据集的次数 。
从视觉上看,该算法将执行以下操作:
由于此算法对机器学习非常重要,让我们回顾一下它的作用:
  1. 随机初始化权重 。这叫做随机初始化
  2. 然后,模型使用这些随机权重进行预测
  3. 模型的预测是通过成本函数来评估的
  4. 然后模型运行梯度下降,找到函数的切线,然后在切线的斜率上迈出一步
  5. 该过程将重复N次迭代,或者如果满足某个条件 。
梯度下降法的优缺点优点:
  1. 很可能将成本函数降低到全局最小值(非常接近或=0)
  2. 最有效的优化算法之一
缺点:
  1. 在大型数据集上可能比较慢,因为它使用整个数据集来计算函数切线的梯度
  2. 容易陷入次优点(或局部极小值)
  3. 用户必须手动选择学习速率和迭代次数,这可能很耗时
既然已经介绍了梯度下降,现在我们来介绍标准方程 。
标准方程(Normal Equation)如果我们回到我们的例子中,而不是一步一步地往下走,我们将能够立即到达底部 。标准方程就是这样 。它利用线性代数来生成权重,可以在很短的时间内产生和梯度下降一样好的结果 。
标准方程的优缺点优点
  1. 无需选择学习速率或迭代次数
  2. 非常快
缺点
  1. 不能很好地扩展到大型数据集
  2. 倾向于产生好的权重,但不是最佳权重
特征缩放这是许多机器学习算法的重要预处理步骤,尤其是那些使用距离度量和计算(如线性回归和梯度下降)的算法 。它本质上是缩放我们的特征,使它们在相似的范围内 。把它想象成一座房子,一座房子的比例模型 。两者的形状是一样的(他们都是房子),但大小不同(5米!=500米) 。我们这样做的原因如下:
  1. 它加快了算法的速度
  2. 有些算法对尺度敏感 。换言之,如果特征具有不同的尺度,则有可能将更高的权重赋予具有更高量级的特征 。这将影响机器学习算法的性能,显然,我们不希望我们的算法偏向于一个特征 。
为了演示这一点,假设我们有三个特征,分别命名为A、B和C:
  • 缩放前AB距离=>
  • 缩放前BC距离=>
  • 缩放后AB距离=>
  • 缩放后BC的距离=>
我们可以清楚地看到,这些特征比缩放之前更具可比性和无偏性 。
从头开始编写线性回归好吧,现在你一直在等待的时刻;实现!
注意:所有代码都可以从这个Github repo下载 。但是,我建议你在执行此操作之前先遵循教程,因为这样你将更好地理解你实际在编写什么代码:
https://github.com/Vagif12/ML-Algorithms-From-Scratch/blob/main/Linear Regression from Scratch.ipynb
首先,让我们做一些基本的导入:
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import load_boston是的,这就是所有需要导入的了!我们使用的是numpy作为数学实现,matplotlib用于绘制图形,以及scikitlearn的boston数据集 。
# 加载和拆分数据data = https://www.shwenmu.com/wenda/load_boston()X,y = data['data'],data['target']

推荐阅读