sklearn岭回归应用
前言: 前面博文关于线性回归模型我们可以用梯度下降法或者标准方程法进行训练,但是两种方法各有优缺点。特别是标准方程法一个比较重要的缺点是数据存在不可逆现象则无法训练出结果,而岭回归就是解决标准方程法这一缺点出现的,岭回归模型是由带正则化的代价函数推导得到,他避免数据不可逆的现象,进而得到近似最优解。关于岭回归的具体理论请点击此处,到我的一篇博文中查看
一、sklearn岭回归使用示例代码
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
# 读取数据
data = genfromtxt(r'longley.csv', delimiter=',')
# 切分数据
x_data = data[1:, 2:]
y_data = data[1:, 1]
print(y_data)
# 训练模型
# 生成50个岭系数的值
lmd = np.linspace(0.001, 1, 50)
model = linear_model.RidgeCV(alphas=lmd, store_cv_values=True) # 利用岭回归方法交叉验证各个岭系数的误差,进而确定最终选择哪个岭系数
model.fit(x_data, y_data)
# 训练得到的最合适的岭系数
print(model.alpha_)
# loss值
print(model.cv_values_.shape) # (16,50)每一个岭系数对应的交叉验证损失值为对应列的和取平均
# 绘图 (验证求得岭系数是否合理)
# 岭系数和loss值的关系
plt.plot(lmd, model.cv_values_.mean(axis=0)) # model.cv_values_.mean(axis=0)是对列求平均值
# 最终选取的岭系数的位置
plt.plot(model.alpha_, min(model.cv_values_.mean(axis=0)), 'ro')
plt.show()
# 根据训练的模型进行预测
print(model.predict(x_data[2, np.newaxis])) # 预测结果88.11216213与真实值88.2很接近,所以预测效果不错
二、代码运行结果图
[ 83. 88.5 88.2 89.5 96.2 98.1 99. 100. 101.2 104.6 108.4 110.8
112.6 114.2 115.7 116.9]
0.40875510204081633
(16, 50)
[88.11216213]
三、数据下载
链接:https://pan.baidu.com/s/14xi9nAW4DyY3mWFp_GTb0w
提取码:3kf3