回归分析是估计因变量和自变量之间关系的过程。
目录
1、多元线性回归
2、岭回归
3、Lasso回归
4、弹性网络回归
5、多项式回归
6、指数回归
7、自然对数回归
8、广义线性模型 GLM
9、Cox比例风险模型
10、决策树回归
11、随机森林回归
12、梯度提升回归
13、XGBoost回归
14、LightGBM回归
15、CatBoost回归
16、支持向量回归 SVR
17、K近邻回归 KNN
18、贝叶斯回归
19、神经网络回归
20、对比总结
21、完整代码
1、多元线性回归
线性回归是一种用于预测分析的统计学方法,它通过建立一个或多个自变量与一个因变量之间的线性关系来预测连续的数值。线性回归的目的是找到最佳拟合直线(在二维空间中)或超平面(在多维空间中),如果有一个自变量,就是一元线性回归;如果有多个自变量,那就是多元线性回归。
误差:将理论与实际间的差别表示出来,用ε。
损失函数:真实值和预测值间的差值。均方误差MSE、均方根误差RMSE、平均绝对误差MAE、决定系数R-squared。
优点:
简单易懂:线性回归模型结构简单,容易理解和实现。
计算速度快:计算复杂度低,适用于大规模数据集。
解释性强:模型参数具有明确的统计意义,可以解释特征对目标变量的影响。
缺点:
线性假设:假设特征和目标变量之间是线性关系,无法捕捉非线性关系。
对异常值敏感:异常值会显著影响模型参数的估计。
多重共线性:特征之间的多重共线性会导致参数估计不稳定。
# 多元线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
print("多元线性回归 MSE:", mean_squared_error(y_test, y_pred))
2、岭回归
在线性回归中加入L2正则化,防止过拟合。
一种改进的线性回归方法,主要用于处理多重共线性(自变量之间存在高度相关性)的问题。它通过在损失函数中加入一个惩罚项,使得回归系数尽量小,以此来减少模型的复杂度和过拟合风险。
# 岭回归
ridge = Ridge(alpha=1.0) # alpha正则化强度
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)
print("岭回归 MSE:", mean_squared_error(y_test, y_pred))
3、Lasso回归
加入L1正则化,适用于特征选择。
一种改进的线性回归方法,通过引入L1正则化项来进行特征选择和缩减。与岭回归不同,Lasso回归不仅能缩小回归系数,还能将一些回归系数缩减为零,从而实现特征选择。不仅可以防止训练过拟合的正则化器,还强制学习权重的稀疏性。
优点:通过特征选择提高模型的解释性、减少模型的复杂度和过拟合、适合处理高维数据。
# Lasso回归
lasso = Lasso(alpha=0.1) # alpha正则化强度
lasso.fit(X_train, y_train)
y_pred = lasso.predict(X_test)
print("Lasso回归 MSE:", mean_squared_error(y_test, y_pred))
4、弹性网络回归
结合L1和L2正则化,平衡岭回归和Lasso回归的优点。
# 弹性网络回归
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)# alpha正则化强度;l1_ratioL1和L2正则化的混合比例
elastic_net.fit(X_train, y_train)
y_pred = elastic_net.predict(X_test)
print("弹性网络回归 MSE:", mean_squared_error(y_test, y_pred))
5、多项式回归
线性回归假设因变量和自变量之间的关系是线性的。当数据之间的关系不是线性时,它无法拟合数据。多项式回归假定自变量和因变量之间存在某种非线性关系,通过将m次多项式拟合到数据点来扩展线性回归的拟合能力。
# 多项式回归
degree = 2 # degree多项式的阶数
polyreg = make_pipeline(PolynomialFeatures(degree), LinearRegression())
polyreg.fit(X_train, y_train)
y_pred = polyreg.predict(X_test)
print("多项式回归 MSE:", mean_squared_error(y_test, y_pred))
6、指数回归
一种非线性回归方法,拟合一个指数函数,形如y=a exp(bx)。指数回归通常用于增长率或衰减率随时间变化的场景,如人口增长、放射性衰变等。
# 指数回归(通过对数变换)
y_train_exp = np.log(y_train)
exp_reg = LinearRegression()
exp_reg.fit(X_train, y_train_exp)
y_pred = np.exp(exp_reg.predict(X_test))
print("指数回归 MSE:", mean_squared_error(y_test, y_pred))
7、自然对数回归
因变量和/或自变量被转换为自然对数形式。
对数-线性模型:ln(Y)=a+bX+ϵ
线性-对数模型:Y=a+bln(X)+ϵ
双对数模型:ln(Y)=a+bln(X)+ϵ
# 自然对数回归
y_train_log = np.log(y_train)
log_reg = LinearRegression()
log_reg.fit(X_train, y_train_log)
y_pred = np.exp(log_reg.predict(X_test))
print("自然对数回归 MSE:", mean_squared_error(y_test, y_pred)