1.2.1.岭回归 (Ridge)的表达式
固定α求出最佳的w (使结构风险最小化 = 损失函数(平方损失) + 正则化(L2范数))
1.2.2示例
reg = linear_model.Ridge (alpha = .5)
reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None,
normalize=False, random_state=None, solver='auto', tol=0.001)
reg.coef_
array([ 0.34545455, 0.34545455])
reg.intercept_
0.13636..
岭回归:是带有罚值的残差平方和
应用:具有L2正则化的线性最小二乘法,岭回归是一种专用于共线性数据分析有偏估计的回归方法,
实质是一种改良的最小二乘法估计法,通过放弃最小二乘的无偏性,以损失部分信息,降低精度为代价
获得的回归系数更符合实际,更靠谱的回归方法,对病态数据的拟合要强于最小二乘法,当数据集中存在共线性的时候
岭回归就很有用
参数 copy_x 是否对x值进行复制保存
fit_intercept是否显示截距 即b的值
n_jobs 运算时电脑几核运行
normalize 在进行最小二乘法运算时x是否先标准化,当_fit_intercep_t为False时该参数默认取消
加入了鲁棒性a参数正则化系数在0~1之间
solver 进行计算时选择的解决器,auto 表示自动 svd表示奇异值分解法,sag表示随机梯度下降法,在大数据下表现良好
tol表示精度
random_state sag时伪随机种子默认为none
1.2.3.官方文档案例分析
1 import numpy as np 2 import matplotlib.pyplot as plt 3 from sklearn import linear_model 4 5 # X is the 10x10 Hilbert matrix 6 X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis]) 7 y = np.ones(10) 8 9 10 # ############################################################################# 11 # Compute paths 12 13 n_alphas = 200 14 #np.logspace 对数等比例列 15 alphas = np.logspace(-10, -2, n_alphas) 16 17 coefs = [] 18 for a in alphas: 19 ridge = linear_model.Ridge(alpha=a, fit_intercept=False) 20 ridge.fit(X, y) 21 coefs.append(ridge.coef_) 22 #当alphas越小系数的震动幅度越大 23 # ############################################################################# 24 # Display results 25 26 ax = plt.gca() 27 28 ax.plot(alphas, coefs) 29 ax.set_xscale('log') 30 ax.set_xlim(ax.get_xlim()[::-1]) # reverse axis 31 plt.xlabel('alpha') 32 plt.ylabel('weights') 33 plt.title('Ridge coefficients as a function of the regularization') 34 plt.axis('tight') 35 plt.show()
1.2.4.案例分析
1 import pandas as pd 2 import numpy as np 3 import sklearn.datasets as datasets 4 from sklearn.model_selection import train_test_split 5 from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge 6 from sklearn.preprocessing import StandardScaler 7 from sklearn.metrics import mean_squared_error 8 9 10 def linearmodel(): 11 12 #线性回归对波士顿数据集处理 13 #:return: None 14 15 16 # 1、加载数据集 17 18 ld = datasets.load_boston() 19 20 x_train,x_test,y_train,y_test = train_test_split(ld.data,ld.target,test_size=0.25) 21 22 # 2、标准化处理 23 24 # 特征值处理 25 std_x = StandardScaler() 26 x_train = std_x.fit_transform(x_train) 27 x_test = std_x.transform(x_test) 28 29 #新版的sklearn中,所有的数据都应该是二维矩阵,哪怕它只是单独一行或一列增加一个维度 30 y_train = y_train[:, np.newaxis] 31 y_test = y_test[:, np.newaxis] 32 # 目标值进行处理 33 34 std_y = StandardScaler() 35 y_train = std_y.fit_transform(y_train) 36 y_test = std_y.transform(y_test) 37 38 # 3、估计器流程 39 40 # LinearRegression 最小二乘法 41 lr = LinearRegression() 42 43 lr.fit(x_train,y_train) 44 #print("相关系数:",lr.coef_) 45 46 y_lr_predict = lr.predict(x_test) 47 #还原真实值 48 y_lr_predict = std_y.inverse_transform(y_lr_predict) 49 50 #print("Lr预测值:",y_lr_predict) 51 52 53 # SGDRegressor 梯度下降法 54 sgd = SGDRegressor() 55 56 sgd.fit(x_train,y_train) 57 58 # print(sgd.coef_) 59 60 y_sgd_predict = sgd.predict(x_test) 61 #还原真实值 62 y_sgd_predict = std_y.inverse_transform(y_sgd_predict) 63 64 #print("SGD预测值:",y_sgd_predict) 65 66 # 带有正则化的岭回归 67 68 rd = Ridge(alpha=0.01) 69 70 rd.fit(x_train,y_train) 71 72 y_rd_predict = rd.predict(x_test) 73 #还原真实值 74 y_rd_predict = std_y.inverse_transform(y_rd_predict) 75 76 #print(rd.coef_) 77 78 # 两种模型评估结果 79 80 print("lr的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict)) 81 82 print("SGD的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_sgd_predict)) 83 84 print("Ridge的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_rd_predict)) 85 86 return None 87 linearmodel()
1.2.5.岭回归--广义交叉验证(RidgeCV)L2
通过内置的关于的 alpha 参数的交叉验证来实现岭回归。 该对象与 GridSearchCV 的使用方法相同,只是它默认为 Generalized Cross-Validation(广义交叉验证 GCV),
这是一种有效的留一验证方法(LOO-CV)
1 from sklearn import linear_model 2 reg = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0]) #多个a得到多个对应最佳的w相关系数获得最佳的a及对应的w 3 reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) 4 linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,normalize=False) 5 reg.alpha_ 6 0.1