机器学习之线性回归及python实现
来源:互联网 发布:酒店网络部署方案 编辑:程序博客网 时间:2024/05/17 08:04
python代码实现(数据集:http://download.csdn.net/download/vinsuan1993/10173129):
import numpy as npimport pylabdef compute_error(b,m,data): totalError = 0 #Two ways to implement this #first way # for i in range(0,len(data)): # x = data[i,0] # y = data[i,1] # # totalError += (y-(m*x+b))**2 #second way x = data[:,0] y = data[:,1] totalError = (y-m*x-b)**2 totalError = np.sum(totalError,axis=0) return totalError/float(len(data))#梯度下降def optimizer(data,starting_b,starting_m,learning_rate,num_iter): b = starting_b m = starting_m #迭代次数 for i in range(num_iter): b,m =compute_gradient(b,m,data,learning_rate) if i%100==0: print('iter {0}:error={1}'.format(i,compute_error(b,m,data))) return [b,m]def compute_gradient(b_current,m_current,data ,learning_rate): N = float(len(data)) x = data[:,0] y = data[:,1] b_gradient = -(2/N)*(y-m_current*x-b_current) b_gradient = np.sum(b_gradient,axis=0) m_gradient = -(2/N)*x*(y-m_current*x-b_current) m_gradient = np.sum(m_gradient,axis=0) #update our b and m values using out partial derivations new_b = b_current - (learning_rate * b_gradient) new_m = m_current - (learning_rate * m_gradient) #得到新的参数值 return [new_b,new_m]def plot_data(data,b,m): #plottting x = data[:,0] y = data[:,1] y_predict = m*x+b pylab.plot(x,y,'o') pylab.plot(x,y_predict,'k-') pylab.show()def Linear_regression(): # get train data data =np.loadtxt('data.csv',delimiter=',') #define hyperparamters #learning_rate is used for update gradient #defint the number that will iteration # define y =mx+b learning_rate = 0.001 initial_b =0.0 initial_m = 0.0 num_iter = 1000 #train model #print b m error print('initial variables:\n initial_b = {0}\n intial_m = {1}\n error of begin = {2} \n'.format(initial_b,initial_m,compute_error(initial_b,initial_m,data))) #optimizing b and m [b ,m] = optimizer(data,initial_b,initial_m,learning_rate,num_iter) #print final b m error print('final formula parmaters:\n b = {1}\n m={2}\n error of end = {3} \n'.format(num_iter,b,m,compute_error(b,m,data))) #plot result plot_data(data,b,m)if __name__ =='__main__': Linear_regression()
阅读全文