几天不见,甚是惦记!小 Mi 系列的流动正在热火朝天地进行中,小 Mi 看到大伙儿的激情,能源更加十足,这不又急不可待地更新来了!
在上期的多变量线性回归介绍中,咱们学习了多维特色、多变量的梯度降落法以及在实现梯度降落过程中的特色缩放和如何抉择学习率这两个技巧,明天小 Mi 在其根底上,持续率领大家学习多项式回归、正规方程法以及介绍正规方程的不可逆性。好啦,废话不多说啦,咱们持续开始吧!
5 特色和多项式回归
仍旧是以预测房价为例,假如咱们有两个特色,别离是房子临街的宽度和垂直宽度。这就是咱们想要卖出的房子的图片,临街宽度其实就是你领有的土地的宽度,而这所房子的纵向深度就是你的房子侧面的宽度(定义为长度这样可能更好了解一点),因而咱们便有两个特色,临界宽度和纵深,这样咱们就能够建设一个线性回归模型,其中临界宽度是第一个特色,纵深是第二个特色。这里须要留神的是,当使用线性回归时,不肯定非要用给出的和作为特色,换个角度咱们还能够本人发明新的特色!(是不是脑洞大开!)因而,如果要预测房子的价格,小 Mi 可能会发明一个新的特色,能够称之为,即临界宽度与纵深的乘积,也就是屋宇的面积,这样一来就只会用到一个特色:
这边小 Mi 须要揭示大家留神的是,有时候不肯定须要间接应用临界宽度和纵深,这两个咱们一开始应用的特色,有时通过定义新的特色,你可能会失去一个更好的模型。
就拿上图来说,有这样一个住房价格的数据集,可能会有多个不同的模型用于拟合,抉择之一是可能是二次模型,因为直线仿佛并不能很好地拟合这些数据。用二次模型去拟合,然而最初发现可能二次函数仿佛也有点不合理。因为,一个二次函数最终会降下来,随着土地面积的减少,房子的价格必然不会降落下来。那么小 Mi 又抉择应用三次方的函数,进行数据拟合发现,上图中绿色的线对这个数据集拟合得更好,因为它不会在最初降落。
察看曲线图咱们能够晓得,通常状况下线性回归并不会实用于所有数据,有时咱们须要曲线方程来适应咱们的数据。那么,咱们又应该如何将模型与数据进行拟合呢?应用多元线性回归的办法,咱们能够对算法做一个简略的批改来实现它,依照咱们之前假如的模式,咱们晓得如何拟合,就像这样:
如果咱们想拟合这个三次模型,因为是预测一栋房子的价格,那么对应起来,特色设为房子的面积,第二个特色设为屋宇面积的平方,将第三个特色设为屋宇面积的立方,仅仅通过将这三个特色这样设置,而后再利用线性回归的办法就能够拟合这个模型。须要注意的是,如果房子的大小范畴在 1~100 之间,那么房子面积的平方的范畴就是 1~1000,而第三个特色,立方的范畴则是 1 到 10 的 6 次方,因而这三个特色的范畴有很大的不同,这时如果应用梯度降落法,特色缩放将会十分重要。
6 正规方程
到目前为止,在波及线性回归算法时咱们通常会选用梯度降落法来最小化代价函数。应用迭代算法,通过梯度降落的屡次迭代,来收敛到全局最小值。然而在面对某些线性回归问题时,正规方程法可能是一个更好的办法来帮忙咱们求得参数的最优值。总的来说,其提供了一种求的解析办法,不须要运行迭代算法,而是能够间接一次性地求解的最优值,所以说基本上只须要一步就能够失去最优值。(是不是很简略粗犷!)
那么当初小 Mi 带大家先对这个算法有一个直观的了解,上例子!
假如有一个非常简单的代价函数,其实就是对于实数的函数(只是一个标量或者说只是一个实数值,是一个数字,并不是向量哦)。假如代价函数是这个实参数的二次函数,那么如何最小化一个二次函数呢?这个问题应该大家都会解决,是不是!这时候只须要对 J 求对于的导数,并且将导数置零,这样就能够求出使得最小的值。
当然在理论状况中,并不是一个实数,而是一个 n + 1 维的参数向量。而代价函数则是这个向量的函数,也就是到的函数,这时候咱们应该如何最小化这个代价函数呢?实际上,有一个办法能做到,就是一一对参数求 J 的偏导数,并且把他们全副置零,求出,,…, 始终到的值,这样就能失去最小化代价函数 J 的值。然而如果真的手动求解出参数到,这个偏微分最终可能很简单,这样不仅浪费时间还很麻烦。如何求出使得代价函数最小化的值这个过程是须要理解的。
再上一个例子!如果有 4 个训练样本:
为了实现正规方程法,在数据集中,假如这四个训练样本是所有数据,在数据集中须要加上一列对应额定特色变量的,它的取值永远是 1。接下来咱们要做的就是构建一个矩阵 X,这个矩阵根本蕴含了训练样本所有的特色变量,同时对 y 值进行相似的操作,构建向量 y。
即:
使用正规方程办法求解参数:
通常状况来看,咱们能够晓得 X 是一个 m *(n+1)维矩阵,y 会是一个 m 维向量,其中 m 是训练样本数量,n 是特色变量数,因为咱们多加了一列额定特色变量,所以其实是 n + 1 维。最初,用矩阵 X 和向量 y 来计算,从而失去的解:
X 转置乘以 X 的逆乘以 X 转置乘以向量 y,这样就可能失去使得代价函数最小化的。
而就是更加通用的模式为:假如咱们有 m 个样本,始终到和 n 个特色变量。所以每一个训练样本可能是这样的一个向量,是 n + 1 维的。每个训练样本给出这样的 n + 1 维特征向量,构建设计矩阵 X 的办法就是取第一个训练样本,也就是一个向量,取它的转置,最初是一个扁长型的,让转置作为矩阵 X 的第一行,而后把第二个训练样本进行转置,作为 X 的第二行,以此类推,直到最初一个训练样本取它的转置,作为矩阵 X 的最初一行,这就是矩阵 X,一个 m *(n+1)维矩阵。
举个例子:
如果我只有一个特色变量,除了之外只有一个特色变量,而始终为 1,如果我的特征向量等于某个理论的特色变量,比如说屋宇大小,那么我的 X 会是这样:,这样就是一个 m * 2 的矩阵。而向量 y 则是把训练集中所有房子的价格放在一起,失去一个 m 维的向量。最初,构建出矩阵 X 和向量 y,就能够求出后果。
那么,如果具体求出这个后果呢?是的逆矩阵,令 A 等于 X 转置乘以 X,那么就是,能够借助编程语言计算这个值。这样的式子会给出最优的值而不须要进行特色缩放,即便特色,,的范畴相差很大。
最初,何时应该应用梯度降落法,而何时应该应用正规方程法,给大家进行一个总结,如果有 m 个训练样本,n 个特色变量,梯度降落法的毛病之一就是须要抉择学习速率,并且须要运行屡次,尝试不同的学习速率,直到找到运行成果最好的那个,所以这会有额定的工作和麻烦,梯度降落的另一个毛病是,须要更屡次的迭代,这须要取决于具体情况,计算可能会更慢。至于正规方程,不须要抉择学习速率,这样就比拟不便,并且容易实现,只须要运行一步就行了,同时也不须要迭代,所以不须要画出的曲线来检测收敛性或者其余额定的工作。这么一看,仿佛正规方程法会更受欢迎,然而咱们须要器重的是,正规方程法也有一些毛病。梯度降落法中,在特色变量很多的状况下,也能够失常工作,即便有上百万个特色变量,梯度降落法通常很有成果,相同,正规方程法为了求解参数,需要求出这一项,这个后果是一个 n * n 的矩阵,如果有 n 个特色变量的话。而对于大多利用来说,实现逆矩阵计算的代价以矩阵维度的三次方增长,大抵为 n 的三次方,所以如果特色变量数目 n 特地大的话,那么这个计算会十分浪费时间,速度上会慢很多。因而,如果 n 很大的状况下,咱们更偏向于抉择梯度降落法,当然啦,如果 n 比拟小的话,那么正规方程就是更优抉择。那么,如何定义大小呢?这里须要阐明一下,如果 n 是上百的,计算百位数乘以百位数的逆矩阵,对于计算机来说是没有任何问题的,如果 n 是上千的,还是能够应用正规方程法的,然而当 n 上万了,就须要思考梯度降落法了,当然也不齐全相对,然而当 n 远大于此,就肯定是选用梯度降落法了。这里咱们也很难给出确切的数字,到底特色数量应该达到多少时,须要选用梯度降落法,失常来看就是在一万左右,能够选用梯度降落或者其余算法,
因而,只有特色变量的数目并不大,正规方程是一个很好的计算参数的代替办法,然而随着咱们须要学习的学习算法越来越简单,例如当波及分类算法的时候,logistic 回归算法时,正规方程是不太实用的,依然须要应用梯度降落法。因而,梯度降落法是一个十分有用的算法,在有大量特色的线性回归问题中,在更加简单的学习算法中,然而对于线性回归的这个特定的模型,正规方程在小样本的特色变量下,是一个比梯度降落实现更快的代替算法。所以,依据具体的算法,具体的问题,以及特色变量的数目,这两个算法都是值得学习和深入研究的。
梯度降落与正规方程的比拟:
正规方程的 python 实现:
xxxxxxxxxx
import numpy as np
def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X 等价于 X.T.dot(X)
return theta
好啦,至此,小 Mi 曾经把线性回归的所有问题带着大家一起学习啦,下期咱们将开始着手学习新的学习算法。咱们下期见哦~