本文将介绍岭回归(Ridge Regression)、Lasso回归(Lasso Regression)和普通最小二乘法(OLS,Ordinary Least Squares),并记录了它们的代码脚本。
岭回归(Ridge Regression)、Lasso回归(Lasso Regression)和普通最小二乘法(OLS,Ordinary Least Squares)都是线性回归的变种,用于处理线性回归中不同的问题。它们都属于广义线性回归的范畴。
普通最小二乘法 (OLS):OLS是最常见的线性回归方法。它通过最小化实际值与预测值之间的残差平方和,来估计模型的系数。OLS假设误差项(残差)服从正态分布,并且没有额外的约束。当特征之间不存在多重共线性或特征较少时,OLS可以得到准确的系数估计。然而,当特征之间存在多重共线性时,OLS估计可能会变得不稳定,导致模型过拟合。
岭回归 (Ridge Regression):岭回归通过在OLS的损失函数中引入L2正则化项,以解决多重共线性问题。L2正则化项是系数的平方和与一个正则化参数λ(lambda)的乘积。通过引入正则化项,岭回归可以稳定模型的系数估计,减少过拟合的风险,并对不重要的特征进行缩减。岭回归对所有特征都进行缩减,但系数不会完全为零,所以它不会进行特征选择。
Lasso回归 (Lasso Regression):与岭回归类似,Lasso回归也通过引入正则化项来解决多重共线性问题。不同的是,Lasso回归采用L1正则化项,即系数的绝对值之和与正则化参数λ的乘积。相比于岭回归,Lasso回归的特点是可以进行特征选择,即使得一部分特征的系数为零。这意味着Lasso回归可以在模型拟合的同时实现特征的稀疏性。
OLS、岭回归和Lasso回归都是线性回归的方法,它们分别适用于不同的情况。OLS适用于简单线性回归问题或特征之间不存在多重共线性的情况;岭回归适用于特征之间存在多重共线性的情况,旨在提高模型的稳定性;而Lasso回归适用于特征之间存在多重共线性且希望进行特征选择的情况。在实际应用中,可以根据数据的特点选择适合的回归方法。
以下是一个示例的Python代码,用于读取CSV文件、读取因变量和自变量、进行标准化,并使用岭回归模型输出保留的变量和被排除的变量:
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
# 读取CSV文件
data = pd.read_csv('data.csv')
# 划分因变量和自变量,都是假设的.运行把X,y换成实际的就好了
X = data[['POP', 'DENSITY', 'STUDENT', 'BUS', 'METRO']]
y = data['y']
# 标准化特征变量
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 岭回归模型
ridge = Ridge(alpha=1.0) # alpha 是岭回归的正则化参数,根据需要进行调整
ridge.fit(X_scaled, y)
# 输出保留的变量和排除的变量
selected_features = X.columns[ridge.coef_ != 0]
excluded_features = X.columns[ridge.coef_ == 0]
print("选取的变量:")
print(selected_features)
print("排除的变量:")
print(excluded_features)
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Lasso
# 读取CSV文件
data = pd.read_csv('data.csv')
# 划分因变量和自变量,都是假设的.运行把X,y换成实际的就好了
X = data[['POP', 'DENSITY', 'STUDENT', 'BUS', 'METRO']]
y = data['y']
# 标准化特征变量
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Lasso回归模型
lasso = Lasso(alpha=1.0) # alpha 是Lasso回归的正则化参数,根据需要进行调整
lasso.fit(X_scaled, y)
# 输出保留的变量和排除的变量
selected_features = X.columns[lasso.coef_ != 0]
excluded_features = X.columns[lasso.coef_ == 0]
print("选取的变量:")
print(selected_features)
print("排除的变量:")
print(excluded_features)