一、回归

“回归”这个词很有误导性,在陈希孺的《概率论与数理统计》中对这个词的来源有过解释。是个外国人,在做数据分析的时候,发现将数据画出来后,不管大的小的数据都会有一种趋于中间的趋势,这样的趋势在他看来叫做”回归“,因此,regression这个词就诞生了。

从现在的角度来看,尤其是对汉字而言,”回归“从字面上并不很容易理解。”回归“的本质是”参数估计“,所以,如果我们把”回归“改作”参数估计“,甚至是”估参“,那就好理解多了,如:估参、线性估参、逻辑估参。hah。

二、线性回归

线性回归顾名思义,就是使用线性函数来对数据进行建模,并对线性函数中的参数进行估计。

最常见的线性函数就是二维函数: f(x) = a*x + b。

中学学物理的时候,估计做过很多,通过实验检测实验数据,将数据描点到图纸上,画出数据中的直线,通过度量直线与坐标轴的交点来得计算直线的方程。这其实就算是线性回归了,因为,在这个过程中,我们用数据进行建模,并根据结果对线性参数进行了估计。

当然,在实际中,要比这个复杂。二维的数据很容易看出规律,但是10维,20维,100维之后,既不容易在纸上画出来,人也不容易在脑中对模型进行构建。这时候就显现出计算机的优势了,它不会有这方面的困难。我们可以建立100维的线性函数为:f(x) = w0 + w1*x1 + w2*x2 + ... + w100*x100,之后就可以通过数据来对参数进行估计了。

问题就出来了。即便我们已经有了N个100维的数据点,那么我们该如何去对参数进行估计呢?

通过对数据点画图来观察的方法已经是不可能的了,这时候我们就需要引出两个常用的方法。他们分别是评估方法和计算方法。

1. 最小二乘法

最小二乘法是评估方法,而不是计算方法。也就是说,它是用来对已经有的参数进行评价好坏的,而不是根据已有的数据来计算得出参数的。

最小二乘法英文是Least squares,square即是平方的意思。对于已经得到的参数[w0, w1, ..., w100],我们将每个数据点的数据[x1, x2, ..., x100]带入函数y=f(x)中去,从而得到该参数的模型对该点的输出f(x)。该点使用该模型的输出f(x)与该点本身的输出y差值即是模型对该点的的结果误差。将所有点的误差的平方求和后取均值,即是所有数据点在该模型的总误差函数J(w),即:

J(x) = J(x|[w→]) = ∑(f(x) - y) ^2 / 2*N

其中,w→是已经得到的w参数向量,最终结果J(x)是关于x的参数。分母中的N即是数据点的个数,包含2的意思一般是方便对x进行求导时,可以把导数中得到的2消掉(数学中经常这么干,来方便后续计算)。

我们的目标,就是选出效果最好的参数向量w→,也即是使得J(x)达到最小,这样的模型就是最优模型。

2. 梯度下降法

说了半天怎么去评估模型的好坏,还是没有说到到底怎么去求参数向量w→。

对于这样有很多参数,并且参数的选取并没有一定的规则可循的时候,我们就用到一种常用的解题思路:”瞎猜法“。也就是说,没有任何一种条件可以给我们信息,来对模型的参数进行估计,那么,我们可以随机的选择一个参数向量作为初始参数,之后,通过评估函数(如上面提到的最小二乘法等)来对结果进行评估,并根据评估结果来对模型的参数进行修正,最终得到满意的模型参数(如:选取的参数使最小二乘法的J(x)<k,其中k是我们的足够好的模型参数)。

思路很正确:随即选取初始参数 → 使用参数建立模型方程 → 使用评估函数对模型进行评价 → 根据评价结果反馈对参数进行改进 → 循环重复直至满足设定的条件。

看一下流程,前三步都已经如何做了,只剩下关键的一步:根据评价结果反馈对参数进行改进。

如何进行改进呢?参数应该朝哪个方向改进?那些参数该变大,那些参数该变小?这都是问题。

这就用到了梯度下降法,叫做gradient descent。

学过高数的都知道,对于函数y = x ^2,我们可以在任一点对函数取导数,其几何意义是函数在这个方向上增大或减小。我们想要让函数最终取到最凹下来的那个位置,就需要沿着导数的反方向前进。

同样的,我们把这个扩展到三维甚至更多维的平面上,在其中的一点取函数的导数,并沿着导数的反方向不断前进,则最终就可以达到函数的最低点。

可以想象成爬山,我们沿着山向上爬就相当于沿着山的曲线的导数方向前进,最终可以达到山顶。下山的时候也是如此,沿着山谷走,相当于沿着山的曲线的导数的反方向前进,最终可以达到山谷。

在这个例子中,就是想要找到最小二乘法得到的误差函数J(x)的山谷,从而达到模型的最小误差。

使用梯度下降法需要注意几个问题:

2.1 容易达到局部最优而非全局最优

就像是在下山谷的过程中,我们总是沿着下山最快的方向前进,结果可能进入到了山腰上的一个小凹地中无法出来。也就是找到了局部最优值而非全局最优值。这一点,在神经网络ANN中的反向传播算法backpropagation中,由于也用了梯度下降法,因此也会遇到。

解决办法:

1) 在多维的结构中,每一步的前进方向不是寻找到所有维度的最优方向前进,而是分开,在每一维度各自最优的方向分别前进一小步。这是对在所有维度的最优方向上前进的近似,但是二者并不是完全一样的(否则就是同一个方法了)。这叫做incremental gradient descent,优点是有可能避开局部最优。但是,并不能完全保证。

2) 与上面类似的,在每一次的前进方向中,我们并不想要让他总是朝着所有维度最优的方向前进,那么,我们可以采取其他措施来对前进的方向进行影响从而尽量避免进入局部最优值。比如:我们可以使每次前进的方向收到前一次方向的影响,也就是说,w(n+1) = w(n+1) + k*w(n),其中,k是我们设定的参数,如0.1。这样,每次前进的方向相当于不仅受到当前位置的所有维度的最优方向影响,还受到上一步中的方向的影响。从而,也许可以逃出局部最优值。其中,k*w(n)叫做momentum,这个方法叫adding momentum。这种方法可能避开局部最优,而且通过add momentum,加快了步距和收敛速度。

按照以上两种思路,我们还可以设定其他影响当前前进方向的因素,只要能够合理的解释并经过实验验证,都可以是一种新的方法。

3) 还有一种思路是加入随即因素,即在前进的方向中,加入一定的概率使得前进方向不是按照既定的所有维度的最优方向,而是有一定的几率随即的转到其他方向。这样,相当于人下山走着走着突然莫名的转了个弯,然后再继续按照最优方向前进。这样,也有可能概率性的避开局部最优从而趋向全局最优解。这种随机跳出的思想有点类似page rank,以及模拟退火算法。

其他方法我现在想不起来太多了,反正思路就是影响原来的方向,不管是从将从多维方向走变为从单维方向走,还是添加上次方向的影响,还是随机跳出来重新挑方向,都是”标新立异“,”不走寻常路“。

2.2 可能产生震荡

在进入到最终收敛的步骤的时候,如果此时步距设定的太大,就有可能在最优值附近来回摆动,就像钟摆一样,走一步走多了,错过了最优点;回来的时候又走多了,又错过了。从而无限震荡。

解决的方法一般是在迭代次数多,或者误差函数J(x)达到一定程度了之后,将步距的控制参数逐渐调小,从而最终区域最优解。

2.3 数据归一化

在实际应用中,由于有些数据的标准不一,最终导至数据的大小差别很大。比如说,在对结果产生影响的两个维度的数据中,一维中数据的取值范围是[1000,2000],另一维中数据的取值范围是[0.1, 0.5],那么,如果我们在函数中将他们均等的对待,显然是不合适的。因此,实际在使用回归分析是,一般先需要对数据进行归一化。(如:在之前的文章中提到,使用SVM对MNIST手写数字数据集进行分类,如果不对图像的灰度数据[0,255]进行归一化到[0,1],则完全没有效果,基本和瞎猜的正确率相同)

归一化是将数据的取值范围调整为[-1, 1]或[0,1],从而方便对数据处理。

归一化也不只一种方法,最常用的归一化方法是,计算该维度数据的平均值x_mean,最大值max和最小值min,对数据x进行归一化:

x = (x - x_mean) / (max - min)

这样,新的x的取值范围就是[0, 1]了。

当然还有其他归一化方法,例如:我们下面要讲的逻辑回归。

三、逻辑回归

逻辑回归本质上还是线性回归,只不过对其进行了一个变种。

如上文所示,如果在数据归一化处理中,使用logistic函数(也就是sigmoid函数)来进行归一化,这就变成了逻辑回归。

与线性回归相比,逻辑回归通过logistic函数,也是将数据映射到了[0, 1]的范围内,但是,在logistic函数中,大部分的函数值都映射到接近0或接近1的位置上,而非原来的归一化中的均匀分布。这就给线性回归带来了新的特性。

这个新的特性是什么呢?

我们先来看一下logistic函数映射的特点。

1. 连续的,可导的;

2. 基本将数据分开为0和1两大类。

---

至于逻辑函数给逻辑回归到底带来了什么性质?到底是如何影响的?使用其他函数来做归一化可以吗?(当然可以)还可以有什么归一化方法?其他的归一化方法又有什么行的特性?也有特定的名字吗?为什么逻辑回归这么重要?logistic函数比其他函数好在哪里了?

另外,对于线性回归中,假如对不同维度不只是求线性的参数,还包括多维乘积的参数,应该是可以表现非线性函数的吧?比如,y = w0 + w1 * x1 + w2 * x1^2 + w3 * x2 + w4 * x2^2 + w5 * x1 * x2。对于K维数据,最终参数个数应该有多少个?这样的模型的表现如何?有没有对应的名字?

这些问题,,,下次研究明白了再来解答。

供参考:

http://hi.baidu.com/hehehehello/item/40025c33d7d9b7b9633aff87 中说:

至于所以用logistic而不用其它,是因为这种归一化的方法往往比较合理(人家都说自己叫logistic了嘛 呵呵),能够打压过大和过小的结果(往往是噪音),以保证主流的结果不至于被忽视。

参考资料:

http://hi.baidu.com/hehehehello/item/40025c33d7d9b7b9633aff87

回归、线性回归和逻辑回归【逻辑回归部分待完成】相关推荐

  1. 【数据挖掘】神经网络 后向传播算法 ( 线性回归与逻辑回归 | 单个神经元本质及逻辑 | 神经网络每一层分析 | 神经网络矩阵形式 | 线性变换与非线性变换 )

    文章目录 I . 线性回归 与 逻辑回归 II . sigmod 非线性激活函数 III . 神经元单元 逻辑 IV . 单个 神经元单元 总结 V . 神经网络 每一层分析 VI . 神经网络 矩阵 ...

  2. [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性函数.线性回归 参考:http://blog.csdn.net/luanpeng825485697/article/details ...

  4. 多元线性回归、逐步回归、逻辑回归的总结

    这是我的个人博客地址. 线性回归,前面用Python从底层一步一个脚印用两种方法实现了回归拟合.在这个高级语言层出不穷的年代,这样做显然不明智,所以我考虑用优秀的数据分析工具--R语言(不敢说最优秀, ...

  5. 二丶线性回归和logistic(逻辑斯蒂)回归

    说明: 线性回归和Logistic回归他们两个解决的并不是一类问题,名字的话,的确很容易让人误导,这两者的区别: 线性回归是用来解决回归问题,而Logistic回归是用来解决二分类问题的,一个是回归, ...

  6. 逻辑斯蒂回归(Logistics Regression)

    Author: 吕雪杰,xiaoran; Datawhale Logistics Regression简介 逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达 ...

  7. 一文“妙”解逻辑斯蒂回归(LR)算法

    一.前言 在感知器算法中,如下图 如果我们使用一个f(z)=z函数,作为激励函数,那么该模型即为线性回归.而在逻辑斯蒂回归中,我们将会采用f(z)=sigmoid(z) 函数作为激励函数,所以它被称为 ...

  8. 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...

    本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...

  9. 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为因变量,将用户的

    逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种.通过历史数据的表现对未来结果发生的概率进行预测.例如,我们可以将购买的概率设置为因变量,将用户的 ...

  10. 逻辑回归分类python实例_Python逻辑回归原理及实际案例应用

    前言 目录 1. 逻辑回归 2. 优缺点及优化问题 3. 实际案例应用 4. 总结 正文 在前面所介绍的线性回归, 岭回归和Lasso回归这三种回归模型中, 其输出变量均为连续型, 比如常见的线性回归 ...

最新文章

  1. MS SQL “ 无法启动分布式事务“问题的解决思路
  2. 以色列研究人员实现利用计算机风扇噪音窃听
  3. 深究AngularJS——AngularJS中的Controller(控制器)
  4. C语言 共用体/联合体 union
  5. Android设计模式之——命令模式
  6. 【计算机领域均可投稿,确保EI检索】移动通信·信息科学热门会议即将到来!更有限时优惠等你来领!...
  7. 蓝桥杯2015年第六届C/C++A组国赛第四题-穿越雷区
  8. [原译]Lambda高手之路第二部分
  9. JAVA学习第六十三课 — 关于client服务端 amp;amp; URL类 amp; URLConnection
  10. 四则运算生成程序(基于控制台)
  11. 奥克兰大学 计算机硕士 GPA,申请奥克兰大学需要GPA成绩吗
  12. 瞎扯数学分析:微积分
  13. 学不学吴恩达deeplearning.ai课程,看完这篇你就知道了
  14. ssm+java农村快递代取平台52wxh(程序+lw+源码+远程部署)
  15. json 学习之(json基础)
  16. PaddleOCR学习(一)PaddleOCR安装与测试
  17. 博客从CSDN迁移至简书啦
  18. 质数分解matlab程序
  19. Linux安装Python详细步骤
  20. 李瑞霖4.15黄金多头有此地无银三百两,白银走势涨跌

热门文章

  1. PAT甲级1081 Rational Sum:[C++题解]分数求和、辗转相除法求最大公约数、long long有一个数据溢出
  2. 万维钢新书《你有你的计划,世界另有计划》_《丑小鸭定理》读书笔记
  3. python 图标字体_Icon-font图标字体的四类制作方法
  4. java 线程分配_Java多线程原子引用分配
  5. 计算机组成知识试题及答案,《计算机组成与结构复习题及答案.doc
  6. 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿上市,性能提升20%,AI算力乘5倍...
  7. android 之开关控件的使用
  8. linux 下 c++ clock 函数理解
  9. sql 中的导航函数 FIRST_VALUE, LAST_VALUE
  10. mongodb type