Logistic Regression算法简析
原理
Logistic Regression是一种广义线性模型,用于处理二分类问题。它通过建立一个线性模型,并使用逻辑函数(sigmoid函数)将线性输出转换为概率值,从而对输入数据进行分类。
模型假设:
- 假设输入特征和输出类别之间存在线性关系。
- 用sigmoid函数将线性输出映射到0和1之间的概率值。
sigmoid函数:
sigmoid函数(也称为Logistic函数)定义如下:
1 | sigmoid(z) = 1 / (1 + exp(-z)) |
其中z是输入的线性输出。
梯度提升与梯度下降
梯度提升(Gradient Boosting)和梯度下降(Gradient Descent)是两个不同的机器学习概念,虽然它们都涉及梯度(Gradient)这一术语,但在方法和应用上有很大的区别。
梯度提升(Gradient Boosting):
梯度提升是一种集成学习技术,它通过将多个弱学习器(通常是决策树)进行串行训练,每次训练都尝试纠正前一轮训练中模型的错误,从而逐步提高整体模型的性能。这种技术通过迭代的方式构建一个强大的集成模型,每一步都关注先前模型的残差(预测值与真实值之间的差异),然后训练一个新的模型来纠正这些残差。梯度提升的主要代表算法是Gradient Boosting Machine(GBM)和XGBoost。
梯度下降(Gradient Descent):
梯度下降是一种用于优化目标函数的迭代优化算法。它的主要目标是在参数空间中找到目标函数的最小值点(或最大值点)。在机器学习中,这通常涉及到最小化损失函数,例如平方误差损失或交叉熵损失等。梯度下降的基本思想是通过计算目标函数关于参数的梯度(导数),朝着梯度的反方向调整参数,以使目标函数值逐步减小。梯度下降有多种变种,如批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-batch Gradient Descent)等。
主要区别:
- 梯度提升是一种集成学习算法,用于构建强大的预测模型,通过串行训练多个弱学习器来逐步提高整体模型的性能。
- 梯度下降是一种优化算法,用于找到目标函数的最小值点,通过计算梯度并朝着梯度的反方向调整参数来实现优化。
尽管它们涉及到梯度这个共同点,但是梯度提升和梯度下降是两个不同的概念,分别用于解决集成学习和优化问题。
优缺点
优点:
- 实现简单,计算效率高。
- 可解释性强,能够看到每个特征的权重对预测的影响。
- 在特征空间较简单的问题上表现良好。
缺点:
- 不能处理复杂的数据关系,对于非线性问题表现不佳。
- 对异常值比较敏感,容易受到噪声的影响。
- 不能直接处理多分类问题,通常需要使用一对多(One-vs-Rest)或Softmax等策略来扩展到多分类。
应用
Logistic Regression在许多领域有广泛的应用,尤其在二分类问题中常见,如:
- 垃圾邮件分类:判断一封邮件是否为垃圾邮件。
- 金融风险预测:预测客户是否有违约风险。
- 医学诊断:判断患者是否患有某种疾病。
- 自然语言处理:情感分析,判断文本的情感倾向。
涉及到的数学公式
假设函数:
逻辑回归的假设函数表示为:
$$ h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}} $$其中,
- $ h_\theta(x) $ 是根据输入特征 $ x $ 和模型参数 $ \theta $ 得到的预测值(类别为1的概率)。
- $ \theta $ 是模型的参数向量。
- $ \theta^T $ 表示 $ \theta $ 的转置。
- $ e $ 是自然对数的底数。
损失函数:
逻辑回归使用交叉熵损失函数来衡量预测值与真实类别之间的差异。对于二分类问题,交叉熵损失函数表示为:
$$ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$其中,
- $ J(\theta) $ 是损失函数。
- $ m $ 是训练样本的数量。
- $ x^{(i)} $ 表示第 $ i $ 个训练样本的特征向量。
- $ y^{(i)} $ 是第 $ i $ 个训练样本的真实类别(0或1)。
- $ h_\theta(x^{(i)}) $ 是根据假设函数预测的类别为1的概率。
梯度下降更新规则:
梯度下降的目标是最小化损失函数 $ J(\theta) $。为了更新模型参数 $ \theta $,我们需要计算损失函数对于每个参数的偏导数,然后根据梯度的方向和学习率来更新参数。更新规则如下:
$$ \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} $$其中,
- $ \alpha $ 是学习率(控制参数更新的步长)。
- $ \frac{\partial J(\theta)}{\partial \theta_j} $ 是损失函数对于参数 $ \theta_j $ 的偏导数。
对于逻辑回归,梯度下降的具体更新规则是:
$$ \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} $$其中,$ x_j^{(i)} $ 是第 $ i $ 个训练样本的第 $ j $ 个特征值。
通过不断迭代更新参数,梯度下降会使损失函数逐渐减小,从而找到最优的模型参数,使得逻辑回归模型能够较好地拟合训练数据并作出准确的预测。
案例:从疝气病症预测病马的死亡率
数据集
Python实现
1 | # -------从疝气病症预测病马的死亡率------ |
来源于 ApacheCN