-
为什么SICP要讨论那么多的初等数学
2020-04-04 14:04:16如果不辅之以实际的例子,你的的理解可能会变成误解。这就是为什么教材需要大量实例的原因。而很多大牛的书之所以难读就在于例子太少,导致不得不先消化概念的抽象,再把误解变为正解。) 筛选合适的例子可并不是一...
谈论/教授「软件工程」的一大难点在于它太过抽象,你必须辅之以相应的代码,才能较为清楚的表述某一条软件工程的原则。(抽象不仅导致读者对概念难以把握,更糟糕的是,抽象能够从多个角度被理解。如果不辅之以实际的例子,你的的理解可能会变成误解。这就是为什么教材需要大量实例的原因。而很多大牛的书之所以难读就在于例子太少,导致不得不先消化概念的抽象,再把误解变为正解。)
筛选合适的例子可并不是一件容易的事情。代码量太少就无法体现出运用相应原则的必要性。学习者只会感觉做了一大堆“舍近求远”的工作,无法真心体会运用这些原则后会给自己带来哪些好处。可如果直接拿出一线的工程代码,其代码量又太大,以至于学习者无法把握重心,可能需要花费大量的时间才能辨别清楚一线代码的相关枝节与核心重点的差别。
而SICP采取的做法是使用「数学」中的问题来作为讨论的主题。初读SICP会给人非常多的错觉:
- 为什么我要浪费大量的时间讨论四则运算?!
- 这些东西不都是现成的吗,为啥要花功夫造轮子?
- 怎么感觉所有的代码都是把一句口语变成了不同的格式?
- 这是伪代码吗?真的可以运行吗?(这其实正是写得好的清晰代码的特点:代码本身就是注释)
为什么要讨论四则运算的实现?因为「数学」其实能够帮我们对齐认知、对齐对需求的理解。大部分的newbie developer没有意识到的一个问题是,写代码往往不是最困难的部分,最困难的部分在于对「需求」的拆解、对问题的精准理解。这也就是为什么experienced developer往往会说,遇到问题时首先不要奔向键盘,而是要奔向白板。在白板上、白纸上,先理清楚、拆解好你要解决的问题是什么、需求是什么,再写代码。往往,白板上的需求拆解,能够将进度往前推进80%。
但「需求拆解」这一步,又涉及到其它能力。但如果这里只是想要教授你「软件工程」的某个原则,直接给出一线的代码很可能会给学习者带来极大的挑战。并且,往往学习者意识不到这些困难并不是待学习的软件工程原则带来的,而是由需求拆解带来的。
幸好,世界上有一种东西叫做“基础教育”,对应到我国当然是9年义务教育。我们花费了9年的时间,对某些材料、需求和问题会达成高度一致的共识。毕竟,如果谁要是不认同这个「共识」,谁就会在中考、高考中败下阵来。而其中一个存储问题的宝藏区,当然就是数学。也即是,基础教育强制性地帮我们对齐了待解决问题的「需求」认知。从而大家根本就不需要拆解需求,这些需求的明细已经在无数的考试中深深地烙在我们的脑海里了。
但,熟悉的需求,并不意味着是简单的需求。事实上,跟随着SICP的脚步,我们会对数学中的很多初级概念有更深刻的认识和理解。那些我们再熟悉不过的函数操作,往往蕴含着大量不曾意识到的重复操作。于是,SICP带领你一步步地去识别这些重复操作,通过抽象、模块化,一步步为你引入软件工程的思考方式。你会发现,原来那么多风马牛不相及的函数,其实可以被一个统一的pattern来支配。而识别、提取出这样的pattern,能够为你增强代码的可复用性、加深对问题的理解。
因为有了「抽象」这个技术,它能帮助我们得以从更高的维度来处理问题,而不是局限在微观之中。很多developer,包括那些已经工作了十多年的developer,其实都不大明白抽象的作用。他们喜欢把一个函数写得巨长无比,好像如此就能体现自己的代码的高深。他们没有意识到,将一个长的函数拆成短小的函数(一个不错的短的标准就是函数的body部分刚好能够在显示器上全部展示完)是为了能够把细节压缩到一起形成新的抽象概念,从而能够运用这个新的抽象概念做更宏观的思考和解决方案的搭建。
又比如「有理数」这个概念,它其实是个复合的数据结构。虽然你可以把它拆成分子、分母,但为什么一定要把这两部分“粘起来”形成一个新的、被称作有理数的概念呢?理由是一样的,这样能帮助我们忽略不重要的细节,从而能够看到更宏观的本质,增强代码的复用性。SICP花费了大量的篇幅来重新讨论这些我们熟悉的材料。其重点就在于正因为这些概念是我们所熟悉的,所以可以更方便的引入新的视角和新的看问题的方式。而大部分人会因为所讨论的材料是自己所熟悉的,就会下意识地认为它毫无价值。
事实上,这种因为熟悉概念的引入而完全没有抓住学习重点的例子比比皆是。人们会因为材料的初等就放松警惕,认为所有的东西不过如此,从而被自己的“历史包袱”限定了自己前行突破的步伐。他们没办法抬起脑袋,从更宏观的视角来看清所要学习的重点到底在哪里。到底你所熟悉的材料是学习的重点,还是根据你熟悉的材料来阐述的新的看问题的视角和思考方式才是重点?无法区分「材料」和「材料所构筑的思想」是大部分处于认知初级阶段的学习者所有的通病。
所以,这里还会造成另外一个问题。有一部分人,可能凭借坚韧的毅力读完了SICP,但在一线写代码时却无法体现他在SICP中学到了相应软件工程技能。这大都在于他没有认识到,自己的学习重点不是早已熟知的数学,而是由熟悉概念构筑的视角和思考方式。
Appendix:
另一个槽点是,从pragmatic的角度讲,lisp毕竟不是参与一线coding的主流。虽然Paul Graham通过Hacker News证明了它是可以被用来写生产代码的,但却依旧无法改变它不具备更强实用性的事实。
如此,学习SICP会给人有点暴殄天物的感觉。出色的思想,却无法直接被用到工作中。但幸运的是,新加坡国立大学已经用js来重写了SICP这本书。而js,随着node的发展,可谓是性价比最高的programming language。对产品的原型迭代和快速开发来讲,js无疑是首选。而如果SICP的所有思想都由js来展开,那无疑能够用更精简、更实用的语法来快速掌握SICP中传递的思想,并可以直接将其应用在实际工作中。
有兴趣的朋友,可以通过在微信公众号「GeekArtT」中回复「sicpjs」来获取下载链接。
近期回顾
《绝命律师S05E06:托付终身的人》
《致富与黑客》
《当我们学习投资时在学习什么》
如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!
更多信息交流和观点分享,可加入知识星球:
-
机器学习:用初等数学解读逻辑回归
2017-05-02 02:35:00为了降低理解难度,本文试图用最基础的初等数学来解读逻辑回归,少用公式,多用图形来直观解释推导公式的现实意义,希望使读者能够对逻辑回归有更直观的理解。 “逻辑回归问题的通俗几何描述 逻辑回归处理的是分类...为了降低理解难度,本文试图用最基础的初等数学来解读逻辑回归,少用公式,多用图形来直观解释推导公式的现实意义,希望使读者能够对逻辑回归有更直观的理解。
“逻辑回归问题的通俗几何描述逻辑回归处理的是分类问题。我们可以用通俗的几何语言重新表述它:
空间中有两群点,一群是圆点“〇”,一群是叉点“X”。我们希望从空间中选出一个分离边界,将这两群点分开。注:分离边界的维数与空间的维数相关。如果是二维平面,分离边界就是一条线(一维)。如果是三维空间,分离边界就是一个空间中的面(二维)。如果是一维直线,分离边界就是直线上的某一点。不同维数的空间的理解下文将有专门的论述。
为了简化处理和方便表述,我们做以下4个约定:
-
我们先考虑在二维平面下的情况。
-
而且,我们假设这两类是线性可分的:即可以找到一条最佳的直线,将两类点分开。
-
用离散变量y表示点的类别,y只有两个可能的取值。y=1表示是叉点“X”,y=0表示是是圆点“〇”。
-
点的横纵坐标用
表示。
于是,现在的问题就变成了:怎么依靠现有这些点的坐标
和标签(y),找出分界线的方程。
“如何用解析几何的知识找到逻辑回归问题的分界线?-
我们用逆推法的思路:
假设我们已经找到了这一条线,再寻找这条线的性质是什么。根据这些性质,再来反推这条线的方程。 -
这条线有什么性质呢?
首先,它能把两类点分开来。——好吧,这是废话。( ̄▽ ̄)”
然后,两类点在这条线的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数!
-
首先,这个性质是非常好,可以用来区分点的不同的类别。
-
而且,我们对法向量进行规范:只考虑延长线通过原点的那个法向量p。这样的话,只要求出法向量p,就可以唯一确认这条分界线,这个分类问题就解决了。
还有什么方法能将法向量p的性质处理地更好呢?
因为计算各个点到法向量p投影,需要先知道p的起点的位置,而起点的位置确定起来很麻烦,我们就干脆将法向量平移使其起点落在坐标系的原点,成为新向量p’。因此,所有点到p’的投影也就变化了一个常量。假设这个常量为
,p’向量的横纵坐标为
。空间中任何一个点
到p’的投影就是
,再加上前面的常量值就是:
看到上面的式子有没有感到很熟悉?这不就是逻辑回归函数
中括号里面的部分吗?
令
就可以根据z的正负号来判断点x的类别了。
“从概率角度理解z的含义。
由以上步骤,我们由点x的坐标得到了一个新的特征z,那么:
z的现实意义是什么呢?
首先,我们知道,z可正可负可为零。而且,z的变化范围可以一直到正负无穷大。
z如果大于0,则点x属于y=1的类别。而且z的值越大,说明它距离分界线的距离越大,更可能属于y=1类。
那可否把z理解成点x属于y=1类的概率P(y=1|x) (下文简写成P)呢?显然不够理想,因为概率的范围是0到1的。
但是我们可以将概率P稍稍改造一下:令Q=P/(1-P),期望用Q作为z的现实意义。我们发现,当P的在区间[0,1]变化时,Q在[0,+∞)区间单调递增。函数图像如下(以下图像可以直接在度娘中搜“x/(1-x)”,超快):
但是Q的变化率在[0,+∞)还不够,我们是希望能在(-∞,+∞)区间变化的。而且在P=1/2的时候刚好是0。这样才有足够的解释力。
注:因为P=1/2说明该点属于两个类别的可能性相当,也就是说这个点恰好在分界面上,那它在法向量的投影自然就是0了。
而在P=1/2时,Q=1,距离Q=0还有一段距离。那怎么通过一个函数变换然它等于0呢?有一个天然的函数log,刚好满足这个要求。
于是我们做变换R=log(Q)=log(P/(1-P)),期望用R作为z的现实意义。画出它的函数图像如图:这个函数在区间[0,1]中可正可负可为零,单调地在(-∞,+∞)变化,而且1/2刚好就是唯一的0值!基本完美满足我们的要求。
回到我们本章最初的问题,“我们由点x的坐标得到了一个新的特征z,那么z的具体意义是什么呢?”
由此,我们就可以将z理解成x属于y=1类的概率P经过某种变换后对应的值。也就是说,z= log(P/(1-P))。反过来就是P=
。图像如下:
这两个函数log(P/(1-P)) 、
看起来熟不熟悉?
这就是传说中的logit函数和sigmoid函数!
小小补充一下:
-
在概率理论中,Q=P/(1-P)的意义叫做赔率(odds)。世界杯赌过球的同学都懂哈。赔率也叫发生比,是事件发生和不发生的概率比。
-
而z= log(P/(1-P))的意义就是对数赔率或者对数发生比(log-odds)。
于是,我们不光得到了z的现实意义,还得到了z映射到概率P的拟合方程:
有了概率P,我们顺便就可以拿拟合方程P=
来判断点x所属的分类:
当P>=1/2的时候,就判断点x属于y=1的类别;当P<1/2,就判断点x属于y=0的类别。
“构造代价函数求出参数的值到目前为止我们就有两个判断某点所属分类的办法,一个是判断z是否大于0,一个是判断g(z)是否大于1/2。
然而这并没有什么X用,以上的分析都是基于“假设我们已经找到了这条线”的前提得到的,但是最关键的
三个参数仍未找到有效的办法求出来。
还有没有其他的性质可供我们利用来求出参数
的值?
-
我们漏了一个关键的性质:这些样本点已经被标注了y=0或者y=1的类别!
-
我们一方面可以基于z是否大于0或者g(z) 是否大于1/2来判断一个点的类别,另一方又可以依据这些点已经被标注的类别与我们预测的类别的插值来评估我们预测的好坏。
-
这种衡量我们在某组参数下预估的结果和实际结果差距的函数,就是传说中的代价函数Cost Function。
-
当代价函数最小的时候,相应的参数
就是我们希望的最优解。
由此可见,设计一个好的代价函数,将是我们处理好分类问题的关键。而且不同的代价函数,可能会有不同的结果。因此更需要我们将代价函数设计得解释性强,有现实针对性。
为了衡量“预估结果和实际结果的差距”,我们首先要确定“预估结果”和“实际结果”是什么。
-
“实际结果”好确定,就是y=0还是y=1。
-
“预估结果”有两个备选方案,经过上面的分析,我们可以采用z或者g(z)。但是显然g(z)更好,因为g(z)的意义是概率P,刚好在[0,1]范围之间,与实际结果{0,1}很相近,而z的意思是逻辑发生比,范围是整个实数域(-∞,+∞),不太好与y={0,1}进行比较。
接下来是衡量两个结果的“差距”。
-
我们首先想到的是y-hθ(x)。
-
但这是当y=1的时候比较好。如果y=0,则y- hθ(x)= - hθ(x)是负数,不太好比较,则采用其绝对值hθ(x)即可。综合表示如下:
-
但这个函数有个问题:求导不太方便,进而用梯度下降法就不太方便。
-
因为梯度下降法超出的初等数学的范围,这里就暂且略去不解释了。
-
-
于是对上面的代价函数进行了简单的处理,使之便于求导。结果如下:
代价函数确定了,接下来的问题就是机械计算的工作了。常见的方法是用梯度下降法。于是,我们的平面线形可分的问题就可以说是解决了。
“从几何变换的角度重新梳理我们刚才的推理过程。回顾我们的推理过程,我们其实是在不断地将点
进行几何坐标变换的过程。
-
第一步是将分布在整个二维平面的点
通过线性投影映射到一维直线中,成为点x(z)
-
第二步是将分布在整个一维直线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
-
第三步是将所有这些点的坐标通过代价函数统一计算成一个值,如果这是最小值,相应的参数就是我们所需要的理想值。
“对于简单的非线性可分的问题。-
由以上分析可知。比较关键的是第一步,我们之所以能够这样映射是因为假设我们点集是线性可分的。但是如果分离边界是一个圆呢?考虑以下情况。
-
我们仍用逆推法的思路:
-
通过观察可知,分离边界如果是一个圆比较合理。
-
假设我们已经找到了这个圆,再寻找这个圆的性质是什么。根据这些性质,再来反推这个圆的方程。
我们可以依据这个性质:
-
圆内的点到圆心的距离小于半径,圆外的点到圆心的距离大于半径
-
假设圆的半径为r,空间中任何一个点
到原点的距离为
。
-
令
,就可以根据z的正负号来判断点x的类别了
-
然后令
,就可以继续依靠我们之前的逻辑回归的方法来处理和解释问题了。
从几何变换的角度重新梳理我们刚才的推理过程。
-
第一步是将分布在整个二维平面的点
通过某种方式映射到一维直线中,成为点x(z)
-
第二步是将分布在整个一维射线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
-
第三步是将所有这些点的坐标通过代价函数统一计算成一个值v,如果这是最小值,相应的参数就是我们所需要的理想值。
“从特征处理的角度重新梳理我们刚才的分析过程
其实,做数据挖掘的过程,也可以理解成做特征处理的过程。我们典型的数据挖掘算法,也就是将一些成熟的特征处理过程给固定化的结果。
对于逻辑回归所处理的分类问题,我们已有的特征是这些点的坐标,我们的目标就是判断这些点所属的分类y=0还是y=1。那么最理想的想法就是希望对坐标
进行某种函数运算,得到一个(或者一些)新的特征z,基于这个特征z是否大于0来判断该样本所属的分类。
对我们上一节非线性可分问题的推理过程进行进一步抽象,我们的思路其实是:
-
第一步,将点
的坐标通过某种函数运算,得到一个新的类似逻辑发生比的特征,
-
第二步是将特征z通过sigmoid函数得到新的特征
。
-
第三步是将所有这些点的特征q通过代价函数统一计算成一个值
,如果这是最小值,相应的参数(r)就是我们所需要的理想值。
“对于复杂的非线性可分的问题由以上分析可知。比较关键的是第一步,如何设计转换函数
。我们现在开始考虑分离边界是一个极端不规则的曲线的情况。
我们仍用逆推法的思路:
-
通过观察等先验的知识(或者完全不观察乱猜),我们可以假设分离边界是某种6次曲线(这个曲线方程可以提前假设得非常复杂,对应着各种不同的情况)。
-
第一步:将点
的坐标通过某种函数运算,得到一个新的特征
。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
-
第二步:将特征z通过sigmoid函数映射到新的特征
-
第三步:将所有这些样本的特征q通过逻辑回归的代价函数统一计算成一个值
,如果这是最小值,相应的参数
就是我们所需要的理想值。相应的,分离边界其实就是方程
=0,也就是逻辑发生比为0的情况嘛。
“多维逻辑回归的问题以上考虑的问题都是基于在二维平面内进行分类的情况。其实,对于高维度情况的分类也类似。
高维空间的样本,其区别也只是特征坐标更多,比如四维空间的点x的坐标为
。但直接运用上文特征处理的视角来分析,不过是对坐标
进行参数更多的函数运算得到新的特征
。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
而且,如果是高维线性可分的情况,则可以有更近直观的理解。
-
如果是三维空间,分离边界就是一个空间中的一个二维平面。两类点在这个二维平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
-
如果是高维空间,分离边界就是这个空间中的一个超平面。两类点在这个超平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
-
特殊的,如果是一维直线空间,分离边界就是直线上的某一点p。一类点在点p的正方向上,另一类点在点p的负方向上。这些点在直线上的坐标可以天然理解成类似逻辑发生比的情况。可见一维直线空间的分类问题是其他所有高维空间投影到法向量后的结果,是所有逻辑回归问题的基础。
“多分类逻辑回归的问题以上考虑的问题都是二分类的问题,基本就是做判断题。但是对于多分类的问题,也就是做选择题,怎么用逻辑回归处理呢?
其基本思路也是二分类,做判断题。
比如你要做一个三选一的问题,有ABC三个选项。首先找到A与BUC(”U”是并集符号)的分离边界。然后再找B与AUC的分离边界,C与AUB的分离边界。
这样就能分别得到属于A、B、C三类的概率,综合比较,就能得出概率最大的那一类了。
本文的分析思路——逆推法
画图,观察数据,看出(猜出)规律,假设规律存在,用数学表达该规律,求出相应数学表达式。
该思路比较典型,是数据挖掘过程中的常见思路。两个视角:几何变换的视角与特征处理的视角。
-
小结:
-
几何变换的视角:高维空间映射到一维空间 → 一维空间映射到[0,1]区间 → [0,1]区间映射到具体的值,求最优化解
-
特征处理的视角:特征运算函数求特征单值z → sigmoid函数求概率 → 代价函数求代价评估值,求最优化解
首先要说明的是,在逻辑回归的问题中,这两个视角是并行的,而不是包含关系。它们是同一个数学过程的两个方面。
-
比如,我们后来处理复杂的非线性可分问题的时候,看似只用的是特征处理的思路。其实,对于复杂的非线性分离边界,也可以映射到高维空间进行线性可分的处理。在SVM中,有时候某些核函数所做的映射与之非常类似。这将在我们接下来的SVM系列文章中有更加详细的说明。
在具体的分析过程中,运用哪种视角都可以,各有优点。
-
比如,作者个人比较倾向几何变换的视角来理解,这方便记忆整个逻辑回归的核心过程,画几张图就够了。相应的信息都浓缩在图像里面,异常清晰。
-
于此同时,特征处理的视角方便你思考你手上掌握的特征是什么,怎么处理这些特征。这其实的数据挖掘的核心视角。因为随着理论知识和工作经验的积累,越到后面越会发现,当我们已经拿到无偏差、倾向性的数据集,并且做过数据清洗之后,特征处理的过程是整个数据挖掘的核心过程:怎么收集这些特征,怎么识别这些特征,挑选哪些特征,舍去哪些特征,如何评估不同的特征……这些过程都是对你算法结果有决定性影响的极其精妙的精妙部分。这是一个庞大的特征工程,里面的内容非常庞大,我们将在后续的系列文章中专门讨论。
-
总的来说,几何变换视角更加直观具体,特征处理视角更加抽象宏观,在实际分析过程中,掌握着两种视角的内在关系和转换规律,综合分析,将使得你对整个数据挖掘过程有更加丰富和深刻的认识。
-
为了将这两种视角更集中地加以对比,我们专门制作了下面的图表,方便读者查阅。
原文发布时间为:2015-11-03
本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号
-
-
机器学习系列(2)_用初等数学解读逻辑回归
2015-10-20 22:15:33为了降低理解难度,本文试图用最基础的高中数学来解释逻辑回归,尽量少用或者不用公式,多用图形来直观解释推导公式的现实意义,希望使读者能够对逻辑回归有更直观的理解。作者:龙心尘 && 寒小阳
时间:2015年10月。
出处:
http://blog.csdn.net/longxinchen_ml/article/details/49284391。
http://blog.csdn.net/han_xiaoyang/article/details/49332321。
声明:版权所有,转载请注明出处,谢谢。一、 引言
前一篇文章《机器学习系列(1)_逻辑回归初步》发表后意犹未尽,感觉关于逻辑回归的很多神奇特性还没来得及深入展开,于是我们新加了这篇《机器学习系列(2)__用初等数学视角解读逻辑回归》。
为了降低理解难度,本文试图用最基础的初等数学来解读逻辑回归,少用公式,多用图形来直观解释推导公式的现实意义,希望使读者能够对逻辑回归有更直观的理解。
二、 逻辑回归问题的通俗几何描述
逻辑回归处理的是分类问题。我们可以用通俗的几何语言重新表述它:
空间中有两群点,一群是圆点“〇”,一群是叉点“X”。我们希望从空间中选出一个分离边界,将这两群点分开。注:分离边界的维数与空间的维数相关。如果是二维平面,分离边界就是一条线(一维)。如果是三维空间,分离边界就是一个空间中的面(二维)。如果是一维直线,分离边界就是直线上的某一点。不同维数的空间的理解下文将有专门的论述。
为了简化处理和方便表述,我们做以下4个约定:
- 我们先考虑在二维平面下的情况。
- 而且,我们假设这两类是线性可分的:即可以找到一条最佳的直线,将两类点分开。
- 用离散变量y表示点的类别,y只有两个可能的取值。y=1表示是叉点“X”,y=0表示是是圆点“〇”。
- 点的横纵坐标用
表示。
于是,现在的问题就变成了:怎么依靠现有这些点的坐标
和标签(y),找出分界线的方程。
三、 如何用解析几何的知识找到逻辑回归问题的分界线?
- 我们用逆推法的思路:
假设我们已经找到了这一条线,再寻找这条线的性质是什么。根据这些性质,再来反推这条线的方程。 - 这条线有什么性质呢?
首先,它能把两类点分开来。——好吧,这是废话。( ̄▽ ̄)”
然后,两类点在这条线的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数!
- 首先,这个性质是非常好,可以用来区分点的不同的类别。
- 而且,我们对法向量进行规范:只考虑延长线通过原点的那个法向量p。这样的话,只要求出法向量p,就可以唯一确认这条分界线,这个分类问题就解决了。
- 还有什么方法能将法向量p的性质处理地更好呢?
因为计算各个点到法向量p投影,需要先知道p的起点的位置,而起点的位置确定起来很麻烦,我们就干脆将法向量平移使其起点落在坐标系的原点,成为新向量p’。因此,所有点到p’的投影也就变化了一个常量。
假设这个常量为,p’向量的横纵坐标为
。空间中任何一个点
到p’的投影就是
,再加上前面的常量值就是:
看到上面的式子有没有感到很熟悉?这不就是逻辑回归函数中括号里面的部分吗?
令就可以根据z的正负号来判断点x的类别了。
四、 从概率角度理解z的含义。
由以上步骤,我们由点x的坐标得到了一个新的特征z,那么:
z的现实意义是什么呢?
首先,我们知道,z可正可负可为零。而且,z的变化范围可以一直到正负无穷大。
z如果大于0,则点x属于y=1的类别。而且z的值越大,说明它距离分界线的距离越大,更可能属于y=1类。
那可否把z理解成点x属于y=1类的概率P(y=1|x) (下文简写成P)呢?显然不够理想,因为概率的范围是0到1的。
但是我们可以将概率P稍稍改造一下:令Q=P/(1-P),期望用Q作为z的现实意义。我们发现,当P的在区间[0,1]变化时,Q在[0,+∞)区间单调递增。函数图像如下(以下图像可以直接在度娘中搜“x/(1-x)”,超快):
但是Q的变化率在[0,+∞)还不够,我们是希望能在(-∞,+∞)区间变化的。而且在P=1/2的时候刚好是0。这样才有足够的解释力。注:因为P=1/2说明该点属于两个类别的可能性相当,也就是说这个点恰好在分界面上,那它在法向量的投影自然就是0了。
而在P=1/2时,Q=1,距离Q=0还有一段距离。那怎么通过一个函数变换然它等于0呢?有一个天然的函数log,刚好满足这个要求。
于是我们做变换R=log(Q)=log(P/(1-P)),期望用R作为z的现实意义。画出它的函数图像如图:
这个函数在区间[0,1]中可正可负可为零,单调地在(-∞,+∞)变化,而且1/2刚好就是唯一的0值!基本完美满足我们的要求。
回到我们本章最初的问题,“我们由点x的坐标得到了一个新的特征z,那么z的具体意义是什么呢?”
由此,我们就可以将z理解成x属于y=1类的概率P经过某种变换后对应的值。也就是说,z= log(P/(1-P))。反过来就是P=
。图像如下:
这两个函数log(P/(1-P)) 、看起来熟不熟悉?
这就是传说中的logit函数和sigmoid函数!
小小补充一下:
- 在概率理论中,Q=P/(1-P)的意义叫做赔率(odds)。世界杯赌过球的同学都懂哈。赔率也叫发生比,是事件发生和不发生的概率比。
- 而z= log(P/(1-P))的意义就是对数赔率或者对数发生比(log-odds)。
于是,我们不光得到了z的现实意义,还得到了z映射到概率P的拟合方程:
有了概率P,我们顺便就可以拿拟合方程P=
来判断点x所属的分类:
当P>=1/2的时候,就判断点x属于y=1的类别;当P<1/2,就判断点x属于y=0的类别。
五、 构造代价函数求出参数的值
到目前为止我们就有两个判断某点所属分类的办法,一个是判断z是否大于0,一个是判断g(z)是否大于1/2。
然而这并没有什么X用,以上的分析都是基于“假设我们已经找到了这条线”的前提得到的,但是最关键的
三个参数仍未找到有效的办法求出来。
还有没有其他的性质可供我们利用来求出参数
的值?
- 我们漏了一个关键的性质:这些样本点已经被标注了y=0或者y=1的类别!
- 我们一方面可以基于z是否大于0或者g(z) 是否大于1/2来判断一个点的类别,另一方又可以依据这些点已经被标注的类别与我们预测的类别的插值来评估我们预测的好坏。
- 这种衡量我们在某组参数下预估的结果和实际结果差距的函数,就是传说中的代价函数Cost Function。
- 当代价函数最小的时候,相应的参数
就是我们希望的最优解。
由此可见,设计一个好的代价函数,将是我们处理好分类问题的关键。而且不同的代价函数,可能会有不同的结果。因此更需要我们将代价函数设计得解释性强,有现实针对性。
为了衡量**“预估结果和实际结果的差距”,我们首先要确定“预估结果”和“实际结果”**是什么。- **“实际结果”**好确定,就是y=0还是y=1。
- “预估结果”有两个备选方案,经过上面的分析,我们可以采用z或者g(z)。但是显然g(z)更好,因为g(z)的意义是概率P,刚好在[0,1]范围之间,与实际结果{0,1}很相近,而z的意思是逻辑发生比,范围是整个实数域(-∞,+∞),不太好与y={0,1}进行比较。
接下来是衡量两个结果的“差距”。
- 我们首先想到的是y-hθ(x)。
- 但这是当y=1的时候比较好。如果y=0,则y- hθ(x)= - hθ(x)是负数,不太好比较,则采用其绝对值hθ(x)即可。综合表示如下:
- 但这个函数有个问题:求导不太方便,进而用梯度下降法就不太方便。
- 因为梯度下降法超出的初等数学的范围,这里就暂且略去不解释了。
- 于是对上面的代价函数进行了简单的处理,使之便于求导。结果如下:
代价函数确定了,接下来的问题就是机械计算的工作了。常见的方法是用梯度下降法。于是,我们的平面线形可分的问题就可以说是解决了。
六、 从几何变换的角度重新梳理我们刚才的推理过程。
回顾我们的推理过程,我们其实是在不断地将点
进行几何坐标变换的过程。
- 第一步是将分布在整个二维平面的点
通过线性投影映射到一维直线中,成为点x(z)
- 第二步是将分布在整个一维直线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
- 第三步是将所有这些点的坐标通过代价函数统一计算成一个值,如果这是最小值,相应的参数就是我们所需要的理想值。
##七、 对于简单的非线性可分的问题。
- 由以上分析可知。比较关键的是第一步,我们之所以能够这样映射是因为假设我们点集是线性可分的。但是如果分离边界是一个圆呢?考虑以下情况。
- 我们仍用逆推法的思路:
- 通过观察可知,分离边界如果是一个圆比较合理。
- 假设我们已经找到了这个圆,再寻找这个圆的性质是什么。根据这些性质,再来反推这个圆的方程。
- 我们可以依据这个性质:
- 圆内的点到圆心的距离小于半径,圆外的点到圆心的距离大于半径
- 假设圆的半径为r,空间中任何一个点
到原点的距离为
。
- 令
,就可以根据z的正负号来判断点x的类别了
- 然后令
,就可以继续依靠我们之前的逻辑回归的方法来处理和解释问题了。
- 从几何变换的角度重新梳理我们刚才的推理过程。
- 第一步是将分布在整个二维平面的点
通过某种方式映射到一维直线中,成为点x(z)
- 第二步是将分布在整个一维射线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
- 第三步是将所有这些点的坐标通过代价函数统一计算成一个值v,如果这是最小值,相应的参数就是我们所需要的理想值。
八、 从特征处理的角度重新梳理我们刚才的分析过程
其实,做数据挖掘的过程,也可以理解成做特征处理的过程。我们典型的数据挖掘算法,也就是将一些成熟的特征处理过程给固定化的结果。
对于逻辑回归所处理的分类问题,我们已有的特征是这些点的坐标,我们的目标就是判断这些点所属的分类y=0还是y=1。那么最理想的想法就是希望对坐标
进行某种函数运算,得到一个(或者一些)新的特征z,基于这个特征z是否大于0来判断该样本所属的分类。
对我们上一节非线性可分问题的推理过程进行进一步抽象,我们的思路其实是:- 第一步,将点
的坐标通过某种函数运算,得到一个新的类似逻辑发生比的特征,
- 第二步是将特征z通过sigmoid函数得到新的特征
。
- 第三步是将所有这些点的特征q通过代价函数统一计算成一个值
,如果这是最小值,相应的参数®就是我们所需要的理想值。
九、 对于复杂的非线性可分的问题
由以上分析可知。比较关键的是第一步,如何设计转换函数
。我们现在开始考虑分离边界是一个极端不规则的曲线的情况。
我们仍用逆推法的思路:- 通过观察等先验的知识(或者完全不观察乱猜),我们可以假设分离边界是某种6次曲线(这个曲线方程可以提前假设得非常复杂,对应着各种不同的情况)。
- 第一步:将点
的坐标通过某种函数运算,得到一个新的特征
。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
- 第二步:将特征z通过sigmoid函数映射到新的特征
- 第三步:将所有这些样本的特征q通过逻辑回归的代价函数统一计算成一个值
,如果这是最小值,相应的参数
就是我们所需要的理想值。相应的,分离边界其实就是方程
=0,也就是逻辑发生比为0的情况嘛。
十、 多维逻辑回归的问题
以上考虑的问题都是基于在二维平面内进行分类的情况。其实,对于高维度情况的分类也类似。
高维空间的样本,其区别也只是特征坐标更多,比如四维空间的点x的坐标为。但直接运用上文特征处理的视角来分析,不过是对坐标
进行参数更多的函数运算得到新的特征
。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
而且,如果是高维线性可分的情况,则可以有更近直观的理解。- 如果是三维空间,分离边界就是一个空间中的一个二维平面。两类点在这个二维平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
- 如果是高维空间,分离边界就是这个空间中的一个超平面。两类点在这个超平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
- 特殊的,如果是一维直线空间,分离边界就是直线上的某一点p。一类点在点p的正方向上,另一类点在点p的负方向上。这些点在直线上的坐标可以天然理解成类似逻辑发生比的情况。可见一维直线空间的分类问题是其他所有高维空间投影到法向量后的结果,是所有逻辑回归问题的基础。
十一、 多分类逻辑回归的问题
以上考虑的问题都是二分类的问题,基本就是做判断题。但是对于多分类的问题,也就是做选择题,怎么用逻辑回归处理呢?
其基本思路也是二分类,做判断题。
比如你要做一个三选一的问题,有ABC三个选项。首先找到A与BUC(”U”是并集符号)的分离边界。然后再找B与AUC的分离边界,C与AUB的分离边界。
这样就能分别得到属于A、B、C三类的概率,综合比较,就能得出概率最大的那一类了。
##十二、 总结本文的分析思路——逆推法
画图,观察数据,看出(猜出)规律,假设规律存在,用数学表达该规律,求出相应数学表达式。
该思路比较典型,是数据挖掘过程中的常见思路。两个视角:几何变换的视角与特征处理的视角。
- 小结:
- 几何变换的视角:高维空间映射到一维空间 → 一维空间映射到[0,1]区间 → [0,1]区间映射到具体的值,求最优化解
- 特征处理的视角:特征运算函数求特征单值z → sigmoid函数求概率 → 代价函数求代价评估值,求最优化解
- 首先要说明的是,在逻辑回归的问题中,这两个视角是并行的,而不是包含关系。它们是同一个数学过程的两个方面。
- 比如,我们后来处理复杂的非线性可分问题的时候,看似只用的是特征处理的思路。其实,对于复杂的非线性分离边界,也可以映射到高维空间进行线性可分的处理。在SVM中,有时候某些核函数所做的映射与之非常类似。这将在我们接下来的SVM系列文章中有更加详细的说明。
- 在具体的分析过程中,运用哪种视角都可以,各有优点。
- 比如,作者个人比较倾向几何变换的视角来理解,这方便记忆整个逻辑回归的核心过程,画几张图就够了。相应的信息都浓缩在图像里面,异常清晰。
- 于此同时,特征处理的视角方便你思考你手上掌握的特征是什么,怎么处理这些特征。这其实的数据挖掘的核心视角。因为随着理论知识和工作经验的积累,越到后面越会发现,**当我们已经拿到无偏差、倾向性的数据集,并且做过数据清洗之后,**特征处理的过程是整个数据挖掘的核心过程:怎么收集这些特征,怎么识别这些特征,挑选哪些特征,舍去哪些特征,如何评估不同的特征……这些过程都是对你算法结果有决定性影响的极其精妙的精妙部分。这是一个庞大的特征工程,里面的内容非常庞大,我们将在后续的系列文章中专门讨论。
- 总的来说,几何变换视角更加直观具体,特征处理视角更加抽象宏观,在实际分析过程中,掌握着两种视角的内在关系和转换规律,综合分析,将使得你对整个数据挖掘过程有更加丰富和深刻的认识。
- 为了将这两种视角更集中地加以对比,我们专门制作了下面的图表,方便读者查阅。
-
初等数论--原根--a^k对模m的阶
2020-11-02 19:47:05信息安全数学基础--原根--a^k对模m的阶,什么情况下有阶相等 博主是初学信息安全数学基础(整除+同余+原根+群环域),本意是想整理一些较难理解的定理、算法,加深记忆也方便日后查找;如果有错,欢迎指正。 ... -
对矩阵的理解2
2009-05-15 11:26:16上一篇里说“矩阵是运动的描述”,到现在为止,好像大家都还没什么意见。但是我相信早晚会有数学系...我们学习微积分的时候,总会有人照本宣科地告诉你,初等数学是研究常量的数学,是研究静态的数学,高等数学... -
建筑中的数学之旅
2019-05-31 08:18:30第二条叙事主线从历史的角度逐步阐述当前的初等数学,包括欧几里得几何知识、三角学、向量的性质、二维和三维解析几何,以及微积分基础。Hahn旨在将两条叙事主线交织在一起展示它们是如何互相影响的。另外,他还通过... -
学数学——林群讲的东西
2019-10-01 13:04:251、学什么?少而多 初等数学:算术、代数、几何 高等数学:微积分、线性代数 ...对贴近生活的案例深刻理解,数学要先讲道理,再说定理 原视频传送门 转载于:https://www.cnblogs.com/RyanZhou/p/11377533.html... -
pytorch 变对角矩阵_如何理解矩阵?(四)
2020-12-08 15:40:53我们学习微积分的时候,总会有人照本宣科地告诉你,初等数学是研究常量的数学,是研究静态的数学,高等数学是变量的数学,是研究运动的数学。大家口口相传,差不多人人都知道这句话。但是真知道这句话说的是什么意思... -
被积函数中有x不能直接求导_数学一轮复习14,导数的概念及运算,注意求导法则对求导的制约...
2021-01-02 14:21:04通过实例分析,经历由平均变化率过渡到瞬时变化率的过程,了解导数概念的实际背景,知道导数是关于瞬时变化率的数学表达,体会导数的内涵与思想;2.体会极限思想;3.通过函数图象直观理解导数的几何意义;4.能根据... -
线性代数的直观理解 -- Intuition in Linear Algebra
2015-03-08 08:58:38受《理解线性代数》启发,结合自身学习的经验,直观的总结我对线性代数的理解。强调直观是因为在这里不纠缠于数学的严谨性,所以如果追求数学严谨性和证明的还是去看教材比较好。统计的目标是对数表内各种数据进行... -
《高等学校教材 初等数论 (第三版)》作者:闵嗣鹤,严士健 出版年:2003年
2019-05-25 17:27:40高等学校教材:初等数论(第三版) 平装 – 2003年7月1日 ...希望帮助读者了解数论的进展,加强对数学统一性的理解。 本书可作为师范院校和综合大学数学系的教材或教学参考书,中学数学教师的参考用书。 -
2020高一数学教师期末工作总结范文.doc
2021-01-18 20:13:07在课程改革中,教师是关键,教师对新课程的理解与参与是推进课程改革的前提。认真学习数学课程标准,对课改有所了解。课程标准明确规定了教学的目的、教学目标、教学的指导思想以及教学内容的确定和安排。继承传统... -
高一数学第二学期工作总结.doc
2021-01-18 12:24:49高一数学第二学期工作总结 高一年级是初中与高中的衔接阶段,是转变... 在课程改革中,教师是关键,教师对新课程的理解与参与是推进课程改革的前提。认真学习数学课程标准,对课改有所了解。课程标准明确规定了教学... -
高一数学上半年教学工作总结.doc
2021-01-15 21:56:10在课程改革中,教师是关键,教师对新课程的理解与参与是推进课程改革的前提。认真学习数学课程标准,对课改有所了解。课程标准明确规定了教学的目的、教学目标、教学的指导思想以及教学内容的确... -
matlab数学建模实例与编程教程(实例讲解+代码)
2014-04-12 18:00:11第一章 线性规划;第二章 整数规划;第三章 非线性规划;第四章 动态规划;第五章 图与网络;第六章初等数学方法建模;第七章 图与网络(二)...有详细的实例分析与讲解,并附代码分析,对我的学习和理解带来很大帮助。 -
预科数学基础教程 [许涓 主编] 2012年版
2019-05-09 20:39:21最后,在“练一练”部分安排相当数量的练习来考察学生的数学汉字识别和数学运算以及相应的理解能力,以巩固新学到的“中国数学”知识。(三)浅入深出,注重启发我们的教材从识数开始,以集合作纽带,把学生逐步带到... -
MATLAB数学实验一百例题解.docx
2020-10-28 07:17:41一元函数微分学 实验 1 一元函数的图形基础实验 实验目的 通过图形加深对函数及其性质的认识与理解 , 掌握运用函数的图形来观察和分析 函数的有关特性与变化趋势的方法 , 建立数形结合的思想 ; 掌握用 Matlab 作平面... -
(完整word版)MATLAB数学实验100例题解.docx
2020-10-24 01:29:33一元函数微分学 实验 1 一元函数的图形基础实验 实验目的 通过图形加深对函数及其性质的认识与理解 , 掌握运用函数的图形来观察和分析函数的有关特性与变化趋势的方法 ,建立数形结合的思想 ; 掌握用 Matlab 作平面... -
2011年考研数学指导:线性代数复习技巧
2010-04-05 22:34:00考研辅导专家为广大考研学子总结出以下几个技巧: 一、注重对基本概念的理解与把握,正确熟练运用基本方法及基本运算。 线性代数的概念很多,重要的有:代数余子式,伴随矩阵,逆矩阵,初等变换与初等矩阵,正交... -
数学分析方法选讲 [刘德祥,刘绍武,冯立新 主编] 2014年版
2019-05-14 17:24:33根据教学上的考虑和作者自己的体会,把这些常用的处理方法适当命名后止式地予以提出,作者认为这样做有利于学生加深对方法本身的理解。第2章是Abel方法及应用简介。在第3章不等式与估值问题部分中,作者利用幂平均... -
一阶导与二阶导的关系_导数很难!难在哪里?最基本的二阶求导意义都不理解,肯定难...
2021-01-01 09:38:06作为高中数学压轴题的导数,总是被赋予“难题”一称,学生看到此类问题,总是不能够对参面量之间的关系进行分析,看到函数导数更是头疼,按部就班的只能依照往日做题步骤,一阶求导后,在二阶求导,完全不清楚二阶... -
最小二乘法的C语言实现
2017-06-07 13:07:591. 前言 最近断断续续看了一些...不过,前段时间工作中用到了最小二乘法,让我又对数学有了新的理解。 理论指导实践的意义,就在于此。 2. 最小二乘法 根据维基百科的说明: 最小二乘法(又称最小平方法)是 -
关于师范生的实习报告范文.doc
2021-01-18 15:32:58在过去三年数学教育的学习过程中比较强调的是对高等数学和一些初等数学知识的学习,以及对教育理论和心理学理论的学习,掌握新的教育理论知识和扎实、系统、精深的专业学科知识,能使自身的知识结构得到不断完善、... -
ECC的标准C语言设计与实现
2012-03-14 20:06:38本文主要侧重理论,代码实现暂不涉及。这就要求你要有一点数学...《近世代数基础》《初等数论》之类的书,最好您先翻一下,这对您理解本文是有帮助的。别怕,我尽量会把语言通俗些,希望本文能成为学习ECC的敲门砖。 -
的不定积分_不定积分大集合——方法篇
2021-01-03 14:35:55写在前面的话:在数学分析的计算题当中,我们最常见的就是求极限,求导,求不定积分。因此想在这里分享一下自己的学习成果,希望可以帮助到你们。本次不等积分大合集将分为三个部分——方法篇、技巧篇、例题训练篇。... -
中学教师实习报告.doc
2020-12-27 15:28:50在过去三年数学教育的学习过程中比较强调的是对高等数学和一些初等数学知识的学习,以及对教育理论和心理学理论的学习,掌握新的教育理论知识和扎实、系统、精深的专业学科知识,能使自身的知识结构得到不断完善、... -
实习教师实习报告.doc
2020-12-27 15:28:19在过去三年数学教育的学习过程中比较强调的是对高等数学和一些初等数学知识的学习,以及对教育理论和心理学理论的学习,掌握新的教育理论知识和扎实、系统、精深的专业学科知识,能使自身的知识结构得到不断完善、... -
师范生见习报告.doc
2020-12-27 14:48:29在过去三年数学教育的学习过程中比较强调的是对高等数学和一些初等数学知识的学习,以及对教育理论和心理学理论的学习,掌握新的教育理论知识和扎实、系统、精深的专业学科知识,能使自身的知识结构得到不断完善、... -
20XX老师实习报告范文1000字.doc
2020-12-27 14:41:19在过去三年数学教育的学习过程中比较强调的是对高等数学和一些初等数学知识的学习,以及对教育理论和心理学理论的学习,掌握新的教育理论知识和扎实、系统、精深的专业学科知识,能使自身的知识结构得到不断完善、...