逻辑回归原理_逻辑回归代码

逻辑回归原理_逻辑回归代码此文章为初学机器学习时,对AndrewNG《机器学习》课程整理所写,也参考了其他CSDN同学的笔记,写的较为粗糙,很多网友帮助我指正了问题,现在重新更新向量化部分,并加入实践篇。什么是逻辑回归?Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedli…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

此文章为初学机器学习时,对Andrew NG《机器学习》课程整理所写,也参考了其他CSDN同学的笔记,写的较为粗糙,很多网友帮助我指正了问题,现在重新更新向量化部分,并加入实践篇。


什么是逻辑回归?

Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。

这一家族中的模型形式基本上都差不多,不同的就是因变量不同。

  • 如果是连续的,就是多重线性回归;
  • 如果是二项分布,就是Logistic回归;
  • 如果是Poisson分布,就是Poisson回归;
  • 如果是负二项分布,就是负二项回归。

Logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最常用的就是二分类的Logistic回归。

Logistic回归的主要用途:

  • 寻找危险因素:寻找某一疾病的危险因素等;
  • 预测:根据模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大;
  • 判别:实际上跟预测有些类似,也是根据模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。

Logistic回归主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是是否胃癌,即“是”或“否”,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。

 

常规步骤

Regression问题的常规步骤为:

  1. 寻找h函数(即hypothesis);
  2. 构造J函数(损失函数);
  3. 想办法使得J函数最小并求得回归参数(θ)

构造预测函数h

Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数),函数形式为:

逻辑回归原理_逻辑回归代码

Sigmoid 函数在有个很漂亮的“S”形,如下图所示(引自维基百科):

 逻辑回归原理_逻辑回归代码

下面左图是一个线性的决策边界,右图是非线性的决策边界。

逻辑回归原理_逻辑回归代码

 

对于线性边界的情况,边界形式如下:

逻辑回归原理_逻辑回归代码

构造预测函数为:

逻辑回归原理_逻辑回归代码

函数逻辑回归原理_逻辑回归代码的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

逻辑回归原理_逻辑回归代码

 

构造损失函数J

Cost函数和J函数如下,它们是基于最大似然估计推导得到的。

逻辑回归原理_逻辑回归代码

 

下面详细说明推导的过程:

(1)式综合起来可以写成:

逻辑回归原理_逻辑回归代码

取似然函数为:

逻辑回归原理_逻辑回归代码

对数似然函数为:

逻辑回归原理_逻辑回归代码

最大似然估计就是求使逻辑回归原理_逻辑回归代码取最大值时的θ,其实这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。但是,在Andrew Ng的课程中将逻辑回归原理_逻辑回归代码取为下式,即:

逻辑回归原理_逻辑回归代码

因为乘了一个负的系数-1/m,所以取逻辑回归原理_逻辑回归代码最小值时的θ为要求的最佳参数。

 

梯度下降法求的最小值

θ更新过程:

逻辑回归原理_逻辑回归代码

逻辑回归原理_逻辑回归代码

θ更新过程可以写成:

逻辑回归原理_逻辑回归代码

向量化Vectorization

Vectorization是使用矩阵计算来代替for循环,以简化计算过程,提高效率。

如上式,Σ(…)是一个求和的过程,显然需要一个for语句循环m次,所以根本没有完全的实现vectorization。

下面介绍向量化的过程:

假设模型:

逻辑回归原理_逻辑回归代码

公式为:

逻辑回归原理_逻辑回归代码

将上述公式向量化:

逻辑回归原理_逻辑回归代码

其中逻辑回归原理_逻辑回归代码 ,由于(h-y)维度是m*1,X也是m*1,所以需对X转置。

具体推导过程请参考:Vectorized Logistic Regression

 

正则化Regularization

过拟合问题

对于线性回归或逻辑回归的损失函数构成的模型,可能会有些权重很大,有些权重很小,导致过拟合(就是过分拟合了训练数据),使得模型的复杂度提高,泛化能力较差(对未知数据的预测能力)。

下面左图即为欠拟合,中图为合适的拟合,右图为过拟合。

逻辑回归原理_逻辑回归代码

 

问题的主因

过拟合问题往往源自过多的特征。

解决方法

1)减少特征数量(减少特征会失去一些信息,即使特征选的很好)

  • 可用人工选择要保留的特征;
  • 模型选择算法;

2)正则化(特征较多时比较有效)

  • 保留所有特征,但减少θ的大小

 

正则化方法

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化项就越大。

从房价预测问题开始,这次采用的是多项式回归。左图是适当拟合,右图是过拟合。

逻辑回归原理_逻辑回归代码

 

直观来看,如果我们想解决这个例子中的过拟合问题,最好能将逻辑回归原理_逻辑回归代码的影响消除,也就是让逻辑回归原理_逻辑回归代码。假设我们对逻辑回归原理_逻辑回归代码进行惩罚,并且令其很小,一个简单的办法就是给原有的Cost函数加上两个略大惩罚项,例如:

逻辑回归原理_逻辑回归代码

这样在最小化Cost函数的时候,逻辑回归原理_逻辑回归代码

正则项可以取不同的形式,在回归问题中取平方损失,就是参数的L2范数,也可以取L1范数。取平方损失时,模型的损失函数变为:

逻辑回归原理_逻辑回归代码

 

lambda是正则项系数:

  • 如果它的值很大,说明对模型的复杂度惩罚大,对拟合数据的损失惩罚小,这样它就不会过分拟合数据,在训练数据上的偏差较大,在未知数据上的方差较小,但是可能出现欠拟合的现象;
  • 如果它的值很小,说明比较注重对训练数据的拟合,在训练数据上的偏差会小,但是可能会导致过拟合。

正则化后的梯度下降算法θ的更新变为:

逻辑回归原理_逻辑回归代码

正则化后的线性回归的Normal Equation的公式为:

逻辑回归原理_逻辑回归代码

 

其他优化算法

  • Conjugate gradient method(共轭梯度法)
  • Quasi-Newton method(拟牛顿法)
  • BFGS method
  • L-BFGS(Limited-memory BFGS)

后二者由拟牛顿法引申出来,与梯度下降算法相比,这些算法的优点是:

  • 第一,不需要手动的选择步长;
  • 第二,通常比梯度下降算法快;

但是缺点是更复杂。

 

多类分类问题

对于多类分类问题,可以将其看做成二类分类问题:保留其中的一类,剩下的作为另一类。

对于每一个类 i 训练一个逻辑回归模型的分类器逻辑回归原理_逻辑回归代码,并且预测y = i时的概率;对于一个新的输入变量x, 分别对每一个类进行预测,取概率最大的那个类作为分类结果:

逻辑回归原理_逻辑回归代码

  逻辑回归原理_逻辑回归代码

参考链接

 http://blog.csdn.net/dongtingzhizi/article/details/15962797

Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”

Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)” 

Vectorized Logistic Regression
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230738.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月18日 下午11:43
下一篇 2025年6月19日 上午7:22


相关推荐

  • private、 protected、 public、 internal 修饰符建议收藏

    private:私有成员,在类的内部才可以访问。protected:保护成员,该类内部和继承类中可以访问。public:公共成员,完全公开,没有访问限制。internal:在同一命名空

    2021年12月20日
    53
  • 微信小程序 onLoad与onShow之间传值「建议收藏」

    微信小程序 onLoad与onShow之间传值「建议收藏」在写一个页面的刷新效果,需求是在页面第一次进来时,做出一次数据加载,之后在页面有个评论操作,每次评论成功都将本页的数据进行刷新。考虑到如果刷新都用onLoad()的话,会造成比较大的资源浪费,所以,把需要进行数据刷新的部分放到onShow页面进行刷新。因为我的函数在加载评论数据的时候,需要一个bookid数值,传参到服务器这样才能获取相对应的数据。但是bookid是从上个页面通过option…

    2022年6月16日
    69
  • 投影矩阵与最小二乘法_最小二乘法和矩阵求逆

    投影矩阵与最小二乘法_最小二乘法和矩阵求逆投影矩阵与最小二乘二者有什么必然的联系么,当我开始写这篇文章的时候我也这样问自己。如果Strang教授没有教授这堂课亦或者讲的这堂课没有被放到网上被别人所下载观看,那么…好在一切都是那么的幸运先说说投影吧,这个想必大家都知道,高中的知识了。一个向量(b)在另一个向量(a)上的投影:实际上就是寻找在a上离b最近的点。如果我们把p看作是a的估计值,那么我们定义e

    2022年10月4日
    4
  • B站 – 黑客攻防 入门到入狱 [网络安全] -笔记

    B站 – 黑客攻防 入门到入狱 [网络安全] -笔记cc攻击:针对应用,比如恶意刷验证码DDoS攻击:针对服务器,比如大量的http请求,超大流量的恶意访问←←←刮刮乐文章目录文件上传漏洞原理实验原理实验过程webshell:菜刀详解文件上传漏洞原理实验原理实验过程实验一:低安全模式下,上传任意类型文件,文件不大限制实验二:中安全模式下,绕过类型上传文件(文件MIME类型)修改浏览器代理为BurpSuite的代理通过BurpSuite修改Content-Type的信息,改为image/JPEG实验二实现原理:实验三:

    2022年6月9日
    37
  • 如何安装Java?

    如何安装Java?在本文中,我们将研究如何安装Java,在Windows操作系统中安装Java,如何检查已安装的版本以及设置环境变量。因此,让我们开始吧。如何安装Java?Java支持许多平台,例如Windows,Linux,Solaris等。这些平台具有自己的安装方法。在本教程中,我们将介绍32位和64位OS的安装过程Windows操作系统。Windows操作系统中的Java安装在Windows操作系统中,32位和64位Windows操作系统都具有类似的Java安装方式。主要区别在于它们的安装软件包。如何检查主机

    2022年7月9日
    24
  • JMeter 进行压力测试并发测试步骤,及文件上传并发测试演示

    JMeter 进行压力测试并发测试步骤,及文件上传并发测试演示使用 JMeter 进行压力测试一 前言压力测试是每一个 Web 应用程序上线之前都需要做的一个测试 他可以帮助我们发现系统中的瓶颈问题 减少发布到生产环境后出问题的几率 预估系统的承载能力 使我们能根据其做出一些应对措施 所以压力测试是一个非常重要的步骤 下面我带大家来使用一款压力测试工具 JMeter 下载地址官网 http jmeter apache org download jmeter cgi 准备工作因为 JMeter 是使用 JAVA 写的 所以使用 JMeter 之前 先安装 JAVA 环境

    2026年3月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号