作者:SETHNEHA
翻译:王可汗
校对:陈丹
本文约3200字,建议阅读15分钟
本文为大家介绍多项式回归中的梯度下降算法。
关键词:梯度下降、多项式回归、模型优化
梯度下降是一个需要理解的重要算法,因为它是机器学习和深度学习中使用的许多更先进算法的基础。因此,掌握梯度下降的内部工作原理对任何计划进一步探索机器学习算法的人来说都是非常有益的。
最好的学习方法是实践,因此在本文中,我将一步步介绍梯度下降过程是如何工作的,而不使用像scikit-learn这样的ML库。在日常工作中,使用这些库当然会更快、更简洁,但在学习过程中,我发现手工实现对这个特定算法来说是非常宝贵的。
梯度下降的目标
梯度下降的目标是最小化模型预测与原始数据间的误差。在本文的背景下,我们将着眼于二次多项式模型,也称为二次方程:
将二阶多项式画出来后, 看起来是这样的:
多项式回归
我们这里专门观察多项式回归, 即自变量x与因变量y之间的关系被建模为x的n阶多项式。简单地说,我们的二次多项式的系数a、b、c将被估计、评价和修改,直到我们可以将线准确地拟合到输入的x数据上。梯度下降是这个过程中的优化步骤,它修改和优化这些系数的值。
现在,我们将看看如何创建和绘制这样的曲线,并建立一个初始模型来拟合这个数据,然后我们将使用梯度下降来优化和改进它。如果我们能得到一个可以准确描述数据的模型,希望它能够准确预测另一组x值的y值。
我们可以开始为二次多项式方程(????????²+????????+????)选择系数,并应用到我们将尝试建模的数据:
coeffs = [2,-5, 4]
这将是我们希望我们的预测模型尽可能接近的真值模型的系数[5] 。接下来,我们需要一个二次多项式的评估函数,在给定一组系数和给定输入????的情况下,返回相应的????。
def eval_2nd_degree(coeffs, x):
"""
Function to return the outputof evaluating a second degree polynomial,
given a specific x value.
Args:
coeffs: List containingthe coefficients a,b, and c for the polynomial.
x: The input x value tothe polynomial.
Returns:
y: The correspondingoutput y value for the second degree polynomial.
"""
a = (coeffs[0]*(x*x))
b = coeffs[1]*x
c = coeffs[2]
y = a+b+c
return y
当x=3时,我们可以看看它的作用:
coeffs = [2, -5, 4]
x=3
eval_2nd_degree(coeffs, x)
7
创建数据和基础模型
定义一些x数据(输入),我们希望预测y(输出):
import numpy as np
import matplotlib.pyplot as plt
hundred_xs=np.random.uniform(-10,10,100)
print(hundred_xs)
x_y_pairs = []
for x in hundred_xs:
y =eval_2nd_degree(coeffs, x)
x_y_pairs.append((x,y))
xs = []
ys = []
for a,b in x_y_pairs:
xs.append(a)
ys.append(b)
plt.figure(figsize=(20,10))
plt.plot(xs, ys, 'g+')
plt.title('Original data')
plt.show()