- 一元线性回归模型:
输入只包含一个单独的特征。
-
对于样本,模型预测值为:
-
误差/残差:样本真实值与预测值之差
-
给定训练集,找到一条直线(模型)
使得所有样本尽可能落在它的附近。
- 损失函数(Loss function):最小化均方误差,从而寻找最优的参数。
- 闭式解
将目标函数求偏导:
可以解得:
- 代码
import numpy as np
import matplotlib.pyplot as plt
# 以下两行代码解决jupyter notebook显示图片模糊问题
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
## 测试数据
X = np.arange(0,10,0.1)
Y = 3*X+np.random.random([X.size])*5
def f(x,a):
X = np.ones((len(x),2))
X[:,1]=x
return X.dot((a.T))
a = np.zeros((2))
a[1] = ((X*Y).sum()- X.sum()*Y.sum()/len(X))/((X*X).sum()-X.sum()*X.sum()/len(X))
a[0] = Y.sum()/len(Y)- a[1]*X.sum()/len(X)
Y_Test = f(X,a)
plt.scatter(X,Y,label="原始数据",c='b',alpha=0.5)
plt.plot(X,Y_Test,label="回归线",c='r')
plt.title('一元线性回归')
plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()