正规方程 公式

本文介绍了正规方程作为线性回归问题的直接解法,与迭代的梯度下降法进行对比。正规方程通过一次性求解矩阵的逆来获得最优解,避免了多次迭代,适用于特征变量数量不大的情况。当特征矩阵不可逆时,可以使用伪逆函数来解决。另一方面,梯度下降法在大量特征变量时表现优秀,但需要选择学习速率并可能需要多次迭代。文章还讨论了何时选择正规方程法和梯度下降法,以及特征缩放的影响。
摘要由CSDN通过智能技术生成

 日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


 

1.正规方程(区别于迭代方法的直接解法)
	对于某些线性回归问题,正规方程能给我们更好的方法来求得参数θ的最优值。

	1.前面讲解中一直在使用的线性回归算法是梯度下降法(迭代算法),目的是为了最小化代价函数J(θ)。使用这种梯度下降法(迭代算法)需要经过很多步,
	  也就是需要梯度下降的多次迭代才能收敛到全局最小值。
	  相反的,正规方程提供了一种求参数θ值的解析解法,那么我们使用正规方程便不再需要运行梯度下降法(迭代算法),便可以直接一次性求解得参数θ的最优值。
	  所以使用正规方程基本上只需要一步就可以得到最优解。事实上,正规方程有优点也有缺点。

	2.假设下图中有一个非常简单的代价函数J(θ),假设θ是一个实数值(标量),那下图中的代价函数J(θ)就是这个实数θ的二次函数。
	  关于如何最小化一个二次函数的问题,对于了解微积分的人来说可能知道最小化一个函数的方法可以是对它求导,并且将导数设置为0,
	  所以对代价函数J(θ)求关于θ的导数,首先将导数置为0,这样就可以求出“使得代价函数J(θ)最小化的”θ实数值。

	3.在我们感兴趣的问题中,θ不是一个实数值,θ而是一个n+1维的向量,而代价函数J(θ0,θ1,...,θm)是这个n+1维向量的函数,也就是θ0到θm的函数。
	  如何最小化代价函数J(θ0,θ1,...,θm),实际上微积分告诉我们有一个方法就是逐个对参数θj求代价函数J的偏导数,然后把该些偏导数都置为0。
	  这样做之后便可以求出θ0,θ1一直到θn的值,这样就能够得到“最小化代价函数J的”θ值。
	  如果真的做完微积分并且求解出参数θ0到θn,这个偏微分最终可能很复杂,接下来要做的实际上并不是遍历所有的偏微分,因为这样做太久太费事,
	  此处只是告诉你偏导数为0时的θ值,换个说法就是使得代价函数J(θ)最小化的θ值。

	4.下图有m=4个训练样本,为了实现正规方程法,要做的是便是在数据集中加上一列,额外增加的该列用于代表额外特征变量x0,并且额外特征变量x0的取值永远等于1。
	  接下来如下图构建一个矩阵X,这个矩阵X包含了训练样本中的所有特征变量x0、x1、x2、x3的值,矩阵X中每行每列的值对应训练样本中每行每列的特征变量的值。
	  然后还需要构建一个向量y,这个向量y包含了所有的预测价格值。矩阵X是一个m*(n+1)维的矩阵,m为样本数量,n为特征数量,n+1加的是额外特征变量x0。
	  向量y是一个m维向量,m为样本数量。
		用矩阵X和向量y计算:θ=(X^T*X)^(-1)*X^T*y,表示θ等于 “矩阵X转置乘以矩阵X的”逆矩阵 乘以 矩阵X转置乘以向量y,
		也可以描述为 矩阵X转置 乘以 矩阵X 取逆 乘以 矩阵X转置 乘以 向量y。
		公式中的-1次方表示的是逆矩阵,比如矩阵X的逆矩阵写作X^(-1)。(X^T*X)^(-1) 是 X^T*X 的逆矩阵。
		上述公式用于获取“能够使得线性回归的代价函数J(θ)最小化的”θ值,即θ最优解

	5.假如有m个训练样本,从(x^(1),y^(1))...一直增加到(x^(m),y^(m)),每一个/每一行样本中有n个特征变量,y是房价,m是样本数量。
	  	1.每一个/每一行的训练样本x^(i)则包含x_0^(i)、x_1^(i)、...、x_n^(i)的n个特征变量,
		  即每一个/每一行的训练样本x^(i)可以表示为一个n+1维的特征向量:x^(i)=[x_0^(i),x_1^(i),...,x_n^(i)]。
		2.构建矩阵X的方法,也被称为设计矩阵。
		  把一共m个的训练样本x^(m),即一共m个n+1维的特征向量放到下面的一个矩阵X中,那么矩阵X可以即是一个m*(n+1)维的矩阵。
	  		矩阵X第一行:取第一个训练样本x^(1)的转置(x^(1))^T 放到这里,也就是取一个n+1维的特征向量的转置(x^(1))^T 放到这里
			矩阵X第二行:取第二个训练样本x^(2)的转置(x^(1))^T 放到这里,也就是取一个n+1维的特征向量的转置(x^(2))^T 放到这里
	  		矩阵X第m行(最后一行):取第m个训练样本x^(m)的转置(x^(m))^T 放到这里,也就是取一个n+1维的特征向量的转置(x^(m))^T 放到这里

		3.假如只有一个特征变量x_1^(i),除了x_0之外只有一个特征变量,而x_0始终为1。
		  	训练样本x^(i)中第一行:元素为1,也就是x_0
		  	训练样本x^(i)中第二行:元素为x_1^(i),某个实际的特征变量,比如房屋大小
			根据上述训练样本x^(i),然后设计一个矩阵X放进m个的训练样本,组成一个m*2维的矩阵:
				矩阵X第一行:1 和 x_1^(1)
				矩阵X第二行:1 和 x_2^(1)
				矩阵X第m行(最后一行):1 和 x_m^(1)

		4.有时会在向量y上面画一个箭头,来表示这是一个向量,或者就只写一个y是一样的。
		  向量y包含训练集中所有房子的正确价格,那么有m个房子的正确价格,便构成一个m维的向量y。
		  m维的向量y = [y^(1),y^(2),...,y^(m)]

		5.用上述的矩阵X和m维的向量y来构建θ
			用矩阵X和向量y计算:θ=(X^T*X)^(-1)*X^T*y,表示θ等于 “矩阵X转置乘以矩阵X的”逆矩阵 乘以 矩阵X转置乘以向量y,
			也可以描述为 矩阵X的转置 乘以 矩阵X 取逆 乘以 矩阵X的转置 乘以 向量y。
			公式中的-1次方表示的是逆矩阵,比如矩阵X的逆矩阵写作X^(-1)。(X^T*X)^(-1) 是 X^T*X 的逆矩阵。

			1.A = X^T*X:使矩阵A 等于 矩阵X的转置 乘以 矩阵X。矩阵X的转置 是一个矩阵,矩阵X的转置乘以矩阵X 也是一个矩阵。
			2.A^(-1) = (X^T*X)^(-1):根据上述X^T*X 等于 矩阵A,那么便得出“矩阵X转置乘以矩阵X的”逆矩阵 等于 矩阵A的逆矩阵。
			3.Octave中使用 pinv(X'*X)*X'*y 来表示公式θ=(X^T*X)^(-1)*X^T*y.
				上述公式用于获取“能够使得线性回归的代价函数J(θ)最小化的”θ值,即θ最优解。
				Octave中 使用X'表示X的转置。pinv是用来计算逆矩阵的函数。
				pinv(X'*X)实际就是计算(X^T*X)^(-1),表示计算“矩阵X转置乘以矩阵X的”逆矩阵。
			
	6.提到特征缩放和让特征变量的值限制在相似范围内,如果使用正规方程法,那么就不需要特征缩放。
		如果某个特征变量x_1在0到1的区间之内:0 <= x_1 <= 1
		如果某个特征变量x_2在0到1000的区间之内:0 <= x_2 <= 1000
		如果某个特征变量x_3在0到10^(-5)的区间之内:0 <= x_3 <= 10^(-5)。
		如果此时使用正规方程法,0 <= x_3 <= 10^(-5)是没有问题的,不需要做特征缩放。
		尽管如果使用梯度下降法,特征缩放仍然很重要。

 	7.何时应该使用梯度下降法,而何时应该使用正规方程法。
		1.梯度下降法的缺点:
			1.假如你有m个训练样本,n个特征变量,梯度下降法的缺点之一就是需要选择学习速率a,这通常表示需要运行多次尝试不同的学习速率a
		  	  才能找到运行效果最好的那个学习速率a,所以这是一种额外的工作和麻烦。
			2.梯度下降法的另外一个缺点就是它需要更多次的迭代,取决于具体细节计算可能会更慢。

		2.梯度下降法的优点:
			梯度下降法在特征变量的数量n很多的情况下也能运行的相当好,所以即使你有上百万的特征变量,运行梯度下降法通常都很有效,他会正常的运行。

		3.正规方程法缺点:
			正规方程法为了求解参数θ,那么首先需要求解(X^T*X)^(-1)这一项,需要计算这一项“矩阵X转置乘以矩阵X的”逆矩阵,
			也可以描述为计算 矩阵X的转置 乘以 矩阵X 取逆。这部分的X^T*X(矩阵X转置乘以矩阵X)是一个n*n的矩阵,即矩阵X转置和矩阵X的积的维度是一个n*n的矩阵,
			如果你有n个特征变量的话,即n是特征变量的数量,对大多数计算应用来说,实现逆矩阵计算的代价,以矩阵维度的三次方增长,
			因此计算这个逆矩阵的代价大致是n的三次方级的时间 O(n^3),有时稍微比n三次方级快一些,但是对我们来说足够接近了,
			所以如果特征变量的数量n很大的话,那么计算这个量会很慢,实际上正规方程法会慢很多,因此如果n很大,可能还是使用梯度下降法更好,
			因为我们不想花费n的三次方级的时间,但是如果特征变量的数量n比较小的话,那么正规方程法可能能更好地求解参数。
			那么怎么区分特征变量的数量n是属于大还是属于小呢?比如说特征变量的数量n是上百的话,那么计算百位数乘以百位数的逆矩阵对于现代计算机来说没有问题。
			如果特征变量的数量n是上千的,我还是会使用正规方程法,因为千位数乘以千位数的矩阵做逆变换,对于现代计算机来说实际上还是非常快的,
			但如果特征变量的数量n是上万,我可能就会开始犹豫,因为万位数乘以万位数的矩阵作逆变换会开始有点慢,此时可能倾向于梯度下降法,
			但也不绝对是特征变量的数量n等于一万就逆变换一个万位数乘以万位数的矩阵,但如果特征变量的数量n远大于此的话,就可能会使用梯度下降法了。
   			所以如果n等于10^6,有一百万个特征变量的话,那么做百万位数乘以百万位数的矩阵的逆变换就变得耗费时间,如果有这么多特征变量,
			一定会使用梯度下降法。到底特征数量达到多少时该使用梯度下降法,很难给出确切数字,但是对我来说通常是在一万左右,
			才会开始考虑换成梯度下降法或者其他算法。

		4.正规方程法优点:
			正规方程法不需要选择学习速率a,所以比较方便也容易实现,通常只要运行一下这就够了,并且也不需要迭代,
			所以不需要画出J(θ)曲线来检查收敛性,即不需要采取任何额外的步骤。

		5.总结
			只有特征变量的数量并不是很大,正规方程法是一个很好的计算参数θ的替代方法,具体地说,只要特征变量的数量小于一万,
			我通常使用正规方程法而不使用梯度下降法。
			以后当我们讲到分类算法、logistic回归算法,正规方程法都不适用于这些的更复杂的学习算法,仍然需要使用梯度下降法,
			因此梯度下降法是一个非常有用的算法,既可以用在大量特征变量的线性回归问题,也能用于这些更复杂的学习算法。
			对于线性回归这个特定的模型,正规方程法会是一个比梯度下降法更快的替代算法。

2.正规方程在矩阵不可逆情况下的解决方法
	1.问题:当计算θ=(X^T*X)^(-1)*X^T*y时,如果X^T*X(矩阵X转置乘以矩阵X)是不可逆的话怎么办?
	2.了解线性代数的知识便知道,有些矩阵可逆而有些矩阵不可逆,我们称这些不可逆矩阵为奇异或退化矩阵。
	  X^T*X(矩阵X转置乘以矩阵X)的不可逆问题其实很少发生,在Octave里面,如果你用pinv(X'*X)*X'*y来计算θ,你降得到正解。
	  在Octave里面有两个函数可以求解矩阵的逆矩阵,一个是pinv伪逆函数,另外一个是inv逆函数,不同的线性代数库叫法不同。
	  数学上可以证明,只要你使用pinv,他就能计算出θ值,即使X^T*X(矩阵X转置乘以矩阵X)是不可逆的。

	3.如果X^T*X(矩阵X转置乘以矩阵X)是不可逆的,通常有两种最常见的原因。
		1.第一个原因是:
			如果由于某些原因,你的学习问题包含了多余的特征,例如在预测住房价格时,如果特征值x_1是以平方英尺为单位的房子面积,
			特征值x_2是以平方米为单位的房子面积,因为1米等于3.28英尺,四舍五入到两位小数,
			特征值x_1和特征值x_2的两个特征值将始终满足公式“x_1=(3.28^2)*x_2(x_1等于3.28的平方乘以x_2)”,这是比较进阶的线性代数了。
			但是如果你在线性代数上非常熟练的话,你就会知道这两个特征值是不是可以像这样用一个线性方程(x_1=(3.28^2)*x_2)联系起来,
			这样的话,X^T*X(矩阵X转置乘以矩阵X)将是不可逆的。
		2.第二个原因是:
			运行的算法有很多特征,具体地说,当样本数量m 小于等于 特征数量n 的时候,比如有10个样本数量(m=10),100个特征数量(n=100),
			要找到适合的参数向量θ,它是n+1维向量,那么n=100时便是101维的向量θ。要从10个训练样本中找到101个参数值,有时可能会成功,
			但这并不总是一个好主意,因为要配置100或101个参数时,10个样本数量还是有些少,配置很多参数时这些数据还是太少了。
			如果样本数量m 小于等于 特征数量n,我们通常会看能否删除某些特征,或者使用一种叫做正则化的方法。
			正则化他可以让你使用很多的特征来配置很多参数,即使只有一个相对较小的训练集数据。
	4.总结
		如果发现X^T*X(矩阵X转置乘以矩阵X)是不可逆的话,即矩阵X^T*X是奇异矩阵的话,首先看特征里面是否有一些多余的特征,如果的确有多余的特征,
		像上述的例子中的特征值x_1和特征值x_2那样,可以删除其中一个,无需两个特征都同时保留,如果有多余就删除掉直到没有多余的为止。
		还可以检查特征数量是否过多,如果特征数量实在太多,如果少一些不影响的话可以删除一些特征,或者考虑使用正则化方法。
		通常情况下,X^T*X(矩阵X转置乘以矩阵X)是不会发生不可逆的,如果在Octave中使用pinv伪逆函数来实现的话,即使X^T*X是不可逆的,算法也能正常运行。
		总之出现不可逆矩阵的情况极少发生,所以在大多数线性回归的实现中,这不是一个大问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值