《机器学习实战》5.Logistic回归源码实现

本文详细介绍了Logistic回归的基本思想、优缺点,以及使用梯度上升法寻找最佳分类回归系数的过程。通过源码分析,探讨了批量梯度上升和随机梯度上升的区别,并展示了在疝气病症预测病马死亡率问题上的应用。同时,讨论了处理数据缺失值的方法和实际应用中优化算法的选择。
摘要由CSDN通过智能技术生成

结合源码分析第五章中实现的Demo

运行环境:Anaconda——Jupyter Notebook

Python版本为:3.6.2(原书代码实现为2.x 所以在一些代码上略有改动)

参考资料:

Apachecn 专注于优秀项目维护的开源组织

Hands-On Machine Learning with Scikit-Learn and TensorFlow

阅读本文你将获得如下知识:

  • 1.LR的基本思想
  • 2.LR的优缺点
  • 3.用于求解无约束条件的最优化方法——GD以及SGD
  • 4.处理数据集中缺失值的基本思路
  • 5.一个具体的实例,了解LR使用的整个流程

前言

Logistic回归其实更常被用作在分类中。它与传统的线性回归模型相比,多了一步将输出值映射到Sigmoid函数上,进而得到一个范围在0~1之间的数值。我们可以定义大于0.5的数据为1(正)类,而小于0.5被归为0(负)类。由于函数本身的特殊性质,它更加稳定,并且它本质上仍然是线性模型。

优点:
* 计算代价不高,容易理解和实现

缺点:
* 容易欠拟合,分类精度可能不高

我们来具体看一下这个函数的样子:

那么LR的训练过程做了什么呢?就是找到一个最佳的分类回归系数(Weights)

我们将Sigmoid函数的输入记作Z,现实中,某事件的发生一般都是与多种因素相关联的,所以:

Z=W0X0 + W1X1 + … +WnXn 我们可以写成向量的形式:

所以这里的W就是我们要找的最佳分类回归系数啦。

如何寻找该系数呢?这里我们使用梯度下降(上升)法这里下降与上升只是一个符号的区别,但是本质上都是沿着该函数的梯度方向探寻,这里讲了方向,并未讲到移动量的大小。我们可以称其为步长a。这里步长的选取是有说法的,如果选取太大会导致结果发散;如果选取得太小呢又会使得时间复杂度很高。

停止条件呢?通常我们可以设置迭代次数,也可以设置一个迭代终止的误差条件。


使用梯度上升找到最佳参数

from numpy import *
import matplotlib.pyplot as plt
#Logistic回归梯度上升优化算法
#读取数据
def loadDataSet():
    dataMat = []
    labelMat = []
    fr = open('TestSet.txt')
    for line in fr.readlines():
        lineArr = line.strip().split('\t')
        # 为了方便计算,我们将 X0 的值设为 1.0 ,也就是在每一行的开头添加一个 1.0 作为 X0
        dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
        labelMat.append(int(lineArr[2]))
    return dataMat, labelMat

#定义sigmoid函数
def sigmoid(inX):
    return 1.0/(1+exp(-inX))

#输入数据特征与数据的类别标签
#返回最佳回归系数(weights)
def gradAscent(dataMatIn, classLabels):
    #转换为numpy型
    dataMatrix = mat(dataMa
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值