在以前的内容中,只探讨了单一特征的回归模型,也就是 m 个样本实例中,每一个样本实例 x 只有一个特征,好比房价预测中的 m 个样本中,每一个样本只有“房间尺寸”这一个特征。html
在实际状况中,更多的是涉及到多维特征模型,好比影响房价的因素(即特征)除了房间尺寸外,还有房间数、楼层等等。这时就须要引入多维特征。python
多维特征:在 m 个样本实例中,每一个样本实例 x 都有 n 个特征。注释表示为:x j(i),表明特征矩阵中的第 i 行的第 j 个特征,也就是第 i 个训练实例的第 j 个特征。
算法
支持多变量的假设函数 h 能够表示为:hθ(x) = θ0x0+θ1x1+θ2x2+...+θnxn ,其中 x0 为人为引入,x0 = 1。此时模型中的参数 θ 是一个 n+1 维的向量,任何一个训练实例也都是 n+1 维的向量,特征矩阵X的维度是 m*( n+1 )。 所以公式能够简化为:hθ(x) = θTX,其中上标T表明矩阵转置。微信
与单变量线性回归相似,在多变量线性回归中,咱们也构建一个代价函数,则这个代价函数是全部建模偏差的平方和,即:机器学习
接下来就是要经过梯度降低的方法来使得代价函数最小:函数
公式中的 ( hθ(x(i)) - y(i) ) * xj(i) 是代价函数 J(θ) 对 θ 的导数。学习
matlab代码示例:spa
theta = theta - alpha * ( 1 / m ) * X' * ( ( theta' * X' )' - y ) 其中X:( m , n + 1 ) ,theta:( n + 1 , 1 ) ,y:( m , 1 ) ,m 表明样本数,n表明特征数。3d
在咱们面对多维特征问题的时候,咱们要保证这些特征都具备相近的尺度,这将帮助梯度降低算法更快地收敛。htm
归一化(特征缩放)的优势:
(1)归一化后加快了梯度降低求最优解的速度。
(2)归一化有可能提升精度(归一化是让不一样维度之间的特征在数值上有必定的比较性)。
下图能更清晰的体现归一化和未归一化时最优解寻解过程的区别:
未归一化:
归一化:
从上面能够看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。
两种归一化的方法:
(1)min-max标准化
定义:也称为离差标准化,是对原始数据的线性变换,使得结果映射到0-1之间。
本质:把数变为【0,1】之间的小数。
转换函数:(X-Min)/(Max-Min)
若是想要将数据映射到-1,1,则将公式换成:(X-Mean)/(Max-Min)
其中:max为样本数据的最大值,min为样本数据的最小值,Mean表示数据的均值。
(2)Z-score(0均值)标准化方法
定义:这种方法给与原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。通过处理的数据符合标准正态分布,即均值为0,标准差为1.
本质:把有量纲表达式变成无量纲表达式。
转换函数:(X-Mean)/(Standard deviation)
其中,Mean为全部样本数据的均值。Standard deviation为全部样本数据的标准差。
梯度降低算法收敛所须要的迭代次数根据模型的不一样而不一样,咱们不能提早预知,咱们能够绘制迭代次数和代价函数的图表来观测算法在什么时候趋于收敛。
梯度降低算法的每次迭代受到学习率的影响,若是学习率 𝑎 太小,则达到收敛所需的迭代次数会很是高;若是学习率 𝑎 过大,每次迭代可能不会减少代价函数,可能会越过局部最小值致使没法收敛。
蓝色线正确的状况,绿色和黑色为错误的状况(通常须要使用更小的学习率 𝑎 )
一般能够考虑尝试些学习率:
𝛼 = 0.01,0.03,0.1,0.3,1,3,10
以下图所示,线性回归并不适用于全部数据,有时咱们须要曲线来适应咱们的数据,好比一个二次方模型 h𝜃(x) = 𝜃0 + 𝜃1x1 + 𝜃2x22 或者三次方模型。
若是假设中出现了高阶项,那么这个模型仍是线性模型吗?
若是把假设函数当作是特征 x 的方程,那么该方程就是非线性方程;若是看出是参数 𝜃 的方程,那么 x 的高阶项均可以认为是 𝜃 的参数。很明显,在线性回归中采用了后一种的解释方式。
区别于利用迭代的方式求解最优解,正规方程是求解下面的方程来找出使得代价函数最小的参数:
假设咱们的训练集特征矩阵为 X(包含了 x0 = 1)而且咱们的训练集结果为向量 y,则利用正规方程解出向量 𝜃 = ( XT X )−1 XT y 。
推导过程以下:
matlab程序: pinv ( X' * X ) * X' * y
python程序:
梯度降低与正规方程的比较:
利用正规方程解出向量 𝜃 = ( XT X )−1 XT y 时,若是 XT X 不可逆,该如何处理呢?
首先不可逆的状况很是少见,当矩阵的特征是线性相关,以及特征远远大于样本数量(m < n)时会出现不可逆的状况。
在matlab中有两个函数能够求解矩阵的逆,一个是 pin() 函数,一个是 inv() 函数。前者是所谓的伪逆,后者是逆。使用 pinv() 函数能够展示数学上的过程,即使矩阵 X'X 是不可逆的,也将计算出 𝜃 的值。
以上,就是吴恩达机器学习课程第四章的主要内容。