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

逻辑回归原理_逻辑回归代码此文章为初学机器学习时,对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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 查看win10激活到期时间

    查看win10激活到期时间查看win10激活到期时间打开运行窗口,输入命令:slmgr.vbs-xpr然后点击确定按钮。查看详细的激活信息:slmgr.vbs-dlv点击确定按钮。

    2022年5月8日
    60
  • 不浮躁,获取充实感

    不浮躁,获取充实感

    2021年12月17日
    39
  • Python保存json_python保存json文件

    Python保存json_python保存json文件json文件是一种常见的数据存储文件,比txt看着高级点,比xml看着人性化一点。同时,json作为一种通用协议的文件格式,可以被各种语言方便地读取。所以,json非常适合用来存储结构化的数据。json的具体介绍和使用规范:https://www.json.org/json-en.html本文将关于python读取json做一个小小的记录和总结。1.读取json一般情况下的j…

    2022年10月12日
    0
  • 移动端分享插件使用总结

    移动端分享插件使用总结

    2021年10月28日
    54
  • Java数组的初始化大小_对Java接口实现的建议

    Java数组的初始化大小_对Java接口实现的建议**二维数组:**元素是一维数组的数组。格式一:publicclassArrayDemo{publicstaticvoidmain(String[]args){//格式一int[][]arr=newint[3][2];System.out.println(arr);//[[I@1b6d3586System.out.println(arr[0]);//[I@4554617c

    2022年10月9日
    0
  • java 笛卡尔积_使用Guava来计算笛卡尔积

    java 笛卡尔积_使用Guava来计算笛卡尔积以前做项目的时候计算笛卡尔积的时候,总是使用各种for循环来嵌套,最后往往在Sonar代码检查的时候总是会报警说for循环嵌套过深。今天才知道Guava原来已经为我们提供了优雅的计算笛卡尔积的方法。比如我们要计算3个List的笛卡尔积,每个list的内容都是[‘a’,’b’,’c’],请看下面的代码:publicclassCartesianProductUtil{publicstat…

    2022年7月27日
    1

发表回复

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

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