机器学习-06 基于sklearn 广义线性模型- 弹性网络

弹性网络是结合岭回归和Lasso回归优点的线性模型,适用于特征间高度相关的数据。它通过L1和L2范数进行正则化,既能处理稀疏矩阵又保持正则化效果。在sklearn中,可以使用ElasticNet类进行模型训练和预测。

机器学习-06 基于sklearn 广义线性模型- 弹性网络

弹性网络

我们前面学习了岭回归和Lasso回归,其中岭回归通过添加系数惩罚项,减小了系数之间的关联性,Lasso回归可以解决稀疏矩阵的情况。
弹性网络综合了岭回归和lasso回归的优势,可以拟合稀疏矩阵也保持了岭回归的正则性质。它使用使用 L1, L2 范数作为先验正则项训练的线性回归模型。 在面对特征之间相关性较高的情况时,弹性网络表现良好。Lasso 很可能只随机考虑这些特征中的一个,而弹性网络更倾向于选择两个。
最小化的目标函数是:
m i n   w 1 2 n s a m p l e s ∣ ∣ X w − y ∣ ∣ 2 2 + α ρ ∣ ∣ w ∣ ∣ 1 + α ( 1 − ρ ) 2 ∣ ∣ w ∣ ∣ 2 2 \underset{w}{min\,} { \frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + \alpha \rho ||w||_1 +\frac{\alpha(1-\rho)}{2} ||w||_2 ^ 2} wmin2nsamples1

### Python 机器学习广义线性模型入门 #### 广义线性模型概述 广义线性模型(Generalized Linear Models, GLM)是一类用于解决回归和分类问题的统计方法。它通过定义目标变量与输入特征之间的线性关系来建模,并允许扩展到更复杂的场景,如正则化回归、逻辑回归等[^2]。 在Python中,`scikit-learn`库提供了丰富的工具支持广义线性模型的应用。该库实现了多种变体,包括但不限于普通最小二乘法(Ordinary Least Squares)、岭回归(Ridge Regression)、Lasso回归、弹性网络(Elastic Net),以及适用于分类任务的Logistic回归[^3]。 --- #### 普通最小二乘法 (OLS) 普通最小二乘法是最基础的线性回归形式,其核心思想是找到一条直线使得预测值与真实值之间的误差平方和达到最小。具体而言,给定一组训练样本 \((X, y)\),模型的目标是最小化损失函数: \[ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x_i) - y_i)^2 \] 其中 \(h_\theta(x_i)\) 表示模型对第\(i\)个样本的预测值,而\(y_i\) 是对应的真实标签[^4]。 以下是基于 `scikit-learn` 的 OLS 实现代码: ```python from sklearn.linear_model import LinearRegression import numpy as np # 构造简单数据集 X = np.array([[1], [2], [3]]) y = np.array([2, 4, 6]) # 创建并拟合模型 model = LinearRegression() model.fit(X, y) print(f"系数: {model.coef_}") print(f"截距: {model.intercept_}") ``` --- #### 岭回归 (Ridge Regression) 为了防止过拟合,可以引入 L2 正则项约束权重参数的大小。这种改进后的模型称为岭回归。它的优化目标变为: \[ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x_i) - y_i)^2 + \alpha ||\theta||_2^2 \] 其中 \(\alpha\) 控制正则化的强度。 下面是实现 Ridge 回归的一个例子: ```python from sklearn.linear_model import Ridge # 使用相同的 X 和 y 数据 ridge_model = Ridge(alpha=0.5) ridge_model.fit(X, y) print(f"岭回归系数: {ridge_model.coef_}") print(f"岭回归截距: {ridge_model.intercept_}") ``` --- #### Lasso 回归 Lasso 回归通过加入 L1 正则项进一步增强稀疏性,从而自动筛选重要特征。其目标函数如下所示: \[ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x_i) - y_i)^2 + \alpha ||\theta||_1 \] 由于 L1 范数的存在,部分不重要的特征会被赋予零权值。 以下是一个简单的 Lasso 回归实例: ```python from sklearn.linear_model import Lasso lasso_model = Lasso(alpha=0.1) lasso_model.fit(X, y) print(f"Lasso 系数: {lasso_model.coef_}") print(f"Lasso 截距: {lasso_model.intercept_}") ``` --- #### Logistic 回归 对于分类问题,广义线性模型可以通过链接函数将连续输出映射至概率空间。最常用的连接方式是对数几率函数(logit function)。此时,模型的形式为: \[ P(y=1|x; \theta) = g(h_\theta(x)) = \frac{1}{1 + e^{-h_\theta(x)}} \] 这里 \(g(z)\) 定义了 Sigmoid 函数。 下面展示了一个二元分类的例子: ```python from sklearn.linear_model import LogisticRegression # 修改 y 为目标类别 y_binary = np.array([0, 0, 1]) logistic_model = LogisticRegression(solver='liblinear') logistic_model.fit(X, y_binary) print(f"逻辑回归系数: {logistic_model.coef_}") print(f"逻辑回归截距: {logistic_model.intercept_}") ``` --- #### 总结 上述内容涵盖了广义线性模型的基础理论及其在 Python 中的具体应用。无论是处理数值型数据还是离散型数据,这些技术都具有广泛的适用性和高效的表现力[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值