弹性网络回归(Elastic Net Regression)
创始人
2025-01-08 04:36:42
0次

弹性网络回归(Elastic Net Regression)的详细理论知识推导

理论背景

弹性网络回归结合了岭回归(Ridge Regression)和Lasso回归(Lasso Regression)的优点,通过引入两个正则化参数来实现特征选择和模型稳定性。它解决了Lasso在处理高相关特征时的缺陷,并且在处理高维数据时表现优异。

数学公式

Elastic Net回归的损失函数如下:

其中:

推导

目标函数:Elastic Net的目标函数是均方误差(MSE)和两个正则化项的加权和。
梯度下降:通过梯度下降法求解目标函数的最小值,更新回归系数。


特征选择:L1正则化项可以将一些回归系数缩小为零,从而实现特征选择。


模型稳定性:L2正则化项增加了模型的稳定性,减少过拟合。

实施步骤

数据预处理:标准化或归一化数据。
拆分数据集:将数据集拆分为训练集和测试集。
模型训练:使用Elastic Net回归模型进行训练。
模型评估:使用测试集评估模型性能。

参数解读

未优化模型实例

import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import ElasticNet from sklearn.metrics import mean_squared_error, r2_score from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler  # 生成示例数据 np.random.seed(0) X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) * 0.5  # 数据分割为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 数据标准化 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test)  # 转换 y_train 和 y_test 为一维数组 y_train = y_train.ravel() y_test = y_test.ravel()  # 创建Elastic Net回归模型 elastic_net = ElasticNet(alpha=1.0, l1_ratio=0.5) elastic_net.fit(X_train_scaled, y_train)  # 进行预测 y_pred = elastic_net.predict(X_test_scaled)  # 模型评估 mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred)  print(f"Mean Squared Error: {mse}") print(f"R^2 Score: {r2}") print(f"Intercept: {elastic_net.intercept_}") print(f"Coefficients: {elastic_net.coef_}")  # 可视化结果 plt.scatter(X_test, y_test, color='blue', label='Actual') plt.plot(X_test, y_pred, color='red', label='Predicted') plt.xlabel("X") plt.ylabel("y") plt.title("Elastic Net Regression") plt.legend() plt.show() 

可视化展示

结果解释

Mean Squared Error (MSE): 表示预测值与实际值之间的平均平方误差。值越小,模型性能越好。

R^2 Score: 决定系数,度量模型的拟合优度。值越接近1,模型解释力越强。

Intercept: 截距,表示回归方程在y轴上的截距。

Coefficients: 回归系数,表示自变量对因变量的影响。

优化后的模型实例

from sklearn.linear_model import ElasticNetCV  # 创建带交叉验证的Elastic Net回归模型 elastic_net_cv = ElasticNetCV(alphas=np.logspace(-6, 6, 13), l1_ratio=np.linspace(0.1, 1.0, 10), cv=5) elastic_net_cv.fit(X_train_scaled, y_train)  # 进行预测 y_pred_cv = elastic_net_cv.predict(X_test_scaled)  # 模型评估 mse_cv = mean_squared_error(y_test, y_pred_cv) r2_cv = r2_score(y_test, y_pred_cv)  print(f"Best Alpha: {elastic_net_cv.alpha_}") print(f"Best L1 Ratio: {elastic_net_cv.l1_ratio_}") print(f"Mean Squared Error (CV): {mse_cv}") print(f"R^2 Score (CV): {r2_cv}") print(f"Intercept (CV): {elastic_net_cv.intercept_}") print(f"Coefficients (CV): {elastic_net_cv.coef_}")  # 可视化结果 plt.scatter(X_test, y_test, color='blue', label='Actual') plt.plot(X_test, y_pred_cv, color='red', label='Predicted') plt.xlabel("X") plt.ylabel("y") plt.title("Elastic Net Regression with Cross-Validation") plt.legend() plt.show() 

可视化展示

结果解释

  • Best Alpha: 通过交叉验证选择的最佳正则化参数。
  • Best L1 Ratio: 通过交叉验证选择的最佳L1正则化比例。
  • Mean Squared Error (CV): 交叉验证后的均方误差。
  • R^2 Score (CV): 交叉验证后的决定系数。
  • Intercept (CV): 交叉验证后的截距。
  • Coefficients (CV): 交叉验证后的回归系数。

通过比较两个实例,可以看出优化后的模型通过交叉验证选择了最佳的正则化参数,从而提高了模型的预测性能和泛化能力。

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...