最近开始学习机器学习的相关理论知识,准备把自己的整个学习心得整理汇集成博客,一来可以督促自己,二来可以整理思路,对问题有一个更加透彻的理解,三来也可以放在网上和大家分享讨论,促进交流。

由于这次的学习过程主要是以数学理论以及对应的编程为主,因此,整个过程中,我将以Kaggle上的Titanic上的数据作为练习背景。

今天以logistic regression为主,主要包括理论部分以及对应的编程实验结果。

理论部分

logistic regression主要应用于二值分类问题,首先我们需要引入伯努利分布的概念。

  • 伯努利分布又称两点分布或者是0-1分布
  • 伯努利实验是只有两种可能结果的单次随机实验  
  • 进行一次伯努利实验,成功(y=1)的概率为p, 失败(y=0)的概率为1-p,则称随机变量y服从伯努利分布
  • 伯努利分布的离散概率分布函数可以表达为
  • 这里可以参考一下http://blog.csdn.net/michael_r_chang/article/details/39188321,有关于伯努利分布,二项分布,多项分布的基本介绍。

有了上述概念之后,我们可以引入logistic regression的基本概念。logistic regression认为,在我们对两类事物进行分类的时候(如y=1和y=0),若出现特征x,则

上式即所谓的logistic分布或者是sigmoid分布,其一般通式为

注意

logtistic回归的任务是给定一系列的训练样本集合,并假设y=1发生的概率可以由logistic分布来进行表达,求出模型系数以便进行将来的预测。

上述问题可以通过极大似然估计来进行求解,即

经过负对数变换之后,即可最小化如下公式

利用最速下降算法,在第k次迭代处的梯度可以表示为

因此系数可以进行如下更新:

实验部分:

  • 如果每次只随机选择其中的某一个样本计算梯度并进行模型更新,就是所谓的随机梯度下降算法(stochastic gradient descent)
  • 如果每次选择多个样本同时计算梯度并进行模型更新,就是所谓的mini-batch算法
  • 如果每次选择所有的样本计算梯度并进行模型更新,就是所谓的batch descent算法

实验中我们将研究batch数目(即将所有的样本均分成多少份进行梯度计算)以及迭代步长对速度的影响

如上图所示,迭代步长和batch数目对收敛速度都有很大的影响,一般来说,迭代步长越大,batch数目越多,速度就越快,但是当迭代步长和batch数目同时过大的时候,算法会出现不稳定的情况,如上图的蓝实线所示。

关于迭代步长的影响很好理解,因为最速下降中,每一次沿着梯度方向走的太短,则需要很多步才可以对模型产生足够的更新,反之,如果每一次沿着梯度方向走得太远,则可能超过了当前所能够走的最大距离,目标函数不一定变小。

关于batch数目的影响,总的来说,是希望利用每一个小样本子集所计算出来的梯度和利用全部样本的所计算出来的梯度方向近似,如此便可以利用相对小的计算量达到足够准确的梯度方向,从而减少计算时间。但是如果batch数目过多,则每个子集中的样本过少,无法进行有效近似,也就是近似梯度方向不够准确和稳定,从而出现上述的不稳定现象。

可以考虑在迭代过程中不断地减小迭代步长和batch数目来进行综合,确保开始的快速减小和后来的算法稳定性。

注意:在利用梯度方向进行更新的时候,最好对计算出来的梯度进行归一化,便于选择迭代步长。

logistic regression浅析的更多相关文章

  1. 逻辑回归 Logistic Regression

    逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...

  2. logistic regression与SVM

    Logistic模型和SVM都是用于二分类,现在大概说一下两者的区别 ① 寻找最优超平面的方法不同 形象点说,Logistic模型找的那个超平面,是尽量让所有点都远离它,而SVM寻找的那个超平面,是只 ...

  3. Logistic Regression - Formula Deduction

    Sigmoid Function \[ \sigma(z)=\frac{1}{1+e^{(-z)}} \] feature: axial symmetry: \[ \sigma(z)+ \sigma( ...

  4. SparkMLlib之 logistic regression源码分析

    最近在研究机器学习,使用的工具是spark,本文是针对spar最新的源码Spark1.6.0的MLlib中的logistic regression, linear regression进行源码分析,其 ...

  5. [OpenCV] Samples 06: [ML] logistic regression

    logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...

  6. Stanford机器学习笔记-2.Logistic Regression

    Content: 2 Logistic Regression. 2.1 Classification. 2.2 Hypothesis representation. 2.2.1 Interpretin ...

  7. Logistic Regression vs Decision Trees vs SVM: Part II

    This is the 2nd part of the series. Read the first part here: Logistic Regression Vs Decision Trees ...

  8. Logistic Regression Vs Decision Trees Vs SVM: Part I

    Classification is one of the major problems that we solve while working on standard business problem ...

  9. Logistic Regression逻辑回归

    参考自: http://blog.sina.com.cn/s/blog_74cf26810100ypzf.html http://blog.sina.com.cn/s/blog_64ecfc2f010 ...

随机推荐

  1. Scrum Meeting day 4

                第四次会议 No_00:工作情况 No_01:任务说明 待完成 已完成 No_10:燃尽图 No_11:照片记录 待更新 No_100:代码/文档签入记录 No_101:出席表 ...

  2. first time to use github

    first time to use github and feeling good. 学习软件工程,老师要求我们用这个软件管理自己的代码,网站是全英的,软件也简单易用,方便 https://githu ...

  3. Sprint 冲刺第三阶段第一天

    1.今晚我在整理之前的代码,检查细节,然后发现游戏要返回上一界面竟然出现了问题“项目停止运行”,仔细检查没办法解决,后来百度可能是因为修改了之前文件的名字,可在AndroidManifest.xml中 ...

  4. eclispe file查找

    今天查找一段js代码时在本页内找不到,所以需要在整个工程下寻找. 过程如下

  5. 【转】STM32 独立看门狗简介

    STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种 ...

  6. CI框架2.x的验证码中所遇问题解决

    用php版本是5.6,CI框架版本是2.x,在使用验证码(captcha)时,遇到一些问题. 首先,我查看框架手册,说必需的两个参数是"img_url",“img_path”,其他 ...

  7. Apache的Thrift引发的编译思考

    最近偶然看到了Apache的Thrift,感觉有点像Corba架构后的变种(赞一个,Facebook真伟大).WSDL能生成C#和Java的(SOAP标准接口,做WebService都用过).Corb ...

  8. Win10删除微软拼音输入法的方法

    1. 控制面板 2.更换输入法 选择添加语言 添加上英文输入法之后 进行上下移动 然后删除中文输入法即可 需要在英文的语言栏里面添加-选项-增加输入法 然后删除中文即可.

  9. Laravel Eloquent ORM 时如何查询表中指定的字段

    导读:在使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应...原文地址:http: ...

  10. 影响MapReduce性能的几个因素

    Hadoop MapReduce性能优化影响MapReduce输入数据处理时间的因素很多.其中之一是实现map和reduce函数时使用的算法.其他外部因素也可能影响MapReduce性能.根据我们的经 ...