机器学习实战第五章(Chapter5):Logistic回归-程序原理详解

简介: 这一个章节中作者主要运用了Logistic回归分类器进行分类,分类器的函数形式是Sigmoid函数,过程可以概括为:每个输入特征乘以一个回归系数,然后将所有的结果值相加,将总和带入Sigmoid函数中进行分类,整个过程也可以被看成概率估计。

这一个章节中作者主要运用了Logistic回归分类器进行分类,分类器的函数形式是Sigmoid函数,过程可以概括为:每个输入特征乘以一个回归系数,然后将所有的结果值相加,将总和带入Sigmoid函数中进行分类,整个过程也可以被看成概率估计。

首先先来看书中的一段程序(程序5-1 Logistic回归梯度上升优化算法)

#此函数的作用是读取数据集文件,将数据分别存于两个列表中,在函数最后返回
def LoadDataSet(): #加载数据信息函数
    dataMat = []   #创建空列表
    labelMat = []  #同上
    fr = open('machinelearninginaction/Ch05/testSet.txt')
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
        labelMat.append(int(lineArr[2]))
    return dataMat, labelMat


def Sigmoid(inX):
    return 1.0/(1+exp(-inX))

#梯度上升优化算法
def GradAscent(dataMatIn, classLabels):
    dataMatrix = mat(dataMatIn)        #numpy中的array转(mat)矩阵函数
    labelMat = mat(classLabels).transpose() #同上,另外转置
    m,n = shape(dataMatrix)
    alpha = 0.001          #梯度移动步长
    maxCycles = 500        #移动循环次数
    weights = ones((n, 1))
    for k in range(maxCycles):              
        h = Sigmoid(dataMatrix * weights)     #回归系数与数据向量相乘带入Sigmoid函数中,得到h,注意h是向量
        error = (labelMat - h)         #误差为标记值(labelMat)-预测值(h)       
        weights = weights + alpha * dataMatrix.transpose()* error #这个为梯度更新公式,后文介绍
    return weights

执行代码如下,这里省略了import。

if __name__ == "__main__":
    dataArr, labelMat = logRegres.LoadDataSet()
    weights = logRegres.GradAscent(dataArr, labelMat)
    logRegres.PlotBestFit(weights.getA())

上述方程实现的步骤:
1、初始化回归系数;
2、计算整个数据集的梯度;
3、使用alpha*gradient更新回归系数的向量
4、返回回归系数
5、重复2-4步骤R次


设置断点,将程序的debug一下,可以发现:
在LoadDataSet函数中dataArr和labelMat分别为二维列表和一维列表
这里写图片描述

这里写图片描述
而在GradAscent函数中,dataArr和labelMat变化为100*3和1*100的矩阵,过程中的乘法是矩阵运算不是单独的变量运算。
这里写图片描述
现在来介绍程序中涉及到的知识点:

Sigmoid函数

Sigmoid的函数形式为这里写图片描述
相比于阶跃函数,Sigmoid函数具有在突变处较平滑、数学上好处理的特点。

下面两个图片为Sigmoid函数在不同尺度下的函数图:

这里写图片描述
这里写图片描述

可以看到只要尺度足够大,在x=0点处Sigmoid函数看起来就像阶跃函数一样。
程序中是将回归系数(weights)与数据集相乘(dataMatrix),带入sigmoid函数中得到一个0-1的数(h),h将会与标记值进行比较(label),标记值即准确值,h即预测值,它们两个之间的差距越小代表预测越准确,所以程序的目的主要是使error(误差)变得最小,这就是梯度进行移动的目的。

递推公式

上面程序中有一段程序:

 weights = weights + alpha * dataMatrix.transpose()* error

文中并没有进行推导,这里借用吴恩达老师的机器学习课来说明一下
首先来说明一下损失函数,损失函数说白了就是预测值与标记值的均平方和,当预测值与标记值愈加相同时,损失函数的返回值越小
这里写图片描述


而我们程序中的需要改变weights(回归系数)来达到最佳的分类效果,在这个程序中我们的weights中有很多参数(大于等于2),这里就用到了这个公式:
这里写图片描述
这个公式在书中也进行了讲解,只不过书中讲解较为简单,上式中为两个参数的梯度移动公式,吴恩达老师的意思是这两个参数应该同时变化:
这里写图片描述
进而推导出以下的式子,这是一个递推式子。
这里写图片描述
进行推导:
这里写图片描述
最终化为如下的式子:
这里写图片描述
上式就是程序中那个递推公式。这里只是简单的公式推导,具体的请大家看吴恩达老师的机器学习课程,讲解的比较详细。
https://www.coursera.org/learn/machine-learning/lecture/zcAuT/welcome-to-machine-learning


程序运行后,得到如下的图像:
这里写图片描述

目录
相关文章
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
454 7
|
9月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
727 46
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
12月前
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
742 3
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 数据采集 分布式计算
大数据分析中的机器学习基础:从原理到实践
大数据分析中的机器学习基础:从原理到实践
650 3
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
R1类模型推理能力评测手把手实战
399 2
|
人工智能 自然语言处理 网络安全
基于阿里云 Milvus + DeepSeek + PAI LangStudio 的低成本高精度 RAG 实战
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
1084 2
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
810 3