【机器学习】机器学习实战-Logistic回归

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

概述

我们在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被分入1类,小于0.5的被归入0类。所以此种回归也可以被看成是一种概率估计。

  • 优点:计算代价不高,易于理解和实现
  • 缺点:容易欠拟合,分类精度可能不高
  • 适用数据范围:数值型和标称型

一般过程

  1. 收集数据:任意
  2. 准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外结构化数据格式则最佳
  3. 分析数据:任意
  4. 训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数
  5. 测试算法:一旦训练步骤完成,分类将会很快。
  6. 使用算法:首先,需要输入一些数据,并将其转换成对应的结构化数值;基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定它们属于哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作

Sigmoid函数

在两个类的情况下,函数输出0或1。这样的函数有单位阶跃函数,但在数学上不易处理,所以我们引入具有相似性质的Sigmoid函数:

基于最优化方法的最佳回归系数确定

梯度上升法

  • 基本思想,要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻
  • 梯度上升算法到达每个点后都会重新估计移动的方向。循环迭代直到满足停止条件。迭代的过程中,梯度片子总是保证我们能选取到最佳的移动方向。
  • 迭代公式
具体实现

【logRegres.py】

每个回归系数初始化为1
重复R次:
计算整个数据集的梯度
使用alpha*gradient更新回归系数的向量
返回回归系数

梯度下降算法

  • 求函数的最小值
  • 迭代公式

分析数据:画出决策边界

【logRegres.py】

训练算法:随机梯度上升

梯度上升算法在每次更新回归系数时都需要遍历整个数据集,计算复杂度太高。故引入随机梯度上升算法。

  • 随机梯度上升算法:一次仅用一个样本点来更新回归系数。

每个回归系数初始化为1
对数据集中每个样本:
计算该样本的梯度
使用alpha*gradient更新回归系数的向量
返回回归系数

为什么在随机梯度上升算法中,回归系数存在局部的波动现象?梯度上升算法中是否存在这种现象?

存在一些不能正确分类的样本点(数据集并非线性可分),在每次迭代时会引发系数的剧烈改变。

如何避免来回波动并加快收敛速度?

【stocGradAscent1】

  • 使alpha在每次迭代的时候都会调整,可以减少高频波动。(为什么可以?)—也常用于模拟退火算法等其他优化算法中。
  • 通过随机选取样本来更新回归系数,可以减少周期性的波动。(为什么可以?)

e.g. 预测病马死亡率

如何处理数据中的缺失值?
  • 使用可用特征的均值来填补缺失值;
  • 使用特殊值来填补缺失值,如-1;
  • 忽略有缺失值的样本
  • 使用相似样本的均值添补缺失值;
  • 使用另外的机器学习算法预测缺失值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值