版权声明:本文为King_HAW原创文章,未经King_HAW允许不得转载。 https://blog.csdn.net/King_HAW/article/details/79362927
Machine Learning:Multivariate Linear Regression(多元线性回归)
上篇博文中介绍了使用梯度下降法去最小化代价函数
J(θ)
,从而得到比较符合原始数据分布的假设函数
h θ (x)
。之前的
h θ (x)=θ 0 +θ 1 x 1
为单元线性回归(Univariate Linear Regression),现在介绍多元线性回归。
假设函数(Hypothesis Function)
现在考虑
h θ (x)
的一般形式,即
h θ (x)=θ 0 +θ 1 x 1 +θ 2 x 2 +...+θ n x n
。此时,
θ
为
n+1
维的向量,
θ=[θ 0 θ 1 ⋯ θ n ]
,而
X=[x 0 x 1 ⋯ x n ]
,此时
x 0 ≡1
。则可以将
h θ (x)
表示为
h θ (x)=θ T X
。
代价函数(Cost Function)
代价函数不变,依旧为
J(θ)=12m ∑ i=1 m (h θ (x (i) )−y (i) ) 2
梯度下降求解参数
参数
θ
更新方法
θ j :=θ 0 −α∂∂θ j J(θ):=θ 0 −αm ∑ i=1 m (h θ (x (i) )−y (i) )x (i) j
当
j=0
时,因为
x j ≡1
,所以上式和之前所推导的更新方法没有区别。注意此时对于
j=0,1,...,n
依旧要同时更新
θ j
。
在写代码的时候对于多元线性回归注意使用向量化(Vectorization),避免使用for循环。向量化其实是使用矩阵进行运算。上式可以分解为:
θδ :=θ−αδ=1m ∑ i=1 m (h θ (x (i) )−y (i) )x (i) (1)(2)
对于
(1)
式,
θ
是一个
n+1
维的向量,
α
为标量,对于
(2)
式,
h θ (x (i) )−y (i)
为标量,
x (i)
即为
X
,为
n+1
维向量,所以可以使用矩阵运算同时计算
θ
中的
n+1
个值。会提高运算效率。
标准方程求解参数
如果特征数量较少,可以使用标准方程(Normal Equation)求解参数
θ
。直接令
∂∂θ j J(θ)=0
求解
θ
。
如果有
m
个训练样本,则
X
为
m×(n+1)
维向量,
Y
为
m×1
维向量。参数计算为
θ=(X T X) −1 X T Y
得到
n+1
维的参数
θ
。为了保证
X T X
的逆矩阵存在,需要注意以下两点:
1.所选取的特征数量一定要小于获取的原始样本数量,即
m>n
。
2.所选取的特征一定要相互独立。
如何还
X T X
的逆矩阵依旧不存在,可以使用伪逆矩阵代替逆矩阵。
当特征数量很多(>5000)时,由于标准方程的计算量很大,所以依旧选择梯度下降。
特征值归一化
特征值归一化又称为特征放缩(Feature Scaling),如果不进行归一化,则可能导致梯度下降经过很长时间才收敛到最小值。归一化即将不同的特征都放缩为相同标准,通常为
x j =x j |x j |(max)
最后放缩的范围为-1到1。
也可以使用均值归一化(Mean Normalization):
x j =x j −μ j S j
其中,
μ j
为
x j
的平均值,
S j
为
x j
的标准差,为了简单也可使用
x j (max)−x j (min)
。归一化后可以让程序运行更快。
本文主要偏向于数学公式推导,相关视频可以参考
Andrew Ng 机器学习课程,本文相关内容也源于该课程。