使用梯度下降法的线性回归【用编码示例解释】

已发表: 2020-12-21

无论您是立志成为软件开发人员、数据科学家还是数据分析师,机器学习仍在进行。 要在线性回归方面做出认真的努力,您必须精通 Python。 从初始阶段开始可能是一项乏味的任务,本文将帮助您更彻底地了解回归。

梯度下降法因其必须提供的优化技术而在各种迭代中被选择。 使用该算法,减小尺寸是可行的,例如逻辑回归和神经网络。 在开始使用梯度之前,让我们看一下线性回归。

阅读:数据科学的机器学习算法

目录

什么是线性回归?

它是用于对因变量和一个或多个自变量之间的关系建模的线性方法。 此类变量之间的线性关系将以 ay= mx+b 方程格式表示。

它是一种受监控的机器学习算法,它将根据给定的 x 因变量和 y 作为另一个负责引起影响的变量来增强其学习曲线。 这种性质有助于预测 x 和 y 的值和确定性因子。

什么是梯度下降?

梯度回归的使用涉及优化用于找到函数所需参数的值的算法,这能够直接最小化函数的成本。

让我们用一个场景来理解这个概念,假设你想在漆黑的环境中下降一个堡垒。 在此期间,让我们假设您完全残障,需要想出最短和最容易的距离才能回来。 梯度下降将是用于找出到达目的地的最佳方式的资源。 有了基本的方向输入,该算法就可以绘制图表并建议最佳路线。

梯度是机器学习中最常用和被广泛接受的算法之一,它也被认为是在早期阶段掌握机器学习的基础。

为了更好地近似梯度,让我们尝试使用示例中的代码来实现它,在 NumPy 的帮助下使用 python。

从 NumPy 导入 *

# y = mx + b

# m 是斜率,b 是 y 截距

def compute_error_for_line_given_points(b,m,点):

总误差 = 0

对于范围内的 i(0,len(点)):

x = 点数[i, 0]

y = 点数[i, 1]

总误差 += (y – (m * x + b)) ** 2

返回总错误/浮动(len(点))

def step_gradient(b_current, m_current, points, learningRate):

b_gradient = 0

m_gradient = 0

N = 浮动(长度(点))

对于范围内的 i(0,len(点)):

x = 点数[i, 0]

y = 点数[i, 1]

b_gradient += -(2/N) * (y – ((m_current * x) + b_current))

m_gradient += -(2/N) * x * (y – ((m_current * x) + b_current))

new_b = b_current – (learningRate * b_gradient)

new_m = m_current – (learningRate * m_gradient)

返回 [new_b, new_m]

def gradient_descent_runner(点,starting_b,starting_m,learning_rate,num_iterations):

b = 开始_b

m = 开始_m

对于我在范围内(num_iterations):

b, m = step_gradient(b, m, array(points), learning_rate)

返回 [b, m]

定义运行():

点= genfromtxt(“data.csv”,分隔符=“,”)

学习率 = 0.0001

initial_b = 0 # 初始 y 截距猜测

initial_m = 0 # 初始斜率猜测

迭代次数 = 1000

打印“在 b = {0}, m = {1}, error = {2} 处开始梯度下降”.format(initial_b, initial_m, compute_error_for_line_given_points(initial_b, initial_m, points))

打印“正在运行……”

[b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)

打印“经过 {0} 次迭代 b = {1}, m = {2}, error = {3}”.format(num_iterations, b, m, compute_error_for_line_given_points(b, m, points))

如果 __name__ == '__main__':

跑步()

代码参考

这是梯度搜索程序的可视化表示,其中通过将点绘制在一条线上来解决线性回归中的问题。 该代码演示了它的工作原理,并有助于沿一条线设置多个点。 梯度下降试图找到这些与误差函数有关的参数的最佳值。

该代码包含一个标记为“运行”的特殊函数。 它有助于定义算法中使用的一组参数,以根据变量的行为和线斜率进行一组初始预测。 其他因素涉及实现梯度下降所需的迭代次数,格式如下所示:

initial_b = 0 # 初始 y 截距猜测

initial_m = 0 # 初始斜率猜测

迭代次数 = 1000

您可以很容易地理解梯度方法非常简单明了。 一旦您了解了它的功能,那么您唯一需要关注的部分就是您有兴趣优化的功能成本。

目标是不断努力为变量的每个值进行不同的迭代,评估它们的成本,并创建新的变量,从而在程序中启动一个更好和更低的成本。

必读:机器学习面试题

梯度下降技巧

1. 学习率

优化协议有助于降低学习率值,即使是小数点,尝试洗牌适合平台的不同值,然后选择最佳工作值。 学习可以更快,更富有成效,要做到这一点,请确保限制通过每个数据集的次数。 理想的数字在 1 到 10 之间。

2. 绘制平均成本

由于运行算法期间花费的额外时间,每个数据集实例的训练时间可能会导致延迟。 为了获得更好的结果,请选择超过 100 或 1000 的平均值,以获得更好的算法找到更好的学习趋势的几率。

概括

在本文中,您了解了梯度以及如何创建这样的算法,这有助于使用学习的回归模型进行精确且更有效的预测。 要更全面、更深入地了解真实案例场景,请注册 upGrad。 我们提供专为有抱负的数据科学家和机器学习申请者设计的精选课程。

引领人工智能驱动的技术革命

机器学习和人工智能的 PG 文凭
了解更多