1.神经元模型
为只讨论房屋的面积,所以构造的神经元模型标量表达式为:f ( x ) = w × x + b 根据自变量与因变量,建立一元线性回归方程:y = w x + b + ε (ε作为观测误差)
2.误差函数
我们使用均方误差作为误差函数
然后我们需要找到一组最优的参数w , b 使得函数的值最小
3.梯度下降法
因为梯度的方向就是函数变化最快的方向。对w , b不断地迭代更新,直到找到使均方误差最小。也就是对这个方程式对w求偏导数,在对b求偏导数。
α在梯度下降法中称为学习率或者步长
import numpy as np import random # 构建数据集 data=[] for i in range(30): area=random.uniform(60,100) easp1=random.uniform(1.2,2.0) easp2=random.uniform(0.1,0.2) prinse=area*easp1+easp2 data.append([area,prinse]) data=np.array(data) # 数据集创建完毕 2维数组 [面积,房价] #1.函数方法 def change(b, w, data, a): b_change = 0 w_change = 0 size = float(len(data)) for i in range(0, len(data)): x = data[i, 0] y = data[i, 1] # 计算梯度 b_change += (2 / size) * ((w * x + b) - y) w_change += (2 / size) * x * ((w * x + b) - y) # 根据梯度更新权重和偏置 b -= a * b_change w -= a * w_change return [b,w] # 梯度下降法 def come(): b=0 w=0 a=0.00001 for num in range(100): [b,w]=change(b,w,data,a) print([b,w]) come() #2.面向对象方法 class Predict(): def __init__(self): self.b=0 self.w=0 self.a=0.00001 self.num=100 def charge(self): b_change = 0 w_change = 0 size = float(len(data)) for i in range(0, len(data)): x = data[i, 0] y = data[i, 1] b_change += (2 / size) * ((self.w * x + self.b) - y) w_change += (2 / size) * x * ((self.w * x + self.b) - y) self.b -= self.a * b_change self.w -= self.a * w_change def come(self): for num in range(self.num): self.charge() print([self.b,self.w]) predict=Predict() predict.come()