-
前言
之前我们都在讨论梯度下降算法,但对于一些线性问题来说,正规方程是更好的解决方法。
一、正规方程
正规方程是通过求解下面的方程(就是对代价函数求导)来找出使得代价函数最小的参数的:
假设我们的训练集特征矩阵为 𝑋(包含了 𝑥0 = 1)并且我们的训练集结果为向量 𝑦,则利用正规方程解出
向量 𝜃 =
推导过程分析:
前提我们要了解以下几个方程:
多变量线性回归问题的代价函数为:
其中对于单个样本的h(x):
设有m个训练实例,每个实例有n个特征,则训练实例集为:
其中表示第i个实例第j个特征。
特征参数为(是一个列向量):
输出变量为:
因为(这里知道z是列向量就可以理解了)
所以可以把代价函数转化为如下方程(实现了去除累加计算,乘法计算完拆开后就是这个式子):
接下来对这个式子进行对θ求导(难点):
https://www.bilibili.com/video/BV1xk4y1B7RQ?p=7这个视频比较详细地解释了矩阵求导的原理、计算,最后一节还推导了上述公式,有需要的自行观看,这里直接使用结论。
矩阵求导可用公式(推导过程见视频):
第一项:(因为Y与θ无关)
第二项:带入公式1,将看做一个整体,得出=
第三项:就是第二项的转置,带入公式1,得出结果依然等于
第四项:是一个标量(计算一下最后维度即可知道),代入公式2,将看作整体,得出结果等于
综上,求导结果为:
令这个函数等于0,求出极值 向量 𝜃 =
Python实现:
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
二、梯度下降算法与正规方程的优缺点
梯度下降算法:
优点:
- 特征数量n的值很大(一般以万及以上为单位)时,仍能有较好的计算效果。
- 适用于多种模型。
缺点:
- 需要选择学习率α的值(吴恩达老师一般是从0.001起,3倍增长)
- 需要多次迭代
正规方程:
优点:
- 一次运算即可得出结果
缺点:
- 如果特征数量𝑛较大则运算代价大,因为矩阵逆的计算时间复杂度为𝑂(𝑛3),吴恩达老师认为当𝑛小于 10000 时还是可以接受的。
- 只适用于线性回归模型,不适用于逻辑回归模型等其他模型。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。