【发布时间】:2018-07-14 03:23:51
【问题描述】:
我正在尝试理解梯度下降算法。
这里的代码应该选择一个更优化的最佳拟合线,给定另一条最佳拟合线。该函数将当前最佳拟合线的斜率和 y 截距作为输入,以及一个名为“点”的二维数据集和一个 learningRate。这是我正在使用的代码:
def step_gradient(b_current, m_current, points, learningRate):
b_gradient = 0 #Initialize b_gradient to 0
m_gradient = 0 #Initialize m_gradient to 0
N = float(len(points)) #Let N be the number of data points
for i in range(0, len(points)): #Iterate through dataset "Points"
x = points[i,0]
y = points[i,1]
b_gradient += -(2/N) * (y - ((m_current * x) + b_current)) #gradient is calculated as the derivative
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)
return[new_b, new_m]
但是我不明白 for 循环内部发生了什么。
我知道 for 循环的前两行将迭代地将 x 和 y 分配给名为“points”的数据集中的下一个数据点。
我不明白 b_gradient 和 m_gradient 是如何计算的。
据我了解,b_gradient 是数据集中每个点关于 b 的所有偏导数之和。但是,我真正的问题是 line:
b_gradient += -(2/N) * (y - ((m_current * x) + b_current))
计算关于 b 的偏导数?
-(2/N) 是干什么用的??
谁能解释一下这行代码到底是如何表示这个数据集中一个点相对于 b 的偏导数?
m_gradient 也有同样的困惑。
【问题讨论】:
标签: python machine-learning artificial-intelligence gradient-descent