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] # 标准化 mu = train_x.mean() sigma = train_x.std() def standardize(x): return (x - mu)/sigma train_z = standardize(train_x) # 初始化参数 theta = np.random.rand(3) # 学习率 ETA = 1e-3 # 误差的差值 diff = 1 # 创建训练数据的矩阵 def to_matrix(x): return np.vstack([np.ones(x.shape[0]),x,x ** 2]).T X = to_matrix(train_z) #预测函数 def f(x): return np.dot(x,theta) #目标函数 def E(x,y): return 0.5*np.sum((y-f(x))**2) #定义均方误差函数 def MSE(x,y): return (1/x.shape[0])*sum((y-f(x))**2) #重复学习 error=E(X,train_y) errors=[] while diff >1e-2: theta=theta-ETA*np.dot(f(X)-train_y,X) current_error=E(X,train_y) diff = error-current_error error = current_error errors.append(MSE(X,train_y)) #绘制拟合曲线 x = np.linspace(-3, 3, 100) plt.plot(train_z, train_y, 'o') plt.plot(x, f(to_matrix(x))) plt.show() #绘制误差变化图 x = np.arange(len(errors)) plt.plot(x, errors) plt.show()
白话机器学习的数学-多项式回归
最新推荐文章于 2024-08-31 15:42:00 发布