1 何为岭回归?

如何理解岭回归模型?(python)_数据

岭参数k不是唯一确定的,其估计的回归系数是一个估计族。

2 何为岭迹分析?

1)定义

如何理解岭回归模型?(python)_数据_02

2)作用

如何理解岭回归模型?(python)_python_03

如何理解岭回归模型?(python)_方差_04

如何理解岭回归模型?(python)_数据_05

k值的选取原则:

如何理解岭回归模型?(python)_python_06

如下图所示,当k=k0时,各回归系数的估计值基本都能相对稳定。

如何理解岭回归模型?(python)_统计学_07

除了岭迹法,还可以使用VIF确定k值。可以选方差扩大因子cjj≤10k值:

如何理解岭回归模型?(python)_数据_08

除了岭迹法、VIF,还可使用残差平方和确定k值:

如何理解岭回归模型?(python)_python_09

3 如何基于岭回归选择变量?

选择变量的原则:

如何理解岭回归模型?(python)_方差_10

4 python实现
代码解读
from sklearn.linear_model import Ridge
import pandas as pd
import statsmodels.formula.api as smf
from statsmodels.stats.outliers_influence import variance_inflation_factor
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline 

#构造数据
df = pd.DataFrame(
    {'y':  [15, 10, 8, 9, 3],
     'x1': [1, 1, 2, 3, 4],
     'x2': [2, 2, 3, 2, 1],
     'x3': [4, 6, 7, 8, 9],
     'x4': [4, 3, 4, 5, 4]},

) 
#建模
result = smf.ols('y~x1+x2+x3+x4',data = df).fit()
 
# 计算方差扩大因子(多重共线性判断)
VIFlist = []
for i in range(1, 3, 1):
    vif = variance_inflation_factor(result.model.exog, i)
    VIFlist.append(vif)
print(pd.Series(VIFlist))
 
#岭回归处理(即原理部分)
eps = list(np.random.randn(5))  # 误差项,个数是由数据的条数决定
y = -1.1584 + 0.0547 * df['x1'] + 0.1341 * df['x2'] -0.0548 * df['x3']-0.0320* df['x4'] + eps
df['y'] = y  #覆盖原来的y值
 
#岭回归模型
dfnorm = (df - df.mean()) / df.std() #标准化自变量矩阵
# 切片将x和y分开
Xnorm = dfnorm.iloc[:, 1:]
ynorm = df.iloc[:, 0]
 
clf = Ridge()  #岭回归函数
coefs = []   #存放岭回归估计值
errors = []  #存放残差
 
alphas = np.linspace(0.1, 30, 2000)  #步长为0.1, 取30个alpha值
 
#遍历每个alpha值,计算出一系列的岭回归估计值
for a in alphas:
    clf.set_params(alpha=a)
    clf.fit(dfnorm, ynorm)
    coefs.append(clf.coef_)
 
#画岭回归图
plt.subplot(111)  #创建一个画布
ax = plt.gca()   #gca()一个坐标轴的设置函数
ax.plot(alphas, coefs, label=list(Xnorm.keys()))   #画图
ax.legend(list(Xnorm.keys()), loc='best')  #设置图例
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()
 
#下面就是删除调变化趋势大的自变量,重复上面的所有的操作,直到一个最优的结果,然后确定k值
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.

如何理解岭回归模型?(python)_统计学_11

从图中可以看出,alpha(k)越小时,系数很不稳定,随着k的增大,系数趋于稳定,当k趋近于无穷时,系数趋近于0