ols回归分析文字(OLS回归分析简介)
ols回归分析文字(OLS回归分析简介)plt.figure(figsize=(10 6)) plt.plot(x y 'ro' label='sample data') for deg in [1 2 3]: # 回归训练 reg = np.polyfit(x y deg=deg) # 回归预测 y_ = np.polyval(reg x) # 计算 MSE MSE = ((y - y_) ** 2).mean() print(f'deg={deg} | MSE={MSE:.5f}') plt.plot(x np.polyval(reg x) label=f'deg={deg}') plt.legend(); # Out: # deg=1 | MSE=10.72195
OLS全称ordinary least squares,是回归分析(regression analysis)最根本的一个形式,对模型条件要求最少,也就是使散点图上的所有观测值到回归直线距离的平方和最小。假定数学函数为,以下 Python 代码将这个数学函数实现为 Python 函数,并创建了一组输入输出值。
def f(x):
return 2 * x ** 2 - x ** 3 / 3
x = np.linspace(-2 4 25)
y = f(x)
plt.figure(figsize=(10 6))
plt.plot(x y 'ro');
输出值与输入值的关系图
在OLS 线性回归中,假定输入值和输出值之间的函数关系是线性的,需要求解的问题是为以下线性方程式找到最优参数 α 和 β :
对于给定的输入值和输出值,最优解将使得实际输出值与近似输出值之间的 MSE 最小:
对于简单的线性回归,可以通过公式计算出最优参数 (α β) 的解析解,如以下公式所示:
以下Python代码通过线性估计输出值来计算最优参数值,同时在样本数据上绘制线性回归线,如图所示。通过较高的 MSE 值可以看出,线性回归方法在逼近函数关系时效果不佳。
# 计算 β 的最优解
beta = np.cov(x y ddof=0)[0 1] / np.var(x)
# 计算 α 的最优解。
alpha = y.mean() - beta * x.mean()
# 计算估计输出值。
y_ = alpha beta * x
# 根据估计输出值计算 MSE
MSE = ((y - y_) ** 2).mean()
plt.figure(figsize=(10 6))
plt.plot(x y 'ro' label='sample data')
plt.plot(x y_ lw=3.0 label='linear regression')
plt.legend();
MSE
# Out:
# 10.721953125
样本数据和线性回归线
如何才能改进(降低)MSE 值,甚至将其降低至 0,以达到”完美估计”?OLS 回归不限于用来近似简单的线性关系。除了常数项和一次项,高次项也可以作为回归的基函数被加入进来。下面用二次项和三次项的效果作为对比,使用二次项和三次项作为基函数所带来的改进是显而易见的,同时我们可以通过计算 MSE 值来从数值上验证这一点。对于不超过三次项的基函数,都可以通过包含二次项和三次项的 OLS 回归进行完美逼近并完美恢复函数关系。
plt.figure(figsize=(10 6))
plt.plot(x y 'ro' label='sample data')
for deg in [1 2 3]:
# 回归训练
reg = np.polyfit(x y deg=deg)
# 回归预测
y_ = np.polyval(reg x)
# 计算 MSE
MSE = ((y - y_) ** 2).mean()
print(f'deg={deg} | MSE={MSE:.5f}')
plt.plot(x np.polyval(reg x) label=f'deg={deg}')
plt.legend();
# Out:
# deg=1 | MSE=10.72195
# deg=2 | MSE=2.31258
# deg=3 | MSE=0.00000
样本数据和 OLS 回归线
也就是说,通过 OLS 回归可以分别恢复原始函数中二次项和三次项系数的精确值。