使用岭回归、套索回归、和最小二乘法的线性回归预测波士顿房价,并画出不同alpha值下面的准确度的图像
时间: 2024-10-20 20:18:58 浏览: 26
岭回归、套索回归(Lasso Regression)和最小二乘法都是用于线性回归的统计模型,它们的区别在于对模型复杂性和变量选择的方式:
1. **最小二乘法**是最基础的线性回归方法,它通过最小化残差平方和来确定系数,适用于数据中存在完全线性的关系。这种方法对于多重共线性敏感,即当自变量之间高度相关时,可能会导致不稳定的结果。
2. **岭回归**是一种正则化的形式,引入了一个惩罚项(通常是一个L2 norm,相当于每个系数的平方),随着惩罚因子α的增大,模型会倾向于减少特征的数量,防止过拟合。α=0就等同于普通最小二乘法。
3. **套索回归**(也称为L1 Regularization)与岭回归类似,但它的惩罚项是L1 norm,也就是绝对值之和。这使得一些系数变为0,实现了特征选择的作用,因此常用于高维数据集中的变量筛选。
要在Python中,比如使用sklearn库,可以这样做:
```python
from sklearn.datasets import load_boston
from sklearn.linear_model import Ridge, Lasso, LinearRegression
import matplotlib.pyplot as plt
# 加载波士顿房价数据
boston = load_boston()
X, y = boston.data, boston.target
# 初始化不同α值
alphas = np.logspace(-4, 4, 100)
# 对三种方法分别计算准确度并保存结果
ridge_scores = []
lasso_scores = []
ols_scores = []
for alpha in alphas:
ridge = Ridge(alpha=alpha)
lasso = Lasso(alpha=alpha)
ols = LinearRegression()
ridge.fit(X, y)
lasso.fit(X, y)
ols.fit(X, y)
ridge_scores.append(ridge.score(X, y))
lasso_scores.append(lasso.score(X, y))
ols_scores.append(ols.score(X, y))
# 绘制三条曲线
plt.plot(alphas, ridge_scores, label='Ridge')
plt.plot(alphas, lasso_scores, label='Lasso')
plt.plot(alphas, ols_scores, label='OLS', linestyle='dashed') # 线性回归用虚线表示
plt.xlabel('Alpha')
plt.ylabel('Accuracy')
plt.xscale('log')
plt.legend()
plt.show()
```
图中会显示不同α值下的岭回归、套索回归和最小二乘法的预测准确度变化情况。一般来说,随着α增加,Lasso的准确度可能会先上升然后下降,因为它会在某些点上设为0;Ridge的准确度变化较为平滑,因为其不会将系数全部置零。
阅读全文