3 Linear Regression with Multiple Variables(多变量线性回归)
3.1 Multiple Features(多维特征)
注:实际上不一定是线性的,仅本例中使用线性。非线性也是此思想。
3.2 Gradient Descent for Multiple Variables(多变量梯度下降)
与单变量线性回归类似,在多变量线性回归中,同样也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:
目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。
上图右边显示了多变量线性回归的批量梯度下降算法,其开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
python代码:
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
3.2.1 Gradient Descent in Practice I - Feature Scaling (特征缩放)
在解决多维特征问题时,应该保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
以房价问题为例,假设有两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000 平方英尺,而房间数量的值则是 0-5,以两个参数分别为横纵坐标,绘制代价函数等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决方法是尝试将所有特征的尺度都尽量缩放到-1 到 1 之间,即特征归一化。如图:
数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权,可以大大提高分类器的准确性。
其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。
归一化公式:
3.2.2 Gradient Descent in Practice II - Learning Rate (学习率)
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,无法提前预知,但可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
图像300~400已经相当平坦了,可推测到达400左右时梯度下降法差不多已经收敛了。
梯度下降算法的每次迭代受到学习率的影响,如果学习率𝑎过小,则达到收敛所需的迭代次数会非常多;如果学习率𝑎过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率:
𝛼 =…,0.001,0.003,0.01,0.03,0.1,0.3,1,…
3.3 Features and Polynomial Regression(特征和多项式回归)
线性回归并不适用于所有数据,有时需要曲线来适应数据,比如,
一个二次方模型:
或者三次方模型:
根据函数图形特性,我们还可以使:
注:如果采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
3.4 Normal Equation(正规方程)
正规方程是区别于迭代方法的直接计算解法,即直接求导数等于0的点。
假设训练集特征矩阵为 𝑋(包含了 𝑥0 = 1)并且训练集结果为向量 𝑦,则利用正规方程解出向量:
例子:
注:对于不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
梯度下降与正规方程的比较
注:只要特征变量的数目并不大,标准方程是一个很好的计算参数𝜃的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。
Normal Equation Noninvertibility(正规方程及不可逆性)
python实现正规方程:
import numpy as np
def normalEqn(X, y):
#可逆使用inv
theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X
#不可逆则使用pinv
theta = np.linalg.pinv(X.T@X)@X.T@y #X.T@X
return theta
上一篇:2 单变量线性回归(Linear Regression with One Variable)
下一篇:4 逻辑回归(Logistic Regression)