【sklearn第八讲】广义线性模型

本文介绍了Python中的广义线性模型,包括普通最小二乘、岭回归、Lasso、弹性网格和Logistic回归。通过各种正则化方法解决线性模型中的多重共线性问题,并探讨了如何设置正则参数,如使用广义交叉验证和信息准则进行模型选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

在下面的公式里,目标值是输入变量的线性组合,数学上,y^\hat{y}y^ 是预测值。
y^(w,x)=w0+w1x1+⋯+wpxp\hat{y}(w, x)=w_0+w_1x_1+\dots+w_px_py^(w,x)=w0+w1x

### 线性回归的使用与原理 线性回归是一种用于解决回归问题的基本机器学习方法,其目标是通过构建一个线性模型来预测连续值输出。该模型的核心思想是找到输入变量(特征)和输出变量(目标)之间的线性关系[^1]。 #### 1. 线性回归简介 线性回归试图用一个线性方程来描述输入变量 \(x\) 和输出变量 \(y\) 的关系。对于单变量线性回归,模型可以表示为: \[ y = \theta_0 + \theta_1 x \] 其中,\(\theta_0\) 是截距,\(\theta_1\) 是斜率。对于多变量线性回归,模型扩展为: \[ y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n \] 这里,\(x_1, x_2, \ldots, x_n\) 表示输入变量,\(\theta_0, \theta_1, \ldots, \theta_n\) 表示模型参数[^2]。 #### 2. 损失函数 为了衡量模型预测值与真实值之间的差距,线性回归通常使用均方误差(MSE)作为损失函数: \[ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 \] 其中,\(h_\theta(x)\) 表示模型的预测值,\(y^{(i)}\) 表示第 \(i\) 个样本的真实值,\(m\) 表示样本数量[^3]。 #### 3. 求解方法 线性回归可以通过以下两种主要方法求解模型参数: - **标准方程法** 标准方程法通过解析方式直接求解最优参数,公式为: \[ \theta = (X^T X)^{-1} X^T y \] 这种方法的优点是计算结果精确,但当特征数量较多时,矩阵求逆的计算复杂度较高[^4]。 - **梯度下降法** 梯度下降法是一种迭代优化算法,通过不断调整参数以最小化损失函数。更新规则为: \[ \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta) \] 其中,\(\alpha\) 是学习率,控制每次迭代的步长[^5]。 #### 4. 正则化 为了避免过拟合,线性回归可以通过引入正则化项来约束模型复杂度。常见的正则化方法包括: - **Lasso(L1正则)** 在损失函数中加入参数绝对值的惩罚项,能够促使部分参数变为零,从而实现特征选择。 - **Ridge(L2正则)** 在损失函数中加入参数平方的惩罚项,能够减小参数的取值范围,降低模型复杂度。 - **Elastic-net(L1与L2结合)** 同时包含 L1 和 L2 正则化项,能够在特征选择和模型简化之间取得平衡[^6]。 #### 5. 非线性回归 当数据之间的关系是非线性时,可以通过多项式回归或广义线性回归等方法扩展线性模型的能力。例如,多项式回归将输入特征扩展为高次幂形式,从而拟合更复杂的曲线[^7]。 ```python # 使用 sklearn 实现线性回归 from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 示例数据 X = [[1], [2], [3], [4], [5]] y = [2, 4, 6, 8, 10] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建线性回归模型 model = LinearRegression() model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) # 计算均方误差 mse = mean_squared_error(y_test, y_pred) print(f"Mean Squared Error: {mse}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值