求解
y
=
w
∗
x
+
b
+
e
p
s
y = w*x+b + eps
y=w∗x+b+eps最小值
给出x,y的大量测试点,预测出w和b
步骤
将方程式转化为
l
o
s
s
=
(
w
∗
x
+
b
)
2
loss=(w*x+b)^2
loss=(w∗x+b)2,由于有大量的测试点,可以求出loss的均值avg来表示。(这就是求解loss函数的式子)
求梯度信息 1.
w
′
=
w
−
l
r
∗
∇
l
o
s
s
∇
w
w' = w - lr * \frac{\nabla loss}{\nabla w}
w′=w−lr∗∇w∇loss(lr是learningRate学习率) 2.
b
′
=
b
−
l
r
∗
∇
l
o
s
s
∇
b
b' = b - lr * \frac{\nabla loss}{\nabla b}
b′=b−lr∗∇b∇loss
给定迭代次数来求取目标解[b,w]
code
# 求解loss = (wx+b-y)^2import numpy as np
defcompute_error_for_line_given_points(b,w,points):
totalError =0for i inrange(0,len(points)):
x = points[i,0]
y = points[i,1]
totalError +=(w * x + b - y)**2return totalError /float(len(points))# 计算梯度信息loss = (wx+b-y)^2# 对w求偏导: 2*(wx+b-y)*x# 对b求偏导: 2*(wx+b-y)# 求解迭代的w' = w - lr * (loss/w)(w对loss的偏导)# 求解迭代的b' = b - lr * (loss/b)(b对loss的偏导)defstep_gradient(b_current,w_current,points,learningRate):
b_gradient =0
w_gradient =0
N =float(len(points))for i inrange(0,N):
x = points[i,0]
y = points[i,1]
w_gradient +=(2/N)*(w_current * x + b_current - y)* x #求w'的avg
b_gradient +=(2/N)*(w_current * x + b_current - y)#求b'的avg
new_b = b_current -(learningRate * b_gradient)
new_w = w_current -(learningRate * w_gradient)return[new_b,new_w]# 循环迭代梯度信息,num_iterations(迭代的次数)defgradient_descent_runner(points,starting_b,starting_w,learning_rate,num_iterations):
b = starting_b
w = starting_w
for i inrange(num_iterations):
b,w = step_gradient(b,w,np.array(points),learning_rate)return[b,w]# 找到比较优的解