Machine Learning(机器学习)之二

Machine Learning(机器学习)之一:juejin.im/post/5bcbf0…编程

矩阵与向量(矢量)

矩阵其实就是一个二维数组。数组

上面的矩阵有4行3列,因此它是一个4x3的矩阵。机器学习

向量实际上是一个一列多行的矩阵。编程语言

所以向量是矩阵的子集。上面向量是一个4x1的矩阵。

矩阵和向量有两种方法表示:(以1为开始索引、以0为开始索引)函数

符号与术语post

  • Aij指矩阵A的第i行和第j列中的元素
  • 具备'n'行的向量被称为'n'维向量
  • vi指向量的第i行中的元素
  • 一般,咱们全部的向量和矩阵都是1索引的。请注意,对于某些编程语言,数组是0索引的
  • 矩阵一般用大写名称表示,而向量是小写

矩阵的加减法和标量乘法学习

注意:只有相同维度的矩阵才能够相加减。测试

加法和减法是逐元素的,所以只需添加或减去每一个相应的元素: spa

在标量乘法中,咱们简单地将每一个元素乘以标量值: 3d

在标量除法中,咱们只需将每一个元素除以标量值:

矩阵向量乘法

咱们将矢量列映射到矩阵的每一行,将每一个元素相乘并对结果求和。

结果是一个向量。矩阵的列数必须等于向量的行数。

一个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(特征量))。在这种状况下,删除一些功能或使用“正规化”(将在后面的课程中解释)

上述问题的解决方案包括删除与另外一个线性相关的特征或当特征太多时删除一个或多个特征。

相关文章
相关标签/搜索