社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【NLP机器学习基础】从线性回归和Logistic回归开始

天池大数据科研平台 • 5 年前 • 702 次点击  


古语常云:“大道至简”,万事万物纷繁复杂,最终却归至几个最简单的道理。我常常在想,如今很火的AI领域是否也是如此。将AI真正学懂学会的过程就像一场遥不可及的漫长攀登,起始于晦涩难懂的数学领域(高数/线代/概率论),踉跄于公式满篇的机器学习,还要翻越神经网络、编程与数据科学库等重重大山,最终抵达应用的那个分岔路口,也从不是彼岸,只是新的开始。

作者 | Miss思

1 概述

“现在的时代是深度学习的时代。”

我时常听到有人这么说,一度也是这么认为,将各种STOA模型的理解和复现似乎才是重中之重,至于机器学习,都是统计学习时代的老古董了,干嘛那么认真去学呢?

这种想法让我在研究生入学第一阶段的基础学习过程中一度变得轻慢而浮躁,尤其是发现机器学习算法的实践只需要那小小几行代码的时候,是啊,调个库,调个包,谁不会呢?谁会那么傻,还一页页去啃西瓜书,去推《统计学习方法》?那些数学公式也太麻烦了吧~

可是我忽略了太多冰山下面的东西,就像学习武术伊始,没有学好扎马步。

机器学习一直以来是一门非常关键的学科,他的重要地位从未因为他所蕴含的数学内容而受到任何撼动,反而由于其严密的逻辑性和可解释性成为机器学习算法强大的背后力量。

机器学习的优越之处其一在于他扎根数据的分析。从实实在在的数据样本分布出发,从千百年前数学家提出的统计概率理论出发,每个公式的证明和每个公式的推导都有着清晰明了的理论依据。从最大似然估计到最小二乘法的最优参数选择,从中心极限定理到高斯分布,虽然是基于假设去做推论,但每一步都走的扎实。

机器学习的优越之处其二在于他对于数据样本的宽容性。众所周知,深度学习时代的神经网络模型是极度依赖于大量数据样本的,这也催生了如今的数据标注行业的火爆,也有了那句极具讽刺意义的“有人工才有智能”。不论是CV行业图片的标注,还是NLP行业文本的数据标注,是这些非常基础却又一直重复的底层工作,成就了上层监督学习模型璀璨的光芒。而传统机器学习对于数据的依赖相对较轻,他并不需要巨大无比的数据量,而只是需要使用一部分数据进行算法尝试即可获得不错的效果。

在数据量少时先进行尝试,再决定是否投入大批人力物力财力进行数据标注,这是一种很常见的思路。如今火爆的预训练模型+利用小批量数据微调其实也是这样的思路,只是机器学习比他早了很多年。

我从不提倡单纯去学习某一层面而批判另一个层面,相反,最佳的结合莫过于两者联手。在拥有充足数据资源的情况下使用深度学习网络进行特征提取,再结合机器学习思想或算法进一步处理,往往是更完美的做法,事实上,人们确实也这么做了。我曾读过组里师兄的一篇优秀论文,其核心就是从目前棘手的问题入手,思考如何利用机器学习算法和深度学习模型进行解决,他巧妙地对数学公式进行变换,以一种相当强大的逻辑自洽完成了对一种经典NLP应用的算法优化,获得了国际会议的一致好评。

你看,强强联手就是这么酷。

2 回归基础

首先我们要明白一件事,机器学习究竟要做什么?

我们都学过数学,对函数也并不陌生,记得高考最头痛的数学题也和函数有关,但我们所接触的往往是已经给出的一个函数,参数固定,而x未知,对吗?

机器学习要做的这件事却和我们的认知相悖,他是基于过去的已知数据样本,根据某种算法来利用机器学出参数来,并以此来预测未来的重要事件。

如今是疫情时期,我们就拿现在大家都关心的疫情预测来举例吧,我曾在微博上看到清华AI团队预测疫情将会在2.16日左右出现拐点,这个预测时间是如何确定的,我猜测很大可能也是机器学习算法,根据过往疫情爆发的数据选用合适的模型学习出准确率较高的参数,进而对未来可能发生的事件进行预测。
从这个例子中,我们发现了机器学习的三要素,模型、策略、算法,这也是李航老师在《统计学习方法》中所提出的核心概念。模型定义了解空间,在监督学习算法中,他就是包含了所有可能的条件概率分布或决策函数;我们将学习过程看作一个在解空间中进行搜索的过程,那么策略就是考虑用什么样的准则学习以优化目标,从而使其预测值更加接近于训练集的真实值;而算法就是指学习模型的具体方法,如著名的梯度下降法。

我们首先来看模型,模型的确定往往与数据样本密切相关。

比如,什么是分类,什么是回归,就可以从数据样本长什么样来确定,y是连续的,OK,你是回归,y是离散的,你就是分类,就是这么简单粗暴。你也可以从图形角度来看,回归往往是造出一条连续的曲线与数据样本的真实值进行拟合,而分类则是在离散的样本里切上几刀,像分蛋糕一样。

那么,科学家们是如何将数据转化为可以推理和预测的数据公式呢?这里蕴藏着一些概率与数理统计的知识。首先,我们会假设所有样本都是独立同分布的,那么其误差即服从均值为0,方差为某定值的高斯分布。Why? 因为中心极限定理。

中心极限定理假设有无穷多样本进行分布,且x1,x2....xn互相独立,则样本们服从同一分布,且具有相同的期望和方差,并一定会收敛到标准正态分布。在实际问题中,很多随机现象可以看作众多因素的独立分布影响的综合反应,近似正态分布的应用前提往往是大量样本确实存在。

以上内容,是理解下面三种回归算法的前提。

3  回归算法

在详细讲解回归算法之前,我们首先来了解一下这些算法有哪些应用。

线性回归处理的是数值问题,也就是最后预测出的结果是数字。比如根据大批量房产数据及价格做房价预测,又比如利用过去股市的数据选取模型做股价拟合和股价预测。而逻辑回归属于分类算法,也就是说,逻辑回归预测结果是离散的分类。比如推断这封邮件是否是垃圾邮件,以及用户是否会点击此广告等等。

回归算法是后面若干强大算法的基石,他分为两个重要的子类:线性回归与逻辑斯特回归。将这两个算法理解透彻,将能够更容易理解接下来的机器学习算法。下面,我们首先来看线性回归。

3.1  线性回归

给定由d个属性描述的数据样本x = (x1;x2;...;xd),其中xi是x在第i个属性上的取值,线性模型试图学得一个通过属性的线性组合来进行预测的函数,即f(x) = w1x1+w2x2+...+wnxn,一般用向量形式会写成 f(x) = w的转秩*x+b,其中样本固定,而w作为参数也是一个n维的向量,当w和b确定后,线性模型也就得以确定。

而我们要做的线性回归,就是在面对预测值连续,且拥有多个属性一定数据样本的情况下,学出参数向量w和b,从而确定出一个函数来,这个函数就是我们通常所说的模型,他在预测这种情况下的未来值时,同样具有较高的准确率。

那么,我们从机器学习的三要素考虑,模型层面,由上一节内容我们可以知道由中心极限定理,样本服从高斯分布,那么策略层面,我们选用什么准则以优化学习目标,算法层面,我们又使用什么具体方法利用机器进行参数学习呢?

从严谨的数据分布角度来说,有兴趣的伙伴可以跟着我推一推。由于数据服从正态分布,即所有样本都是独立同分布的,那么就可以用似然函数进行推理(具体过程如下图所示),可以看到,在x(i),参数确定下表示出y(i)的概率,再进行最大似然估计,使用对数函数将连乘优化为加和后,最终结果若要取最大,则在其他式子数值固定的前提下,包含theta参数的那个式子就要取最小,将他提取出来后得到的J(theta)即是传说中的最小二乘估计,这也是线性回归的目标函数(损失函数)。这个值越小,损失函数越小,模型所预测的结果与真实值相比差距就越小,模型就越好。这也揭示了最小二乘法的本质:高斯分布+最大似然估计——>最小二乘。
当然,我也阅读了《西瓜书》,书中并未对此进行如此细致的推导,直接告知读者使用基于均方误差最小化来进行模型求解的“最小二乘法”来进行模型优化,并直接给出推导出的公式结论也是非常容易理解的,不过我想,经过推导的话,可能理解会更深刻吧~

OK,当推导出损失函数之后,我们策略方面就得到了完美的解答,接下来就是算法层面了。怎样优化损失函数,让损失函数值最小?

我们可以引入线性代数,将样本与参数全部用向量表示,使用线性代数的已知推论进行驻点的求取,将X的每一行对应一个样本,共M个样本,将X的每一列对应样本的一个维度,共N维,则求取梯度就变成了纯粹的线性代数运算,过程如下图所示。这样求出的theta就是最小二乘意义下的参数最优解。
为了防止过拟合,theta往往还会加上lambda扰动,即线性回归的复杂度惩罚因子,希望他的参数不要过多,其参数和不要过大,因而就有了我们都知道的L1正则(LASSO)(拥有特征选择能力),L2正则(Ridge回归),以及L3正则(Elastic Net,将L1和L2正则进行加权结合)。
然而,使用线性代数进行算法计算依旧是人力层面的推导计算,不符合利用计算机进行“机器学习"的初衷。科学家因而研究出了”梯度下降算法”,使参数theta沿着负梯度方向迭代,更新后的theta使损失函数越来越小。

了解完线性回归后,我们再来看Logistic回归。

3.2  Logistic回归

Logistic回归则与线性回归在一开始的应用出发点就有所不同,虽然二者看似都是回归,但一个用于回归,一个用于分类。我们可以将Logistic回归看作是加了sigmoid函数的线性回归,他的形状很像S形,所以才会以Sigmoid命名。
Sigmoid函数在之后的深度学习中也会被频繁用到,因为他的作用将数值结果转化为了0到1之间的概率,接着我们依据这个概率进行预测,比如概率大于0.5,则这封邮件就是垃圾邮件,或者肿瘤是否是恶性等等。

他的表现形式如下图所示,由于服从二项分布,因此独特的表达方式让他的参数估计和求导都变得与众不同。
但让人感到诧异的是,他参数的学习规则与线性回归的学习规则是完全一致的,都如下图所示:
二者的差异只是在于模型所服从的分布不同,也可以认为是函数表达式的不同。逻辑斯特回归服从二项分布,由最大似然估计推导出最终的损失函数,而线性回归则服从正态分布。因此,我们可以认为是对数几率函数Sigmoid函数的出现,将线性回归的数值转化为0~1之间的概率,从而用于分类作用。在Logistic函数的表达式中,中z = theta的转秩*x,而y = 1/1+e^z,这个公式则完全体现了数值转化的过程。

综上,我们对线性回归和Logistic回归算法进行了详细的讲解。我们分别从算法的作用、算法的数学形式、算法损失函数的推导及计算参数的策略进行了探索,并对两者算法的异同点进行了对比分析。

希望学到这里的你能够心得满满,并且有所收获:),觉得不错也可以关注一波!

【往期精彩】

免费开放,从 Python入门到Tensorflow基础与实践

【天池大赛】3D人工智能挑战赛

转发,让更多人看到
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/61936
 
702 次点击