线性回归模型sklearn.LinearRegression()原理解析

本文介绍了sklearn线性回归模型的原理,基于最小二乘法的线性回归用于数据拟合,寻找数据间的规律。线性回归模型通过调整直线的斜率和截距最小化残差平方和RSS。讨论了MSE作为优化目标,以及当涉及多个变量时如何使用最小二乘法和梯度下降算法求解函数系数。

 一、模型原理

Linear Rgegrssion基于最小二乘法的线性回归。是机器学习算法里面的基本算法,在sklearn.linear_model 的包里面。它能解决的问题是通过数据拟合,从而得到比较符合事物内部规律的数学表达式。也就是说寻找到数据与数据之间的规律所在。例如对于房价的预测。

二、线性回归的原理表示

我们先从最简单的函数看起,在只有一个变量的情况下,线性回归可以用方程:y = ax+b 表示。

Linear Regression模型会去不断的去调整下图直线的斜率和截距,使得残差平方和Residual sum of Squares(RSS)最小。

这里残差平方是指下图中同一个x坐标下,实际点位置的y轴数值减去拟合直线上y轴数值 的平方,将所有点的残差平方加起来就出来了RSS。

将RSS处以数据数量就得出了MSE,这是一个重要的参数。Model Fitting的目标就是最小化MSE。 

 一级行函数我们可以求导,那很多个变量的多级函数怎么求函数的系数呢?

一个是用最小二乘法(Ordinary Least Square),拟合一个带有系数** w = (w1, ..., wp) **的线性模型去最小化其预测结果与实际结果的残差平方和。它的公式为:

<think> 我们正在讨论使用scikit-learn中的LogisticRegression模型,并关注参数penalty='l2', C=1.0, max_iter=1000的含义。 首先,我们需要了解逻辑回归的基本概念:它是一种用于解决二分类问题的模型(虽然也可以通过扩展解决多分类问题),通过sigmoid函数将线性回归的结果映射到(0,1)之间,表示概率。 参数解释: 1. penalty:正则化类型,用于防止过拟合。'l2'表示使用L2正则化(岭回归),还有'l1'(Lasso)等选项。 2. C:正则化强度的倒数。C值越小,正则化强度越大。默认值为1.0。 3. max_iter:求解器(solver)的最大迭代次数。对于某些求解器,可能需要更多迭代才能收敛。 代码示例: 我们将展示一个完整的流程,包括数据标准化(如前所述)和逻辑回归模型的训练。 注意:在scikit-learn中,LogisticRegression默认使用L2正则化,因此我们设置的参数与默认值大部分相同,除了max_iter我们设置为1000(默认是100,有时候不够,所以增加以确保收敛)。 步骤: 1. 数据预处理(标准化) 2. 创建LogisticRegression模型,指定参数 3. 训练模型 4. 评估模型 下面我们详细解释代码逻辑。 </think> ### Scikit-learn `LogisticRegression` 参数详解与应用 以下是使用 `LogisticRegression` 的核心代码及参数解析(基于 `penalty='l2', C=1.0, max_iter=1000`): ```python from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline # 构建管道:标准化 + 逻辑回归 pipeline = make_pipeline( StandardScaler(), # 数据标准化 LogisticRegression( penalty='l2', # 正则化类型 C=1.0, # 正则化强度 max_iter=1000, # 最大迭代次数 random_state=42 # 随机种子 ) ) # 模型训练 pipeline.fit(X_train_scaled, y_train) # 自动处理标准化 # 预测与评估 y_pred = pipeline.predict(X_test_scaled) ``` --- #### 参数深度解析 | 参数 | 默认值 | 数学含义 | 作用机制 | 调优建议 | |------|--------|----------|----------|----------| | **`penalty='l2'`** | `'l2'` | L2正则化项:$\min \sum_{i=1}^{n} \left[ y_i \ln(p_i) + (1-y_i)\ln(1-p_i) \right] + \alpha \|\boldsymbol{\beta}\|_2^2$ | 惩罚大权重系数,防止过拟合 | • 特征多/共线性强:优先 `'l1'`<br>• 一般场景:`'l2'` | | **`C=1.0`** | `1.0` | 正则化强度倒数:$C = \frac{1}{\alpha}$ | • $C$↑:正则化↓,模型更复杂<br>• $C$↓:正则化↑,模型更简单 | • 过大($C>10$):过拟合风险<br>• 过小($C<0.01$):欠拟合风险 | | **`max_iter=1000`** | `100` | 优化迭代次数上限 | 求解损失函数:$\min_{\boldsymbol{\beta}} \sum_{i=1}^{n} \mathcal{L}(y_i, \boldsymbol{\beta}^T \mathbf{x}_i)$ | • 数据量大/特征多:增至 `1000-5000`<br>• 收敛警告时需增加 | | `random_state=42` | `None` | 随机数种子 | 控制权重初始化随机性 | 固定值确保结果可复现 | --- #### 核心数学原理 1. **逻辑函数** 将线性组合映射到概率: $$ p(y=1|\mathbf{x}) = \frac{1}{1 + e^{-\boldsymbol{\beta}^T \mathbf{x}}} $$ 2. **损失函数** 交叉熵损失 + 正则化项: $$ \mathcal{J}(\boldsymbol{\beta}) = -\sum_{i=1}^{n} \left[ y_i \ln(p_i) + (1-y_i)\ln(1-p_i) \right] + \alpha \|\boldsymbol{\beta}\|_2^2 \quad (\text{L2 正则化}) $$ 3. **优化过程** 使用拟牛顿法(如 `lbfgs` 求解器)迭代更新 $\boldsymbol{\beta}$: $$ \boldsymbol{\beta}^{(k+1)} = \boldsymbol{\beta}^{(k)} - \mathbf{H}^{-1} \nabla \mathcal{J}(\boldsymbol{\beta}^{(k)}) $$ 其中 $\mathbf{H}$ 为Hessian矩阵,$k$ 为迭代步数。 --- #### 应用场景与最佳实践 1. **正则化选择** - `penalty='l1'`:适合特征选择(产生稀疏解) - `penalty='l2'`:适合处理共线性特征(默认推荐)[^1] 2. **$C$ 值调优** 网格搜索策略: ```python from sklearn.model_selection import GridSearchCV params = {'logisticregression__C': [0.001, 0.01, 0.1, 1, 10, 100]} grid = GridSearchCV(pipeline, params, cv=5).fit(X_train, y_train) ``` 3. **收敛问题处理** - 增大 `max_iter` - 缩放特征(如使用 `StandardScaler`) - 更换求解器(如 `solver='sag'` 适用于大数据) 4. **多分类扩展** 自动应用 One-vs-Rest 策略: ```python LogisticRegression(multi_class='ovr') # 默认支持多分类 ``` --- #### 典型输出示例 ```python print(pipeline.named_steps['logisticregression'].coef_) # 查看系数 # 输出示例:[[ 0.82, -1.23, 0.54, ... ]] print(pipeline.score(X_test_scaled, y_test)) # 准确率 # 输出示例:0.872 ``` > **系数解读**: > 正系数表示特征与正类正相关(如 `0.82`) > 负系数表示特征与正类负相关(如 `-1.23`) --- ### 总结 `LogisticRegression` 的核心优势在于: 1. **正则化控制**:通过 `penalty` 和 `C` 平衡偏差-方差[^1] 2. **高效优化**:`max_iter` 确保复杂数据集的收敛性 3. **概率输出**:支持 `predict_proba()` 获取类别概率 结合 `Pipeline` 使用可确保预处理与模型训练的原子性,避免数据泄露风险[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值