Machine Learning(机器学习)之一:juejin.im/post/5bcbf0…
矩阵与向量(矢量)
矩阵其实就是一个二维数组。
上面的矩阵有4行3列,所以它是一个4x3的矩阵。
向量其实是一个一列多行的矩阵。
因此向量是矩阵的子集。上面向量是一个4x1的矩阵。矩阵和向量有两种方法表示:(以1为开始索引、以0为开始索引)
符号与术语
- Aij指矩阵A的第i行和第j列中的元素
- 具有'n'行的向量被称为'n'维向量
- vi指向量的第i行中的元素
- 通常,我们所有的向量和矩阵都是1索引的。请注意,对于某些编程语言,数组是0索引的
- 矩阵通常用大写名称表示,而向量是小写
矩阵的加减法和标量乘法
注意:只有相同维度的矩阵才可以相加减。
加法和减法是逐元素的,因此只需添加或减去每个相应的元素:
在标量乘法中,我们简单地将每个元素乘以标量值:
在标量除法中,我们只需将每个元素除以标量值:
矩阵向量乘法
我们将矢量列映射到矩阵的每一行,将每个元素相乘并对结果求和。
结果是一个向量。矩阵的列数必须等于向量的行数。一个m×n矩阵乘以一个NX 1矢量中的结果MX 1个向量。
小技巧:
在估算房价的例子中,如果你使用矩阵向量相乘的方法,在计算机中,使用任何语言(不仅仅是Octave,还有C++、Java、Python等高级语言,以及其他语言),都可以很快的实现。 事实证明,像左边这样子写代码,不仅可以简化你的代码,还能提高效率。矩阵-矩阵乘法
一个m×n矩阵乘以一个n×o矩阵等于一个m×o矩阵。在上面的例子中,3×2矩阵乘以2×2矩阵得到3×2矩阵。为了乘以两个矩阵,第一矩阵的列数必须等于第二矩阵的行数。
- tips:可利用矩阵乘法,将大量运算打包到一次矩阵的乘法运算中。
小技巧:与上面提到的小技巧一样,在房价预测的例子,如果有多个预测函数,可使用矩阵-矩阵相乘的方法,来简化代码和提高效率。如下图
矩阵乘法属性
1.矩阵乘法是不可交换的: A∗B≠B∗A
例:A是一个m * n的矩阵,B是一个n * m的矩阵,那么A * B是一个m * m的矩阵,而B * A是一个n * n的矩阵。即使两个矩阵的行列都相同,得出的矩阵数值上也是不一样的。
2.矩阵乘法是关联的:(A∗B)∗C=A∗(B∗C)
3.单位矩阵:
在线性代数中,n阶单位矩阵,是一个n*n的方形矩阵,其主对角线元素为1,其余元素
为0。单位矩阵以In表示;如果阶数可忽略,或可由前后文确定的话,也可简记为I(或者E)。
复制代码
A、B为一个m * n的矩阵,I是一个单位矩阵n * n,则:
逆矩阵
如果A是一个m * m的矩阵(m * m的矩阵称为方阵),且A有一个逆矩阵,则:A与A的逆矩阵相乘等于单位矩阵。
- 非方阵的矩阵没有逆矩阵。
- 不是所以方阵都有逆矩阵。如
- 没有逆的矩阵称为奇异矩阵或者退化矩阵。
我们可用Octave软件来计算逆矩阵:
We can compute inverses of matrices in octave with the pinv(A)pinv(A) function and in Matlab with the inv(A)inv(A) function.
矩阵的转置
矩阵的转置就像将矩阵沿顺时针方向旋转90 °然后将其反转。或者可以看作 画一条45度的斜线 然后你以这条线求镜像。
或者是另外一种说法:
We can compute transposition of matrices in matlab with the transpose(A) function or A
多元线性回归
具有多个变量的线性回归也称为“多元线性回归”
回顾一下前面预测房价的线性回归例子,只有一个单一特征量房屋面积X,我们得出的假设函数是这样的:
但是如果在有多个特征量的情况下,比如我们还得考虑房子卧室的数量,楼层多高以及房子的使用年限,这样就给了我们更多的信息来预测房子的价格。
我们现在为方程式引入符号,其中我们可以有任意数量的输入变量。
适应这些多个特征的假设函数的多变量形式如下:
结合例子,我们将θ0考虑成是房子的基本价格,θ1是每平方米的价格,θ2是每层楼的价格等。x1考虑成是房子的平方米数,x2是楼层数等等。
使用矩阵乘法的定义,我们的多变量假设函数可以简洁地表示为:
多元线性回归的梯度下降
梯度下降方程本身通常是相同的形式; 我们只需要为'n'功能重复它:
重复直到收敛:
另一种表达方式:
重复直到收敛:
下图是将只有一个变量的梯度下降与具有多个梯度下降进行比较:
实践中的梯度下降——特征缩放(Feature Scaling)、均值归一化(Mean Normalization)
我们可以通过将每个输入值放在大致相同的范围内来加速梯度下降。这是因为θ将在小范围内快速下降并且在大范围内缓慢下降,因此当变量非常不均匀时,将无效地振荡到最佳值。
防止这种情况的方法是修改输入变量的范围,使它们大致相同。理想的情况是:
有两种方法来缩小范围,分别是特征缩放和均值归一化。
特征缩放是将输入值除以输入变量的范围(即最大值减去最小值),从而产生仅1的新范围。
均值归一化是将(输入值减去所有输入变量的平均值)除以输入变量的范围,从而产生接近0的新范围。
μi是特征(i)的所有值的平均值。
Si是值的范围或是标准偏差。
请注意,除以范围或除以标准偏差,会得到不同的结果。
实践中的梯度下降2——学习速率α(learning rate)
调试梯度下降。在x轴上绘制具有迭代次数的图。现在绘制成本函数,J(θ)超过梯度下降的迭代次数。如果J(θ)增加,那么你可能需要减少α。
自动收敛测试。如果J(θ)在一次迭代中减小小于E,则说明收敛。E是一个很小的值,例如10−3。但是在实践中很难选择这个很小的值E。
已经证明,如果学习率α足够小,则J(θ)将在每次迭代时减小。
总结一下:
如果,α太小:收敛慢。
如果,α太大:可能不会在每次迭代时减少,因此可能不会收敛。
特征和多项式回归
我们可以通过几种不同的方式改进我们的特征和假设函数的形式。
我们可以将多个特征合二为一,或合多为一。例如,我们可以将x1和x2结合成x3。
多项式回归
如果不能很好地拟合数据,我们的假设函数不必是线性的(直线)。
我们可以通过使其成为二次,三次或平方根函数(或任何其他形式)来改变我们的假设函数的行为或曲线。
正规方程
梯度下降是一种最小化J的方法(详情见前面的文章)。而正规方程就是另外一种方法,它是明确地求出最小值θ,而不是利用迭代来算出θ。
在“正规方程”方法中,我们将通过明确地将其导数相对于θj进行最小化并将它们设置为零来最小化J. 这允许我们在没有迭代的情况下找到最佳θ。正规方程式如下:
以下是梯度下降和正规方程的比较:
梯度下降的优点是:当特征量n很大时,也能很有效缺点是:需要选择好学习速率,需要进行多次迭代
正规方程的优点是:无需选择学习速率,也无需进行多次迭代
缺点是:需要计算矩阵X的装置乘以矩阵X再求其逆。且当特征量n很大时,计算会很慢
使用正规方程,计算反演具有复杂性O(n^3)。因此,如果我们有非常多的特征,那么正规方程将会很慢。实际上,当n超过10,000时,可能是从正常解决方案转变为迭代过程的好时机。
正规方程不可逆性
在用Octave求解正规方程时,我们使用'pinv'函数而不是'inv'。'pinv'函数会给你一个θ即使X ^ TX不可逆。
如果 X ^ TX是不可逆的,常见原因可能是:
- 冗余功能,其中两个特征密切相关(即它们与线性相关)
- 功能太多(例如m(训练集)≤n(特征量))。在这种情况下,删除一些功能或使用“正规化”(将在后面的课程中解释)
上述问题的解决方案包括删除与另一个线性相关的特征或当特征太多时删除一个或多个特征。