第八章第八章 变量选择与正则化变量选择与正则化 – 岭回归分析岭回归分析
岭回归分析岭回归分析0 载入库1 数据预处理2 普通线性回归和岭回归2.1 最小二乘法,参数估计2.2 岭回归,参数估计,固定岭参数2.3
岭回归,按 CV 标准自动选择岭参数2.4 列举岭参数的值,计算回归参数,画出岭迹图,计算 VIF
0 载入库载入库
载入 sklearn 模块中的线性回归与岭回归的函数
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.set_printoptions(suppress=True) #不用科学计数法输出
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.linear_model import RidgeCV
1 数据预处理数据预处理
将自变量和因变量中心化和标准化
mydata=pd.read_csv('Regression/Regression8/longley.csv')
mydata_normd = (mydata - mydata.mean()) / mydata.std()
A = np.asmatrix(mydata_normd) #将输入解释为矩阵
X = A[:,1:] y = A[:,0]
2 普通线性回归和岭回归普通线性回归和岭回归
2.1 最小二乘法,参数估计最小二乘法,参数估计
reg01 = LinearRegression()
reg01.fit(X,y)
print('OLS score:', reg01.score(X,y).round(4))
print('OLS coefficients:', reg01.coef_.round(3))
2.2 岭回归,参数估计,固定岭参数岭回归,参数估计,固定岭参数
reg02 = Ridge(alpha=0.016)
reg02.fit(X,y)
print('Ridge(alpha=0.016) score:', reg01.score(X,y).round(4))
print('Ridge(alpha=0.016) coefficients:', reg02.coef_.round(3))
岭回归,给定一些岭参数,画出岭迹图
alphas = np.linspace(0,0.3,51)
betas = np.zeros((51,6))
for i in range(51):
reg03 = Ridge(alpha=alphas[i])
reg03.fit(X,y)
betas[i] = reg03.coef_
ax = plt.gca()
ax.plot(alphas, betas)
plt.xlabel('k')
plt.ylabel('beta(k)')
plt.title('Ridge coefficients as a function of k')
plt.grid(True)