转:Logistic regression (逻辑回归) 概述
Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。(注意这里是:“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘)
那么它究竟是什么样的一个东西,又有哪些适用情况和不适用情况呢?
一、官方定义:
,
Figure 1. The logistic function, with zon the horizontal axis and ƒ(z) on the vertical axis
逻辑回归是一个学习f:X− > Y 方程或者P(Y|X)的方法,这里Y是离散取值的,X= < X1,X2...,Xn > 是任意一个向量其中每个变量离散或者连续取值。
二、我的解释
只看公式太痛苦了,分开说一下就好。Logistic Regression 有三个主要组成部分:回归、线性回归、Logsitic方程。
1)回归
Logistic regression是线性回归的一种,线性回归是一种回归。那么回归是虾米呢?
回归其实就是对已知公式的未知参数进行估计。比如已知公式是y = a*x + b,未知参数是a和b。我们现在有很多真实的(x,y)数据(训练样本),回归就是利用这些数据对a和b的取值去自动估计。估计的方法大家可以简单的理解为,在给定训练样本点和已知的公式后,对于一个或多个未知参数,机器会自动枚举参数的所有可能取值(对于多个参数要枚举它们的不同组合),直到找到那个最符合样本点分布的参数(或参数组合)。(当然,实际运算有一些优化算法,肯定不会去枚举的)
注意,回归的前提是公式已知,否则回归无法进行。而现实生活中哪里有已知的公式啊(G=m*g 也是牛顿被苹果砸了脑袋之后碰巧想出来的不是?哈哈),因此回归中的公式基本都是数据分析人员通过看大量数据后猜测的(其实大多数是拍脑袋想出来的,嗯...)。根据这些公式的不同,回归分为线性回归和非线性回归。线性回归中公式都是“一次”的(一元一次方程,二元一次方程...),而非线性则可以有各种形式(N元N次方程,log方程 等等)。具体的例子在线性回归中介绍吧。
2)线性回归
直接来一个最简单的一元变量的例子:假设要找一个y和x之间的规律,其中x是鞋子价钱,y是鞋子的销售量。(为什么要找这个规律呢?这样的话可以帮助定价来赚更多的钱嘛,小学的应用题经常做的呵呵)。已知一些往年的销售数据(x0,y0), (x1, y1), ... (xn, yn)做样本集, 并假设它们满足线性关系:y = a*x + b (其中a,b的具体取值还不确定),线性回归即根据往年数据找出最佳的a, b取值,使 y = a * x + b 在所有样本集上误差最小。
也许你会觉得---晕!这么简单! 这需要哪门子的回归呀!我自己在草纸上画个xy坐标系,点几个点就能画出来!(好吧,我承认我们初中时都被这样的画图题折磨过)。事实上一元变量的确很直观,但如果是多元就难以直观的看出来了。比如说除了鞋子的价格外,鞋子的质量,广告的投入,店铺所在街区的人流量都会影响销量,我们想得到这样的公式:sell = a*x + b*y + c*z + d*zz + e。这个时候画图就画不出来了,规律也十分难找,那么交给线性回归去做就好。(线性回归具体是怎么做的并不重要,对程序员来说,我们就把它当成一条程序命令就好。若看完本文还想了解更多,求解方法可见本文末尾的注1)。这就是线性回归算法的价值。
需要注意的是,这里线性回归能过获得好效果的前提是y = a*x + b 至少从总体上是有道理的(因为我们认为鞋子越贵,卖的数量越少,越便宜卖的越多。另外鞋子质量、广告投入、客流量等都有类似规律);但并不是所有类型的变量都适合用线性回归,比如说x不是鞋子的价格,而是鞋子的尺码),那么无论回归出什么样的(a,b),错误率都会极高(因为事实上尺码太大或尺码太小都会减少销量)。总之:如果我们的公式假设是错的,任何回归都得不到好结果。
3)Logistic方程
上面我们的sell是一个具体的实数值,然而很多情况下,我们需要回归产生一个类似概率值的0~1之间的数值(比如某一双鞋子今天能否卖出去?或者某一个广告能否被用户点击? 我们希望得到这个数值来帮助决策鞋子上不上架,以及广告展不展示)。这个数值必须是0~1之间,但sell显然不满足这个区间要求。于是引入了Logistic方程,来做归一化。这里再次说明,该数值并不是数学中定义的概率值。那么既然得到的并不是概率值,为什么我们还要费这个劲把数值归一化为0~1之间呢?归一化的好处在于数值具备可比性和收敛的边界,这样当你在其上继续运算时(比如你不仅仅是关心鞋子的销量,而是要对鞋子卖出的可能、当地治安情况、当地运输成本 等多个要素之间加权求和,用综合的加和结果决策是否在此地开鞋店时),归一化能够保证此次得到的结果不会因为边界 太大/太小 导致 覆盖其他feature 或 被其他feature覆盖。(举个极端的例子,如果鞋子销量最低为100,但最好时能卖无限多个,而当地治安状况是用0~1之间的数值表述的,如果两者直接求和治安状况就完全被忽略了)这是用logistic回归而非直接线性回归的主要原因。到了这里,也许你已经开始意识到,没错,Logistic Regression 就是一个被logistic方程归一化后的线性回归,仅此而已。
至于所以用logistic而不用其它,是因为这种归一化的方法往往比较合理(人家都说自己叫logistic了嘛 呵呵),能够打压过大和过小的结果(往往是噪音),以保证主流的结果不至于被忽视。具体的公式及图形见本文的一、官方定义部分。其中f(X)就是我们上面例子中的sell的实数值了,而y就是得到的0~1之间的卖出可能性数值了。(本段 “可能性” 并非 “概率” ,感谢zjtchow同学在回复中指出)
三、Logistic Regression的适用性
1) 可用于概率预测,也可用于分类。
并不是所有的机器学习方法都可以做可能性概率预测(比如SVM就不行,它只能得到1或者-1)。可能性预测的好处是结果又可比性:比如我们得到不同广告被点击的可能性后,就可以展现点击可能性最大的N个。这样以来,哪怕得到的可能性都很高,或者可能性都很低,我们都能取最优的topN。当用于分类问题时,仅需要设定一个阈值即可,可能性高于阈值是一类,低于阈值是另一类。
2) 仅能用于线性问题
只有在feature和target是线性关系时,才能用Logistic Regression(不像SVM那样可以应对非线性问题)。这有两点指导意义,一方面当预先知道模型非线性时,果断不使用Logistic Regression; 另一方面,在使用Logistic Regression时注意选择和target呈线性关系的feature。
3) 各feature之间不需要满足条件独立假设,但各个feature的贡献是独立计算的。
逻辑回归不像朴素贝叶斯一样需要满足条件独立假设(因为它没有求后验概率)。但每个feature的贡献是独立计算的,即LR是不会自动帮你combine 不同的features产生新feature的 (时刻不能抱有这种幻想,那是决策树,LSA, pLSA, LDA或者你自己要干的事情)。举个例子,如果你需要TF*IDF这样的feature,就必须明确的给出来,若仅仅分别给出两维 TF 和 IDF 是不够的,那样只会得到类似 a*TF + b*IDF 的结果,而不会有 c*TF*IDF 的效果。
(完)
==============================================================
我是分割线 。以下内容不看不影响逻辑回归的使用,看了——也没什么帮助。只是为希望一探究竟的同学准备的,括弧笑
==============================================================
注一:线性回归求解方法
线性回归的求解方法适用于feature数量任意多的情况,所以为了直观(也为了少码字...),我们还是以上文中feature为一维的例子来说,即x:鞋子价格, 目标y:鞋子销量。那么线性回归求解,就是要找到那么一条直线,让实际的数据点(xi, yi) 偏离这个直线的总体距离最短。 这里实际有两个问题:1)怎么确切地定义“总体距离最短”呢?即总体误差的计算公式是什么(又称cost function)。没有这个东西,就没办法说我找到了误差最小的直线。 2)在给定cost function的情况下,怎么找到那条误差最小直线 f(x) = a*x + b。
下面分开来说,
1)cost function(最小二乘法)。
常见资料会把线性回归求解方法称为“最小二乘法”(不要点进去看,百科上那个公式写的太拧巴了,下面我会说),其实“最小二乘法”算不上一个求解方法,它是一个评估方法,即cost function。
“二乘”就是平方的意思,即,它定义了总体误差是:每个点的 “预测值” 减去 “真实值” 差的平方(“二乘”),累加起来的和。用公式表示就是:SUM[ ( f( xi ) - yi ) ^ 2 ], 其中f(x)是当前预测的直线。“最小”就是认为当这个平方的累加和最小时,直线是误差最小的。以上即最小二乘法。
那么为什么要平方呢?(不想管可略过本段:D)——首先因为差值有正有负的,不平方累加起来正负会抵消——可是用绝对值的和不是更好吗?其实我更喜欢的一个解释是,如果我们认为实际的点在偏离预测值时是按“正态分布”偏离的,那么就应该最小化平方和,而不是最小化绝对值的和或其它的和。因为正态分布概率大概长这个样子:P(x) = 常数 * e^[-(x - 期望值)^2 / 常数] 。注意其中的 -(x - 期望值)^2,它是平方不是绝对值。让误差平方最小就是让正态分布的P(x)最大,也就是让当前的误差解释起来最为合理,直观上不难理解吧?刘未鹏在这篇介绍贝叶斯的文章里,详细说明了这个问题。PS:这篇文章也是我看过介绍贝叶斯博文中最棒的,想了解贝叶斯的同学非常推荐去看(等等,LZ写了这么多,还是先把LZ这篇博文看完吧~~ :D )
2)梯度下降法(真正的求解方法)
“最小二乘法”只是定义了cost function,具体求解(找到最优的直线)一般用梯度下降法(gradient descent)。梯度下降是一个贪心的搜索方法,全面地讲述起来可以另开一篇博文了... 对于本文来说,你只需要了解它是这么做的:它先随便找条直线,计算误差,然后不断进行微调,每步微调都让误差减少一点,直至最后不能减少为止,最后的直线即为最优直线。
具体的做法我们可以这样理解(注意,以上说法是保证对的,但以下说法,只求直观理解,不可做正式定义,标准描述见这里):
1> 它先随便找一条直线 f(x) = a0 * x + b0,计算误差(cost function)。
2> 对于a0(对于b0也是同样,如果有c0,d0,e0,f0也是同样),试试让a1 = a0 + 很小的数, 产生一个新的直线 a1 * x + b0,看看新的误差(cost function结果)是不是比原来的小了,如果是,就用这个a1了;否则看a1 = a0 - 很小的数 能否让误差变小,如果是,那用这个a1;如果都不是a0在局部已经是最好参数了,则不变a1 = a0;同理处理参数b0。最终得到一个新直线f(x) = a1 * x + b1。(只是形象说法,这个过程其实是通过求偏导实现的)
3> 重复第2步,直至a和b不能再变化了,最后的 f(x) = an * x + bn,即为最优直线,求解结束。
由于本问题的特殊性(最小二乘的cost function是凸函数),无论起始a0,b0是什么值,上述方法一定能找到一个唯一的最优直线。而且由于使用了梯度来计算上述“很小的数”,这个“很小的数”会随着直线越接近最优直线,变得越来越小,最终趋近于0,所以不必担心走不到第3>步。
原创博文,转载请注明出处:
苏冉旭,http://hi.baidu.com/hehehehello/item/40025c33d7d9b7b9633aff87
转:Logistic regression (逻辑回归) 概述的更多相关文章
- Coursera DeepLearning.ai Logistic Regression逻辑回归总结
既<Machine Learning>课程后,Andrew Ng又推出了新一系列的课程<DeepLearning.ai>,注册了一下可以试听7天.之后每个月要$49,想想还是有 ...
- Logistic Regression逻辑回归
参考自: http://blog.sina.com.cn/s/blog_74cf26810100ypzf.html http://blog.sina.com.cn/s/blog_64ecfc2f010 ...
- Logistic Regression(逻辑回归)(二)—深入理解
(整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 上一篇讲解了Logistic Regression的基础知识,感觉 ...
- Logistic Regression(逻辑回归)
分类是机器学习的一个基本问题, 基本原则就是将某个待分类的事情根据其不同特征划分为两类. Email: 垃圾邮件/正常邮件 肿瘤: 良性/恶性 蔬菜: 有机/普通 对于分类问题, 其结果 y∈{0,1 ...
- 机器学习简要笔记(五)——Logistic Regression(逻辑回归)
1.Logistic回归的本质 逻辑回归是假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度上升/下降法来求解参数,从而实现数据的二分类. 1.1.逻辑回归的基本假设 ①伯努利分布:以抛硬币为例 ...
- Deep Learning 学习笔记(4):Logistic Regression 逻辑回归
逻辑回归主要用于解决分类问题,在现实中有更多的运用, 正常邮件or垃圾邮件 车or行人 涨价or不涨价 用我们EE的例子就是: 高电平or低电平 同时逻辑回归也是后面神经网络到深度学习的基础. (原来 ...
- 【原】Coursera—Andrew Ng机器学习—Week 3 习题—Logistic Regression 逻辑回归
课上习题 [1]线性回归 Answer: D A 特征缩放不起作用,B for all 不对,C zero error不对 [2]概率 Answer:A [3]预测图形 Answer:A 5 - x1 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 6_Logistic Regression 逻辑回归
Lecture6 Logistic Regression 逻辑回归 6.1 分类问题 Classification6.2 假设表示 Hypothesis Representation6.3 决策边界 ...
- 机器学习之LinearRegression与Logistic Regression逻辑斯蒂回归(三)
一 评价尺度 sklearn包含四种评价尺度 1 均方差(mean-squared-error) 2 平均绝对值误差(mean_absolute_error) 3 可释方差得分(explained_v ...
- 吴恩达深度学习:2.1Logistic Regression逻辑回归及其损失函数
1.Logistic Regression是一个二元分类问题 (1)已知输入的特征向量x可能是一张图,你希望把它识别出来,这是不是猫图,你需要一个算法,可以给出预测值,更正式的y是一个概率,当输入特征 ...
随机推荐
- Codeforces Round #511 (Div. 2)
Codeforces Round #511 (Div. 2) #include <bits/stdc++.h> using namespace std; int n; int main() ...
- ELASTIC制图等高级使用
基于上一个安装部署的文档后(ELASTIC 5.2部署并收集nginx日志) http://www.cnblogs.com/kerwinC/p/6387073.html 本次带来一些使用的分享. ki ...
- 使用 IntraWeb (22) - 基本控件之 TIWCalendar
TIWCalendar: 日历控件, 继承于 TIWCustomGrid, 所以它和 TIWGrid 共同属性特多. 它的 Cell 是 TIWCalendarCell 对象, 直接从 TIWGrid ...
- Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】(转)
前段时间细节的了解了Jedis的使用,Jedis是redis的java版本的客户端实现.本文做个总结,主要分享如下内容: [pipeline][分布式的id生成器][分布式锁[watch][multi ...
- SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)
4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the results of ...
- STM32F4 How do you generate complementary PWM Outputs?
How do you generate complementary PWM Outputs? I would like to generate complementary PWM Outputs wi ...
- Understanding the STM32F0's GPIO
Understanding the STM32F0's GPIO This is the first part of the GPIO tutorial for the STM32F0Discover ...
- systemtap 安装 总结
http://blog.soul11201.com/notes/2017/02/22/systemstap-install.html
- C++11 function
#include <iostream> #include <functional> #include <vector> using namespace std; / ...
- [转]LRU缓存实现(Java)
LRU Cache的LinkedHashMap实现 LRU Cache的链表+HashMap实现 LinkedHashMap的FIFO实现 调用示例 LRU是Least Recently Used 的 ...