概述
我们在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被分入1类,小于0.5的被归入0类。所以此种回归也可以被看成是一种概率估计。
- 优点:计算代价不高,易于理解和实现
- 缺点:容易欠拟合,分类精度可能不高
- 适用数据范围:数值型和标称型
一般过程
- 收集数据:任意
- 准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外结构化数据格式则最佳
- 分析数据:任意
- 训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数
- 测试算法:一旦训练步骤完成,分类将会很快。
- 使用算法:首先,需要输入一些数据,并将其转换成对应的结构化数值;基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定它们属于哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作
Sigmoid函数
在两个类的情况下,函数输出0或1。这样的函数有单位阶跃函数,但在数学上不易处理,所以我们引入具有相似性质的Sigmoid函数:
基于最优化方法的最佳回归系数确定
梯度上升法
- 基本思想,要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻
- 梯度上升算法到达每个点后都会重新估计移动的方向。循环迭代直到满足停止条件。迭代的过程中,梯度片子总是保证我们能选取到最佳的移动方向。
- 迭代公式
具体实现
【logRegres.py】
每个回归系数初始化为1
重复R次:
计算整个数据集的梯度
使用alpha*gradient更新回归系数的向量
返回回归系数
梯度下降算法
- 求函数的最小值
- 迭代公式
分析数据:画出决策边界
【logRegres.py】
训练算法:随机梯度上升
梯度上升算法在每次更新回归系数时都需要遍历整个数据集,计算复杂度太高。故引入随机梯度上升算法。
- 随机梯度上升算法:一次仅用一个样本点来更新回归系数。
每个回归系数初始化为1
对数据集中每个样本:
计算该样本的梯度
使用alpha*gradient更新回归系数的向量
返回回归系数
为什么在随机梯度上升算法中,回归系数存在局部的波动现象?梯度上升算法中是否存在这种现象?
存在一些不能正确分类的样本点(数据集并非线性可分),在每次迭代时会引发系数的剧烈改变。
如何避免来回波动并加快收敛速度?
【stocGradAscent1】
- 使alpha在每次迭代的时候都会调整,可以减少高频波动。(为什么可以?)—也常用于模拟退火算法等其他优化算法中。
- 通过随机选取样本来更新回归系数,可以减少周期性的波动。(为什么可以?)
e.g. 预测病马死亡率
如何处理数据中的缺失值?
- 使用可用特征的均值来填补缺失值;
- 使用特殊值来填补缺失值,如-1;
- 忽略有缺失值的样本
- 使用相似样本的均值添补缺失值;
- 使用另外的机器学习算法预测缺失值。

本文深入探讨了逻辑回归算法的工作原理,包括Sigmoid函数的应用、梯度上升和下降法的优化过程,以及如何处理数据集中的缺失值。通过具体实例,如预测病马的死亡率,展示了算法的实施步骤。

被折叠的 条评论
为什么被折叠?



