• 一元线性回归模型:

输入只包含一个单独的特征。

  • 对于样本,模型预测值为:

  • 误差/残差:样本真实值与预测值之差

  • 给定训练集,找到一条直线(模型)

使得所有样本尽可能落在它的附近。

  • 损失函数(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()