#前言
从本文开始小林会相继给大家介绍一些有关机器学习的算法,由于本人也是一个新手小白,所以这些内容大家仅作为参考就好。这些基础算法也都是小林从b站上寻找的资源进行自学的,所以大家如果看完本篇及接下来的博客有任何不明白的地方,可以移步b站大学跟着大佬再进行深入的学习。本文仅作为学习笔记,方便自己日后查看,同时也将学习成果分享给大家。
#回归问题概述
首先我们来看一个这样的问题:银行贷款问题
这里我想提出一个问题:决定银行最终是否贷款以及贷款数额的因素是什么?毫无疑问,是贷款人的工资和年龄。这里需要引入几个有关机器学习的概念:标签(特征)和目标。正如上图所示,工资和年龄就是两个数据标签,我们将其定义为x1和x2,而贷款额度是不是就是我们预期希望银行所发放的金额,这里我们将其定义为目标。有了上述的两个概念之后呢,我们可以初步建立起一个公式:.但是这个公式所表现出来的不符合上图的实际,应为年龄和工资对于额度目标的影响是不同的,所以我们对公式进行进一步的变化:
。此时当我们拥有了这个公式之后,我们可以将上述的变量用一副图表示出来:
但是不知道大家发没发现一个问题,那就是我们的公式是线性的,正如上图的那个平面,无法做到对于所有的点进行拟合,所以我们只能寻求最符合所有点的平面,那么如何实现?
我们将公式进行一个小小的变形:
公式中和
我们一般称之为权重项,而
是我们为了去得到一个更优的平面而引入的偏置项。但是我们都知道引入一个
,我们的数据就不符合矩阵的形式,运算起来比较麻烦,怎么办?我们在刚刚的贷款图中在引入一个特征
,并且所有样本的值都为1,这是我们为了方便计算而对数据进行的预处理。所以最终我们的公式长这样:
#误差项定义
根据我们最终的得到的公式,我们将x1和x2代入,是不是会得到平面上的一个预测值,但是由于平面无法完全拟合目标,预测值与目标值之间是存在误差的。我们要做的,也正是机器学习所需要学习的,就是通过不断缩小这个误差值(一般我们也叫做损失函数),来使得这个预测值不断逼近目标值。
#误差的独立同分布的意义
这里我们对于误差项的定义如下:误差是独立并且具有相同的分布,并且服从均值为0方差为的高斯分布。我们需要对以上这个定义作出一定的解释。
独立:各个误差之间相互是独立的,不会受到其他误差的影响。比如张三和李四是好朋友,他们一起去银行贷款,银行不会因为张三的一句话而给李四多贷一点,还是得取决于李四自己的经济实力。
同分布:还是贷款的例子,张三去了建设银行,李四去了工商银行,那我们的研究究竟是针对哪个银行的呢?所以说误差也是一样的,必须属于同一个问题。
均值为0的高斯分布:这两个名词我决定一起来解释比较合适。银行是不是会根据贷款人的情况给有些人多贷一点,而给有些人少贷一点,但是绝对不会给所有人多贷或者给所有人都少贷,这些多贷或者少贷的额度和必须是0,才能保证银行的正常运行。恰好这符合高斯分布曲线,越靠近均值,数据所占的比例越大,比如银行给你多贷100万或者少贷100万的事情几乎不会发生。
#似然函数的引入
我们上面已经说过了误差符合独立同分布的高斯分布,那么我们现在就可以列出高斯分布的公式:
这里面由于我已经有了y(目标值)和(误差值)以及x(特征数据),现在就是需要求出一个合适的
,那我们就可以利用上面的公式,将
用y,x和
替换掉,就可以得出如下公式:
我们之前说过机器学习的目标是不是找到一个合适的使得误差值越小越好,那么我们如何求出这个
呢?这里我们需要用到似然函数。
正是由于误差值的独立同分布,才可以使用累乘,但是这个公式的运算量也太大了吧。我们随意给m赋一个1000,就得进行1000次乘法计算,那么怎么办?这里我们巧妙的将似然函数给取对数,这样就可以把乘法转换为加法。
但是有人会提出疑问,那么得出的值不就发生改变了?这里我们需要搞清楚,我们要求解的对象是谁?是极大值还是极大值点?很显然是极大值点。虽然取对的操作改变了极大值,但是不会改变极大值点。
#参数求解
我们将上述的公式转变为累加的形式,如下图所示:
这时候需要我们运用一点对数的运算法则,将相乘的形式转变为相加的形式,处理后是这样的:
在上述的公式中,我们将一些常量(针对具体某个问题,m是固定的,那么对于m的累加也就是定值常数)提到整体参数的前面 (例如m以及)。这时候我们需要再回头思考一下,现在我们要求解的是上述这个整体式子的最大值,也就是让我们的计算结果y越接近目标值,而式子的前半部分是定值,后半部分的恒正,要想求解y的最大值,是不是就需要求解后面部分的最小值。我们将这一部分单独提取出来,作为我们待求解的目标函数,也叫做loss(损失函数)
接下来就是一系列的数学处理过程,我就不多赘述。
但是到这里,我们发现机器学习的过程如何体现?上述的求解思路仅仅是给定数据求参数,并没有体现出机器学习的过程 。
#梯度下降
机器学习的过程就体现在对于不断优化的过程。前面我们说过现在要求解
的最小值,这个最小值的求解如何让计算机实现?
假如现在我想要快速下山(用来类比求解最小值的过程),那我会选择哪条路?毫无疑问是第三条,因为它最快,而第三条路本质上就是人所处位置的切线斜率。 那么这里涉及到一个问题,人的步长多少合适,如果我一次跨一大步,那么直接摔下山是毫无疑问的,所以步长的选择通常较小(0.01或者0.001)。每走一次都需要重新计算所处位置的新切线斜率,而我们需要下山,所以上述过程我们通常叫做沿着梯度下降。
通常对于某一个具体的问题,我们需要求解的并不止一个,而根据独立分布的原则,我们需要对每一个
都进行梯度下降的处理:
#参数优化
对于梯度下降我们有如下几种方式:
批量梯度下降:其优势在于算出的十分精确,每修改一次都需要遍历所有参数,这也就带来计算十分缓慢的结果。
随机梯度下降:与批量梯度相对,计算每一个数据都会改变一次参量,速度极快,但是同时也带来参数值很不准确的问题。
我们将上述两种方法的优点进行结合,提出了小批量梯度下降,这样既可以保证求解参数的准确性,也可以保证速度。在实际应用中通常选取的批量大小为64,128,256等
以上就是有关线性回归的相关理论知识,希望对大家有一定的帮助!