快捷搜索:  汽车  科技

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回归分析文字(OLS回归分析简介)(1)

输出值与输入值的关系图

在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

ols回归分析文字(OLS回归分析简介)(2)

样本数据和线性回归线

​如何才能改进(降低)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回归分析简介)(3)

样本数据和 OLS 回归线

也就是说,通过 OLS 回归可以分别恢复原始函数中二次项和三次项系数的精确值。

猜您喜欢: