关于机器学习:MindSpore跟着小Mi一起机器学习吧多变量线性回归一

38次阅读

共计 4879 个字符,预计需要花费 13 分钟才能阅读完成。

小 Mi 学习,向上踊跃!前两节小 Mi 带大家学习了单变量线性回归,还具体分析了主动求解最小代价函数参数的梯度降落法。这不有了单变量,是不是必定有多变量?!明天小 Mi 跟大家一起探讨的就是一种更为无效,适宜理论状况的模式 - 多变量线性回归~~

1 多维特色
既然是多变量线性回归,那么必定是存在多个变量或者多个特色的状况啦。就拿之前钻研的线性回归来说,只有一个繁多的特色变量即 x 示意屋宇面积,咱们心愿用这个特色量来预测 Y,也就是屋宇的价格。当然,理论状况必定并非如此,大伙在买房的时候是不是还要思考屋宇的数量、楼层数、房子的年龄等等各种信息呀,那么咱们就能够用来示意这四个特色,依然能够用 Y 来示意咱们所想要预测的输入变量。

当初咱们有四个特色变量,如下图:

小写 n 能够用来示意特色量的数目,这里例子中 n =4,有 4 个特色。这里的 n 和之前的符号 m 是不一样的概念,之前咱们用 m 来示意样本的数量,所以如果你有 47 行,那么 m 就是这个表格外面的行数或者说是训练样本数。而后咱们要用来示意第 i 个训练样本的输出特征值。举个具体的例子,就示意第二个训练样本的特征向量,所以这里的 =,即预测第二套房子价格的四个特色量。小 tips,这里的上标 2 就是训练集的一个索引,可千万不要给它看作是 x 的二次平方哦,而是对应着你所看到的表格中的第二行,也就是第二个训练样本,是一个四维向量。事实上更广泛地来说,这是一个 n 维的向量。而则示意第 i 个训练样本中第 j 特色量的值,对应表格中,代表着第二个训练样本中第三个特色量的值,也就是 2。

好了,表达形式搞清楚了,那么假如因为变量的增多,当然也会有所扭转啦。单变量的假如函数是,这么一类比,小 Mi 要考考大家啦!多变量又是什么状况呢,又是多变量,又是线性的。没错,反对多变量假如模式就是:。

举个例子:

具体来说,这个假如是为了预测以万为单位的屋宇价格,一个房子的根本的价格可能是 80w,加上每平方米 1000 元,而后价格会随着楼层数的减少持续增长,随着卧室数的减少而减少,然而呢,随着应用年数的减少而升值,这么一看这个例子是不是很有情理!

不过强迫症的小 Mi 还想队伍模式更加对立一点,为了示意不便,咱们能够假设的值为 1,具体而言,这意味着对于第 i 个样本都有一个向量,并且。也能够说额定定义了第 0 个特色量。因而,当初的特征向量 x 是一个从 0 开始标记的 n + 1 维的向量。而参数也是一个从 0 开始标记的向量,它也是 n + 1 维的特色量向量。

由此假如就能够摇身一变简化为:,其中上标 T 代表矩阵的转置,是不是很奇妙!

这里小 Mi 还真不得不夸下这个,是它是它就是它,帮忙咱们能够以这种十分简洁的模式写出假如。这就是多特色量状况下的假如模式,也就是所谓的多元线性回归。多元一词就是示意咱们用多个特色量或者变量来预测 Y 值。

2 多变量梯度降落
好了,多变量线性回归假如的模式曾经有了,也就是说料曾经有了,接下来就要开始炒菜啦!

在多元回归的假如模式中,咱们曾经按常规假如。此模型的参数包含,但在这里咱们不把它看作 n 个独立参数,而是思考把这些参数看作一个 n + 1 维的向量,因而代价函数的表达式示意为:

其中,

咱们的指标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。多变量线性回归的批量梯度降落算法为:

即:

求导数后可失去:

咱们要不断更新每个参数,通过减去乘以导数项,咱们再整顿好写成,从而将会失去可行的用于多元线性回归的梯度降落法。

代码示例:

计算代价函数:

。其中,

Python 代码:

def computeCost(X, y, theta):

inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))

3 梯度降落法实际 - 特色缩放
接下来,咱们将学习一些在梯度降落运算中的实用技巧,首先小 Mi 给大家喝少一个称为特色缩放的办法,这个办法如下:

如果你有一个机器学习问题,这个问题有多个特色,而你能确保这些特色都处在一个相近的范畴内,也就是说确保不同特色的取值在相近的范畴内,这样梯度降落法就能更快地收敛。具体来说,如果你有一个具备两个特色的问题,其中是屋宇面积大小,它的取值在 0~2000 之间,是卧室的数量,可能取值在 1~5 之间,如果你要画出代价函数的等值线,那么看起来应该是像这样的,是一个对于参数和的函数,这里要疏忽,并假想这个函数的变量只有和,但如果的取值范畴远远大于的取值范畴的话,那么最终画进去的代价函数的等值线就会呈现出这样一种十分歪斜并且椭圆的形态,其实 2000 比 5 的比例会让这个椭圆更加瘦长。所以这个又瘦又高的椭圆形等值线图就是这些十分高大修长的椭圆形形成了代价函数的等值线。如果你在这种代价函数上运行梯度降落的话,你的梯度最终可能须要花很长一段时间,并且可能会来回稳定,而后会通过很长时间,最终才会收敛到全局最小值。

事实上,你能够设想,如果这些等值线更夸大一些,就是把它画的更细更长,可能就比这更夸大,后果就是梯度降落的过程可能更加迟缓,重复来回振荡须要更长的工夫,才找到一条通往全局最小值的路。在这样的状况下,一种无效的办法就是进行特色缩放。具体来说,如果把特色定义为房子的面积大小除以 2000,并且把定义为卧室的数量除以 5,那么代价函数的等值线就会偏移得没那么重大,看起来更圆一些了。如果你在这样的代价函数上来执行梯度降落的话,那么梯度降落算法能够从数学上来证实,就会找到一条更间接的门路,通向全局最小,而不是像方才那样,沿着一条简单得多的门路来找全局最小值。因而,通过这些特色缩放,它们的值的范畴变得相近,在这个例子中,咱们最终使两个特色和都在 0 和 1 之间,这样你失去的梯度降落法就会更快地收敛。

更个别地,咱们执行特色缩放时,咱们通常的目标是将特色的取值束缚到 - 1 到 + 1 的范畴内。具体来说,你的特色总是等于 1。因而,这曾经是在这个范畴内,但对其余的特色,你可能须要通过除以不同的数,来让它们处于同一范畴内。- 1 和 + 1 这两个数字并不是太重要,所以,如果你有一个特色,它的取值在 0~3 之间,这没问题;如果你有另外一个特色,取值在 - 2 到 +0.5 之间,这也十分靠近 - 1 到 + 1 的范畴,这些都是能够的;但如果你有另一个特色比方,如果它的单位在 -100~+100 之间,那么这个范畴跟 -1~+ 1 就有很大不同了。所以,这可能是一个范畴不太适合的特色。相似地,如果你的特色在一个十分十分小的范畴内,比方一个特色的范畴在 -0.0001~+0.0001 之间,那么这同样是一个比 -1~+ 1 小得多的范畴。因而,我同样会认为,这个特色的范畴不适合。所以,可能你认可的范畴,兴许能够大于 + 1 或者小于 +1,然而也别太大,比方 +100,或者也别太小,比方这里的 0.001,不同的人有不同的教训。然而,失常能够这么思考,如果一个特色是在 -3~+ 3 范畴内,这个范畴是能够承受的,但如果这个范畴大于了 -3~+ 3 的范畴,我可能就要开始留神了,如果它的取值在 -1/3~+1/ 3 的话,我也感觉还不错,能够承受,或者是 0~1/ 3 或者 -1/3~0,这些典型的范畴我都感觉是能够承受的,但如果特色的范畴获得很小的话,比方刚刚提及的,就要开始思考。因而,总的来说,不必过于放心你的特色是否在完全相同的范畴或区间内,然而只有它们足够靠近的话,梯度降落法就会失常地工作。除了将特色除以最大值以外,在特色缩放中,有时候咱们也会进行一个称之为均值归一化的工作,也就是说你有一个特色,就能够用来替换,让你的特征值具备为 0 的平均值。很显著,咱们不须要把这一步利用到中,因为总是等于 1,所以它不可能有为 0 的平均值,然而对其余的特色来说,比方房子的大小取值介于 0~2000 之间,并且如果房子面积的平均值是等于 1000,那么你能够用如下公式,将的值变为 size, 减去平均值,再除以 2000。相似地,如果这些房子有 1~5 卧室,并且均匀一套房子有两间卧室,那么你能够应用这个公式来均值归一化你的第二个特色,在这两种状况下,你能够算出新的特色和,这样它们的范畴能够在 -0.5~+0.5 之间。当然这不肯定对,的值能够略大于 0.5,但很靠近。更个别的法则是,你能够把代替为,其中,定义是训练接中特色的平均值,而这个是该特征值的范畴,范畴指的是最大值减去最小值。或者对于学过标准差的同学来说,把设为变量的标准差也是能够的,然而其实用最大值减最小值就能够了。相似地,对于第二个特色,也能够同样的减去平均值再除以范畴,也就是最大值减最小值。这类公式将你的特色兴许并不是这样,然而大略是这样范畴,顺便提一下,只须要将特色转换为相近似的范畴就都是能够的,特色缩放其实并不需要太准确,只是为了让梯度降落可能运行得更快一点而已,收敛所需的迭代次数更少就行了。

4 梯度降落法实际 - 学习率
另一种技巧能够使梯度降落在实践中工作地更好,也就是无关学习率。具体而言,这是梯度降落算法的更新规定,咱们须要意识的是所谓的调试是什么,还有一些小技巧来确保梯度降落是失常工作的,另外,还须要晓得如何抉择学习率。

通常做的事是确保梯度降落失常工作。梯度降落所做的事件就是为你找到一个值,并且心愿它可能最小化代价函数。因而,通常能够在梯度降落算法运行时,画出代价函数的值。

这里的 x 轴示意的是梯度降落算法的迭代次数。随着梯度降落算法的运行,你可能会失去这样一条曲线,留神 x 轴是迭代次数,之前咱们给出的中,x 轴示意的是参数向量,与以后图像不同。具体来说,第一个红点的含意是运行 100 次的梯度降落迭代后失去某个值,对于这个点,示意梯度降落算法 100 步迭代后,失去的值算出的。而第二个红点对应的是梯度降落算法 200 步迭代后失去的值算出的。所以这个曲线示意的是梯度降落的每步迭代后代价函数的值。如果梯度降落算法失常工作的话,每一步迭代之后都应该降落。这条曲线的一个用途在于它能够通知你,当你达到 300 步迭代后,300-400 步迭代之间,并没有降落多少,所以当你达到 400 步迭代时,这条曲线看起来曾经很平坦了。在这里 400 步迭代的时候,梯度降落算法差不多曾经收敛了。通过这条曲线能够帮忙你判断梯度降落算法是否曾经收敛。顺便提一下,对于每一个特定的问题,梯度降落算法所需的迭代次数可能会相差很大,所以对于某一个问题,梯度降落算法只须要 30 步迭代就能够达到收敛,然而换一个问题,兴许梯度降落算法须要 3000 步迭代或者是 3000000 步甚至更多,实际上咱们很难提前判断,梯度降落算法须要多少步能力收敛。另外,也能够进行一些主动的收敛测试,也就是说让一种算法来通知你梯度降落算法是够曾经收敛。

梯度降落算法收敛所须要的迭代次数依据模型的不同而不同,咱们不能提前预知,咱们能够绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。

也有一些自动测试是否收敛的办法,例如将代价函数的变动值小于某个阀值(例如 0.001),那么测试就断定函数曾经收敛,然而抉择一个适合的阈值是相当艰难的,因而,为了检测梯度降落算法是否收敛,更偏向于通过看曲线图,而不是依附主动收敛测试。

此外,这种曲线图还能够提前告知咱们算法没有失常工作,具体地说,代价函数随迭代步数的变动曲线,实际上在一直回升,就表明梯度降落算法没有失常工作,而这样的曲线图意味着我应该应用较小的学习率。先前也曾经推理过学习率大小的问题,梯度降落算法的每次迭代受到学习率的影响,如果学习率过小,则达到收敛所需的迭代次数会十分高,会收敛得很慢;如果学习率过大,每次迭代可能不会减小代价函数,可能会越过部分最小值导致无奈收敛。所以如果画出代价函数的曲线,咱们能够分明晓得到底产生了什么

具体来说,咱们通常能够尝试一系列值:

比方:0.001,0.003,0.01,0.03,0.1,0.3,1,…,每 3 倍取一个值,而后对这些不同的值绘制随迭代步数变动的曲线,从而抉择的是疾速降落的一个值。

好啦,明天小 Mi 给大家简略介绍了多变量线性回归,还附赠了大家在解决梯度降落过程中通用的两个小技巧。不得不说,梯度降落真的是 yyds!好啦,咱们下期再见~

正文完
 0