zoukankan      html  css  js  c++  java
  • 【cs229-Lecture3】Logistic回归

    参考:

    http://www.itongji.cn/article/12112cH013.html

    http://blog.csdn.net/zouxy09/article/details/20319673

    https://class.coursera.org/ml-006/lecture/58(一定要看!)

     


    简要认识一下Logistic函数(sigmoid曲线):(from wiki)

    Logistic函数Logistic曲线是一种常见的S形函数,它是皮埃尔·弗朗索瓦·韦吕勒在1844或1845年在研究它与人口增长的关系时命名的。广义Logistic曲线可以模仿一些情况人口增长(P)的S形曲线。起初阶段大致是指数增长;然后随着开始变得饱和,增加变慢;最后,达到成熟时增加停止。

    一个简单的Logistic函数可用下式表示:P(t) = frac{1}{1 + e^{-t}}

     

    image_thumb[1]

                                            标准LogisticS形函数

    百度上比较好的Logistic模型的解释:

     logistic回归又称logistic回归分析,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是是否胃癌,即“是”或“否”,为两分类变量,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。通过logistic回归分析,就可以大致了解到底哪些因素是胃癌的危险因素。
      logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归,如果是poisson分布,就是poisson回归,如果是负二项分布,就是负二项回归,等等。只要注意区分它们的因变量就可以了。
      

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

      

    logistic回归的主要用途:一是寻找危险因素,正如上面所说的寻找某一疾病的危险因素等。二是预测,如果已经建立了logistic回归模型,则可以根据模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大。三是判别,实际上跟预测有些类似,也是根据logistic模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。

      这是logistic回归最常用的三个用途,实际中的logistic回归用途是极为广泛的,logistic回归几乎已经成了流行病学和医学中最常用的分析方法,因为它与多重线性回归相比有很多的优势。

    推导过程如下:

    IMG_0605IMG_0606

    IMG_0607

    最后,附上一个实际问题:(from http://www.medsci.cn/shownews.asp?id=2315

    问:Logistic回归模型为什么要先做单因素,然后做多因素?

    问: Logistic回归模型为什么要先做单因素,然后做多因素
    有的文献上是直接做卡方检验有意义的再进入回归模型,但是有的是Logistic 单因素分析,然后在进行多因素分析,不知道这个操作过程在SPSS中如何实现? 还有这两种方法的区别是什么?

    答:logistic回归在分析时是否必须按照“单因素—多因素”的分析过程,是否必须先进行单因素分析,然后才能进行多因素分析?单因素分析是否必须的?
    这一问题是一个很实际的,许多人在分析时总是不知道如何下手?以下阐述一下我个人的意见,不一定正确,纯属个人心得。
    理论上讲,在样本足够大的情况下,最好把所有的因素都放到方程中,以矫正所有可能的混杂因素,但这是有条件的,即必须所有的这些因素之间无相关,且样本足够大。而实际中,因素之间不可能是毫无相关的。当然,这种相关程度也不一样。如果所有的因素之间相关程度都非常低,最好是没有相关,那这时我可以把所有的变量都放在方程中同时进行分析,可以不做单因素分析。
    如果你的例数不够多,比如,你有100例,但是有20个因素,那这时你如果把所有因素放在方程中,结果肯定要出问题。这种情况下,最好先进行单因素分析,筛选出一部分变量,将有意义的变量放入方程进行多因素分析。当然,单因素分析时最好将p值放宽一些,比如0.1或0.15等。避免漏掉一些重要因素。
    真正进行多因素分析时,是很复杂的,需要仔细验证各个因素之间的关系,一旦发现因素之间有关系,需要仔细分析。如果某一因素放入方程中后,前面的几个变量变化比较大,那就需要小心了。仔细探讨因素之间存在何种关系。
    总之,如果样本不多而变量较多,可以先进行单因素分析,筛掉一些可能无意义的变量,然后进行多因素分析,这样可以保证结果更加可靠些。即使样本足够大,也不建议直接把所有的变量放入方程直接分析,一定要先弄清楚各个变量之间的相互关系,弄清楚自变量进入方程的形式,这样才能有效的进行分析。
    不论任何情况,分析时必须具体问题具体分析,不能一概而论,更不能套用。即使目的相同、变量相同的数据,也不一定分析结果会一样,因为总会有抽样误差存在的,设计的好坏是不一样的。所以千万不要看一篇类似的文章,然后照搬上面的分析步骤和分析方法,这是不可取的。

     

    算法实现:

    数据:

      1 -0.017612    14.053064    0
      2 -1.395634    4.662541    1
      3 -0.752157    6.538620    0
      4 -1.322371    7.152853    0
      5 0.423363    11.054677    0
      6 0.406704    7.067335    1
      7 0.667394    12.741452    0
      8 -2.460150    6.866805    1
      9 0.569411    9.548755    0
     10 -0.026632    10.427743    0
     11 0.850433    6.920334    1
     12 1.347183    13.175500    0
     13 1.176813    3.167020    1
     14 -1.781871    9.097953    0
     15 -0.566606    5.749003    1
     16 0.931635    1.589505    1
     17 -0.024205    6.151823    1
     18 -0.036453    2.690988    1
     19 -0.196949    0.444165    1
     20 1.014459    5.754399    1
     21 1.985298    3.230619    1
     22 -1.693453    -0.557540    1
     23 -0.576525    11.778922    0
     24 -0.346811    -1.678730    1
     25 -2.124484    2.672471    1
     26 1.217916    9.597015    0
     27 -0.733928    9.098687    0
     28 -3.642001    -1.618087    1
     29 0.315985    3.523953    1
     30 1.416614    9.619232    0
     31 -0.386323    3.989286    1
     32 0.556921    8.294984    1
     33 1.224863    11.587360    0
     34 -1.347803    -2.406051    1
     35 1.196604    4.951851    1
     36 0.275221    9.543647    0
     37 0.470575    9.332488    0
     38 -1.889567    9.542662    0
     39 -1.527893    12.150579    0
     40 -1.185247    11.309318    0
     41 -0.445678    3.297303    1
     42 1.042222    6.105155    1
     43 -0.618787    10.320986    0
     44 1.152083    0.548467    1
     45 0.828534    2.676045    1
     46 -1.237728    10.549033    0
     47 -0.683565    -2.166125    1
     48 0.229456    5.921938    1
     49 -0.959885    11.555336    0
     50 0.492911    10.993324    0
     51 0.184992    8.721488    0
     52 -0.355715    10.325976    0
     53 -0.397822    8.058397    0
     54 0.824839    13.730343    0
     55 1.507278    5.027866    1
     56 0.099671    6.835839    1
     57 -0.344008    10.717485    0
     58 1.785928    7.718645    1
     59 -0.918801    11.560217    0
     60 -0.364009    4.747300    1
     61 -0.841722    4.119083    1
     62 0.490426    1.960539    1
     63 -0.007194    9.075792    0
     64 0.356107    12.447863    0
     65 0.342578    12.281162    0
     66 -0.810823    -1.466018    1
     67 2.530777    6.476801    1
     68 1.296683    11.607559    0
     69 0.475487    12.040035    0
     70 -0.783277    11.009725    0
     71 0.074798    11.023650    0
     72 -1.337472    0.468339    1
     73 -0.102781    13.763651    0
     74 -0.147324    2.874846    1
     75 0.518389    9.887035    0
     76 1.015399    7.571882    0
     77 -1.658086    -0.027255    1
     78 1.319944    2.171228    1
     79 2.056216    5.019981    1
     80 -0.851633    4.375691    1
     81 -1.510047    6.061992    0
     82 -1.076637    -3.181888    1
     83 1.821096    10.283990    0
     84 3.010150    8.401766    1
     85 -1.099458    1.688274    1
     86 -0.834872    -1.733869    1
     87 -0.846637    3.849075    1
     88 1.400102    12.628781    0
     89 1.752842    5.468166    1
     90 0.078557    0.059736    1
     91 0.089392    -0.715300    1
     92 1.825662    12.693808    0
     93 0.197445    9.744638    0
     94 0.126117    0.922311    1
     95 -0.679797    1.220530    1
     96 0.677983    2.556666    1
     97 0.761349    10.693862    0
     98 -2.168791    0.143632    1
     99 1.388610    9.341997    0
    100 0.317029    14.739025    0

    用R语言可视化:

    1 data <- read.table("D:\MachineLearning\Sample\LogisticRegression\data.txt",header=T)
    2 attach(data)
    3 plot(xpos,ypos,col=ifelse(factor(type)==0,"blue", "red"))

    如图:

    接下来,我们的目的就是找到一条直线,能够尽可能准确地把这两类点分隔开。







                If you have any questions about this article, welcome to leave a message on the message board.



    Brad(Bowen) Xu
    E-Mail : maxxbw1992@gmail.com


  • 相关阅读:
    【转载】JS中bind方法与函数柯里化
    计算机中位(bit), 字节(byte), 字(word)的关系
    MySQL 正则(Regular Expression) 邮箱(Email)
    eclipse remote system explorer operation
    Hibernate save, saveOrUpdate, persist, merge, update 区别
    产品经理 写SQL
    DevOps Scrum Agile Tech Debt
    SpringMVC 集成 jackson,日志格式报错:org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value
    EDAS Serverless & Kubernetes SLB LVS Nginx
    阿里巴巴 开发者 工具 开源 社区
  • 原文地址:https://www.cnblogs.com/XBWer/p/3963790.html
Copyright © 2011-2022 走看看