岭回归和lasso回归python
时间: 2024-10-01 14:01:30 浏览: 94
岭回归(Ridge Regression)和Lasso回归都是统计学中的线性模型,用于解决高维数据中的变量选择问题,并通过正则化减少过拟合风险。它们都属于广义线性模型(GLM)范畴。
1. **岭回归**(Ridge Regression):它引入了一个惩罚项,即变量系数的平方和,这使得较大的系数值会被减小,防止某些特征的权重过大。Python中可以使用sklearn库中的`Ridge`类来实现,例如:
```python
from sklearn.linear_model import Ridge
model = Ridge(alpha=0.5) # alpha是正则化强度,越大惩罚越强
```
2. **Lasso回归**(Lasso Regression):相较于岭回归,Lasso采用的是绝对值的惩罚,这意味着一些系数会直接变成零,实现了特征选择的功能,对于那些对预测贡献不大的特征,Lasso会将其“剔除”。同样使用sklearn库,代码如下:
```python
from sklearn.linear_model import Lasso
model = Lasso(alpha=0.1)
```
相关问题
使用最小二乘法、岭回归和lasso回归应用于波士顿房价数据集。 绘制岭回归不同alfa值[0.1 10]对应准确率对数曲线。 绘制岭回归和lasso回归不同alfa值[0.0001 1]对
好的,我来为您介绍如何使用最小二乘法、岭回归和Lasso回归应用于波士顿房价数据集,并绘制相应的图表。
首先,让我们导入必要的库并加载波士顿房价数据集:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.metrics import mean_squared_error
# 加载数据
boston = load_boston()
X = boston.data
y = boston.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
1. 使用最小二乘法:
```python
# 最小二乘法
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred_lr = lr.predict(X_test)
mse_lr = mean_squared_error(y_test, y_pred_lr)
print(f"最小二乘法的均方误差: {mse_lr:.2f}")
```
2. 使用岭回归:
```python
# 岭回归
alphas = np.logspace(-1, 1, 50)
coefs = []
errors = []
for a in alphas:
ridge = Ridge(alpha=a)
ridge.fit(X_train, y_train)
coefs.append(ridge.coef_)
y_pred = ridge.predict(X_test)
errors.append(mean_squared_error(y_test, y_pred))
# 绘制系数随alpha变化图
plt.figure(figsize=(10, 6))
for coef in coefs.T:
plt.plot(alphas, coef)
plt.xscale('log')
plt.xlabel('Alpha')
plt.ylabel('Coefficients')
plt.title('Ridge coefficients as a function of the regularization')
plt.show()
# 绘制均方误差随alpha变化图
plt.figure(figsize=(10, 6))
plt.plot(alphas, errors)
plt.xscale('log')
plt.xlabel('Alpha')
plt.ylabel('Mean Squared Error')
plt.title('Ridge Regression Error')
plt.show()
```
3. 使用Lasso回归:
```python
# Lasso回归
alphas = np.logspace(-4, 0, 50)
coefs = []
errors = []
for a in alphas:
lasso = Lasso(alpha=a)
lasso.fit(X_train, y_train)
coefs.append(lasso.coef_)
y_pred = lasso.predict(X_test)
errors.append(mean_squared_error(y_test, y_pred))
# 绘制系数随alpha变化图
plt.figure(figsize=(10, 6))
for coef in coefs:
plt.plot(alphas, coef)
plt.xscale('log')
plt.xlabel('Alpha')
plt.ylabel('Coefficients')
plt.title('Lasso coefficients as a function of the regularization')
plt.show()
# 绘制均方误差随alpha变化图
plt.figure(figsize=(10, 6))
plt.plot(alphas, errors)
plt.xscale('log')
plt.xlabel('Alpha')
plt.ylabel('Mean Squared Error')
plt.title('Lasso Regression Error')
plt.show()
```
通过这些代码,我们可以看到:
1. 最小二乘法给出了基准模型的表现。
2. 岭回归和Lasso回归通过调整alpha值来控制正则化强度,影响模型的复杂度。
3. 岭回归保留了所有特征,但会压缩它们的系数。
4. Lasso回归可以进行特征选择,某些特征的系数可能会缩减到零。
5. 随着alpha的增加,模型的复杂度降低,可能会导致欠拟合。
6. 存在一个最佳的alpha值,使得模型在训练集和测试集上的表现都很好。
岭回归和lasso回归异同
### 岭回归与Lasso回归的异同点
#### 正则化方式
岭回归和Lasso回归都通过在损失函数中加入正则化项来解决过拟合问题,但它们采用的方式不同。
- **岭回归**使用的是 L2 范数正则化,在目标函数中加入了权重平方和的形式 \( \lambda \sum_{i=1}^{n} w_i^2 \)[^1]。这种方式会缩小权重值,使其趋近于零,但不会使任何权重完全变为零。
- **Lasso 回归**使用的是 L1 范数正则化,在目标函数中加入了权重绝对值之和的形式 \( \lambda \sum_{i=1}^{n} |w_i| \)[^4]。这种形式不仅能够减少权重大小,还可能将某些权重精确缩减到零,从而实现特征选择。
#### 模型复杂度
- **岭回归**倾向于降低模型复杂度的同时保持所有特征的作用。由于其无法将权重降为零,最终模型仍然保留所有的原始变量[^3]。
- **Lasso 回归**可以显著简化模型结构,因为它能自动剔除不重要的特征(即令这些特征对应的权重为零),这使得它特别适合高维稀疏数据集中的特征筛选。
#### 应用场景
- 当面对多重共线性或者希望获得更稳定的预测性能时,通常会选择 **岭回归**。因为即使存在高度相关的自变量之间关系紧密的情况之下,该方法依旧有效并提供较为平稳的结果[^2]。
- 对于需要进行特征选取的任务,则更适合选用 **Lasso 回归** 或者结合两者优点的 Elastic Net 方法。如果先验知识表明只有少数几个关键因素影响因变量变化趋势的话,那么利用 Lasso 的特性可以帮助识别出真正起作用的部分。
```python
from sklearn.linear_model import Ridge, Lasso
import numpy as np
# 示例代码展示如何创建Ridge和Lasso对象
ridge = Ridge(alpha=1.0) # alpha对应λ参数
lasso = Lasso(alpha=0.1)
X = np.random.rand(100, 5)
y = np.dot(X, [1.5, -2., 1]) + np.random.randn(100)
# 训练模型
ridge.fit(X, y)
lasso.fit(X, y)
print("Ridge coefficients:", ridge.coef_)
print("Lasso coefficients:", lasso.coef_)
```
上述Python脚本展示了如何分别实例化`sklearn`库里的Ridge类和Lasso类,并训练简单的模拟数据上的这两个模型。注意两个alpha超参控制着各自惩罚力度强弱程度的不同设置会影响最后输出结果里各个维度上估计出来的系数数值表现情况。
阅读全文
相关推荐












