先搞一个最low的一元线性回归
对房价数据集监督学习进行线性回归
1、一元线性回归
y=ax+b+ε
y 为应变量 dependent variable
x 为自变量 independent variable
a 为斜率 coeffient
b 为截距 intercept
ε (读作epsilon)为误差,正态分布
2、找到一组a和b,使得ε最小
y^=ax+by^=ax+b
ε=y−y^
观测样本:房价数据集 面积与价格 y=ax+b+ε
回归线:y^=ax+by^=ax+b
误差:ε=y−y^
损失函数:在此取方差为损失函数
MSE(Mean Square Error)是方差的平均值
最小二乘法:Least Squares Method(LSM)
这里的损失函数,用的是0.5 * MSE
优化:寻找损失函数J的最小值
求损失函数对于a和b的偏微分:
迭代超参数:α=0.01
为使得J最小进行迭代的优化方法:
如此循环往复得出使得J最小的a与b
安装Jupyter Notebook
pip install jupyter notebook
pip install numpy
pip install matplotlib
启动 jupyter notebook
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = [55,68,120,80,380] #房屋面积m2
x = np.reshape(x,newshape=(5,1)) / 100.0
y = [200, 312, 534, 245, 1500] #房屋总价w
y = np.reshape(y,newshape=(5,1)) / 100.0
plt.scatter(x,y)
#模型
def model(a, b, x):
return a*x + b
#损失函数
def cost_function(a, b, x, y):
n = 5
return 0.5/n * (np.square(y-a*x-b)).sum()
#优化
def optimize(a,b,x,y):
n = 5
alpha = 1e-1
y_hat = model(a,b,x)
da = (1.0/n) * ((y_hat-y)*x).sum()
db = (1.0/n) * ((y_hat-y).sum())
a = a - alpha*da
b = b - alpha*db
return a, b
a = 0
b = 0
def iterate(a,b,x,y,times):
for i in range(times):
a,b = optimize(a,b,x,y)
y_hat=model(a,b,x)
cost = cost_function(a, b, x, y)
print (a,b,cost)
plt.scatter(x,y)
plt.plot(x,y_hat)
return a,b
a,b = iterate(a,b,x,y,1)
a,b = iterate(a,b,x,y,10)
a,b = iterate(a,b,x,y,100)
a,b = iterate(a,b,x,y,1000)
a,b = iterate(a,b,x,y,10000)
第一次迭代
最终房价模型