没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
人工智能和机器学习之回归算法:岭回归:岭回归在实际
问题中的案例分析
1 岭回归简介
1.1 1 岭回归的基本概念
岭回归(Ridge Regression)是一种线性回归技术,它通过在损失函数中加
入正则化项来解决多重共线性问题和防止模型过拟合。在标准的线性回归模型
中,我们试图找到一组权重,使得预测值与实际值之间的平方误差最小。然而,
在特征之间存在高度相关性或数据量较少的情况下,模型可能会变得不稳定,
权重的估计值可能过大,导致模型在新数据上的泛化能力较差。岭回归通过在
权重的平方和上添加一个惩罚项(λ*w^2),有效地限制了权重的大小,从而
提高了模型的稳定性和预测性能。
1.2 2 岭回归与普通最小二乘法的区别
普通最小二乘法(Ordinary Least Squares, OLS)的目标是最小化预测值与实
际值之间的平方误差之和。然而,当特征之间存在多重共线性或数据集较小,
OLS 可能会导致权重估计值不稳定,甚至出现较大的方差。相比之下,岭回归
通过引入正则化项,即权重的平方和乘以一个正则化参数λ,来惩罚大的权重
值,从而使得权重估计更加稳定,减少模型的方差,提高泛化能力。
1.2.1 示例代码
假设我们有一组数据,其中特征之间存在高度相关性,我们使用岭回归来
训练模型,并与 OLS 进行比较。
import numpy as np
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
#
生成数据集,其中特征之间存在高度相关性
X, y = make_regression(n_samples=100, n_features=10, n_informative=5, n_targets=1, bias=0.0,
effective_rank=5, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)
#
划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#
使用
OLS
训练模型
2
ols = LinearRegression()
ols.fit(X_train, y_train)
y_pred_ols = ols.predict(X_test)
mse_ols = mean_squared_error(y_test, y_pred_ols)
#
使用岭回归训练模型
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred_ridge = ridge.predict(X_test)
mse_ridge = mean_squared_error(y_test, y_pred_ridge)
print("OLS MSE:", mse_ols)
print("Ridge MSE:", mse_ridge)
1.2.2 代码解释
1. 我们首先使用 make_regression 函数生成一个回归数据集,其中
effective_rank 参数设置为 5,意味着 10 个特征中有 5 个是高度相关的。
2. 然后,我们使用 train_test_split 函数将数据集划分为训练集和测
试集。
3. 接下来,我们分别使用 OLS 和岭回归训练模型,并在测试集上进
行预测。
4. 最后,我们计算并打印出两种模型的均方误差(MSE),以比较它
们的预测性能。
1.3 3 岭回归的数学原理
岭回归的损失函数可以表示为:
L
(
w
)
=
1
2
n
n
i
=
1
(
y
i
−
w
T
x
i
)
2
+
λ
2
w
T
w
其中,
w
是权重向量,
x
i
是第 i 个样本的特征向量,
y
i
是第 i 个样本的目标值,
n
是样本数量,
λ
是正则化参数。正则化项
λ
2
w
T
w
惩罚了大的权重值,使得权重向
量的大小受到限制,从而避免了过拟合。
1.3.1 解析
� 第一项:是标准的线性回归损失函数,即预测误差的平方和。
� 第二项:是正则化项,它惩罚了权重向量的大小。当
λ
增大时,模
型对权重的惩罚也增大,从而使得权重估计更加保守,避免了过拟合。
1.3.2 优化方法
岭回归的优化目标是找到最小化上述损失函数的权重向量
w
。这通常通过
3
梯度下降法或解析解(闭式解)来实现。解析解可以通过求解损失函数关于
w
的导数等于 0 的方程来获得,具体形式为:
w
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
其中,
X
是特征矩阵,
I
是单位矩阵,
y
是目标向量。这个解析解有效地解决
了多重共线性问题,因为正则化项
λ
I
保证了矩阵
X
T
X
+
λ
I
的可逆性,即使特征之
间存在高度相关性。
1.3.3 示例代码
下面的代码展示了如何使用解析解来计算岭回归的权重向量。
import numpy as np
#
假设
X
和
y
是已知的特征矩阵和目标向量
X = np.random.rand(100, 10)
y = np.random.rand(100)
#
设置正则化参数
lambda_ = 1.0
#
计算岭回归的权重向量
I = np.eye(X.shape[1])
w_ridge = np.linalg.inv(X.T.dot(X) + lambda_ * I).dot(X.T).dot(y)
print("Ridge weights:", w_ridge)
1.3.4 代码解释
1. 我们首先生成一个随机的特征矩阵
X
和目标向量
y
。
2. 然后,我们设置正则化参数
λ
。
3. 接下来,我们使用 Numpy 的 linalg.inv 函数来计算矩阵
X
T
X
+
λ
I
的
逆,然后通过矩阵乘法计算出权重向量
w
。
4. 最后,我们打印出计算得到的权重向量。
通过以上内容,我们对岭回归的基本概念、与 OLS 的区别以及数学原理有
了深入的理解。岭回归通过引入正则化项,有效地解决了多重共线性问题和防
止了模型过拟合,提高了模型的稳定性和预测性能。
2 岭回归参数选择与模型评估
2.1 1 选择合适的正则化参数 λ
岭回归是一种线性回归模型,它通过在损失函数中加入正则化项来防止模
型过拟合。正则化参数λ(lambda)的选取至关重要,因为它控制着模型复杂
度与过拟合风险之间的平衡。λ值过小,模型可能过拟合;λ值过大,模型可
4
能欠拟合。
2.1.1 示例代码
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_boston
#
加载数据集
boston = load_boston()
X = boston.data
y = boston.target
#
设置岭回归模型
ridge = Ridge()
#
定义参数网格
param_grid = {'alpha': np.logspace(-4, 4, 100)}
#
使用
GridSearchCV
进行参数选择
grid_search = GridSearchCV(ridge, param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X, y)
#
输出最佳参数
best_alpha = grid_search.best_params_['alpha']
print(f"最佳正则化参数 λ: {best_alpha}")
2.1.2 解释
在上述代码中,我们使用了 GridSearchCV 来自动选择最佳的正则化参数λ。
GridSearchCV 通过在预定义的参数网格上进行交叉验证,找到使模型性能最佳
的参数值。这里我们使用了 Ridge 类,它是 Scikit-learn 库中实现岭回归的模块,
alpha 参数即为λ。
2.2 2 交叉验证在参数选择中的应用
交叉验证是一种评估模型性能的方法,尤其在参数选择中非常有用。它通
过将数据集分为训练集和验证集的多个子集,多次训练和评估模型,从而得到
更稳定、更可靠的模型性能估计。
剩余17页未读,继续阅读
资源评论
kkchenjj
- 粉丝: 2w+
- 资源: 5478
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功