import numpy as np import matplotlib.pyplot as plt # 读入训练数据 train = np.loadtxt('click.csv',delimiter=',',skiprows=1) train_x = train[:,0] train_y = train[:,1] #参数初始化 theta0 = np.random.rand() theta1 = np.random.rand() #预测函数 def f(x): return theta0 + theta1 * x #目标函数 def E(x,y): return 0.5*np.sum((y-f(x))**2) #标准化 mu=train_x.mean() sigma=train_x.std() def standardize(x): return (x-mu)/sigma train_z = standardize(train_x) #学习率 ETA=1e-3 #误差的差值 diff=1 #更新次数 count=0 #重复学习 error=E(train_z,train_y) while diff>1e-2: temp0 = theta0 - ETA*sum(f(train_z)-train_y) temp1 = theta1 - ETA * sum((f(train_z) - train_y)*train_z) theta0 = temp0 theta1 = temp1 current_error = E(train_z,train_y) diff = error - current_error error = current_error count +=1 #log = '第{}次:theta0 = {:.3f},theta1 = {:.3f},差值 = {:.4f}' #print(log.format(count,theta0,theta1,diff)) #绘图确认 x = np.linspace(-3, 3, 100) plt.plot(train_z, train_y, 'o') plt.plot(x, f(x)) plt.show() print(f(standardize(100))) print(f(standardize(200))) print(f(standardize(300)))