600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 回归 线性回归和逻辑回归【逻辑回归部分待完成】

回归 线性回归和逻辑回归【逻辑回归部分待完成】

时间:2018-10-09 11:35:05

相关推荐

回归 线性回归和逻辑回归【逻辑回归部分待完成】

一、回归

“回归”这个词很有误导性,在陈希孺的《概率论与数理统计》中对这个词的来源有过解释。是个外国人,在做数据分析的时候,发现将数据画出来后,不管大的小的数据都会有一种趋于中间的趋势,这样的趋势在他看来叫做”回归“,因此,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维数据,最终参数个数应该有多少个?这样的模型的表现如何?有没有对应的名字?

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

供参考:

/hehehehello/item/40025c33d7d9b7b9633aff87中说:

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

参考资料:

/hehehehello/item/40025c33d7d9b7b9633aff87

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。