线性回归+梯度下降
import numpy
def compute_error_for_line_given_points ( b, w, points) :
totalError = 0
for i in range ( 0 , len ( points) ) :
x = points[ i, 0 ]
y = points[ i, 1 ]
totalError += ( y - ( w* x + b) ) ** 2
return totalError / float ( len ( points) )
def step_gradient ( b_current, w_current, points, learningRate) :
b_gradient = 0
w_gradient = 0
for i in range ( 0 , len ( points) ) :
x = points[ i, 0 ]
y = points[ i, 1 ]
b_gradient += - ( 2 / N) * ( y - ( ( w_current* x) + b_current) )
w_gradient += - ( 2 / N) * x* ( y - ( ( w_current* x) + b_current) )
new_b = b_current - ( learningRate* b_gradient)
new_w = w_current - ( learningRate* w_gradient)
return [ new_b, new_w]
def gradient_descent_runner ( points, starting_b, starting_w, learningRate, num_iter) :
b = starting_b
w = starting_w
for i in range ( num_iter) :
b, w = step_gradient( b, w, np. array( points) , learningRate)
return [ b, w]
def run ( ) :
points = np. genformtxt( 'data.csv' , delimiter= ',' )
learningRate = 0.0001
initial_b = 0
initial_w = 0
num_iter = 100
[ b, w] = gradient_descent_runner( points, initial_b, initial_w, learningRate, num_iter)
print ( 'After {0} iteration b = {1}, m = {2}, error={3}' . format ( num_iter, b, w,
compute_error_for_line_given_points( b, w, points) ) )
if __name__ == '__main__' :
run( )