[斯坦福大学2014机器学习教程笔记]第五章-计算数据

    在这节中,我们将学习如何对数据进行运算操作。接下来,我们将会使用这些运算操作来实现我们的学习算法。

    我现在快速地初始化一些变量。比如设置A为一个3x2的矩阵,B为一个3x2的矩阵,c为一个2x2的矩阵。

    我想算两个矩阵的乘积,比如计算AxC,只需输入A*C,这是一个3x2矩阵乘以2x2矩阵,得到这样一个3x2矩阵。

           

    我们还可以对元素进行运算。当输入A.*B的时候,会将A中的各个元素与B中对应的元素相乘。通常来说,在Octave中点号一般用来表示元素运算。

    输入A.^2,这将对矩阵A中的每一个元素进行平方

              

    设v为列向量[1; 2; 3],可以输入1./v,得到每一个元素的倒数,所以,就会分别得到1/1 1/2 1/3。矩阵也可以这样操作,1./A 得到A中每一个元素的倒数。

           

    我们还可以输入log(v),对v中的所有元素进行求对数运算exp(v)就是以e为底,以v中的元素为指数的幂运算

                   

 

    另外,还可以用abs(v),对v的每一个元素求绝对值。但是现在v中所有的元素都是正数。我们输入abs([ -1 ; 2 ; -3 ]),来求这个矩阵的所有元素的绝对值。

           

    如果输入-v就会得到v中所有元素的相反数。这等价于-1 * v,但是一般写成-v就可以了。

    如果我想取出v,并对v中的每个元素都加1。其中一个方法是:首先构造一个3行1列的元素全部为1的向量,然后把这个向量跟原来的向量相加

    这样做的依据是:length(v)的值为3,ones(length(v) ,1) 就相当于令ones的大小为3x1。然后再让它们相加,即v中每个元素都加上1。

    另一种更简单的方法是:直接用 v+1v + 1 也就等于把v中的每一个元素都加上1

    如果想求矩阵A的转置,我们可以输入A'(单左引号)这样我们就能得到A的转置。如果想求A的转置的转置,输入(A')'那么我们就会得到原来的矩阵A。

           

    还有一些有用的函数。我们设a=[1 15 2 0.5],这是一个1行4列矩阵,让我们设val=max(a),这将返回a中最大的元素,也就是15。还可以设[val, ind] =max(a),这将返回两个值,val是a中最大的元素,ind是a中该元素的索引。即a中最大的元素为第二个元素,值为15。特别注意:如果你用命令max(A),而是一个矩阵的话,这样做就是对每一列求最大值。这个我们之后再讨论。

           

    如果我们输入a<3,这称为对应元素比较。这将a中的每一个元素逐个与3进行比较的运算元素小于3的返回1,否则返回0

    如果我输入find(a<3),这将找出a中哪些元素是小于3的,然后返回它们的索引

    如果输入A = magic(3),magic 函数将返回一个名为幻方矩阵(magic squares),它们具有以下这样的数学性质:它们所有的行和列和对角线加起来都等于相同的值。虽然这个函数在机器学习的用处不大,但可以用这个方法很方便地生成一个3x3的矩阵。这些幻方矩阵每行、每列、每个对角线三个数字加起来都是等于同一个数。这是经过数学构造的结果。

              

    如果我们输入[r,c] = find(A>=7),就会找出A中大于等于7的元素。r和c分别表示行和列,这就表示,第一行第一列的元素大于等于7,第三行第二列的元素大于等于7,第二行第三列的元素大于等于7。

           

    求和函数:当我们输入sum(a),我们就会得到a中所有元素的和

    如果我想要a中所有元素的乘积,我们就可以输入prod(a)。它将返回这四个元素的乘积。

    floor(a) 是向下取整。ceil(a)表示向上取整。

           

    如果输入rand(3),这通常得到一个3×3的随机矩阵。如果输入 max(rand(3),rand(3)),它由两个3×3的随机矩阵中元素较大值的值组成。所有,你会发现这些元素相对而言都比较大。因为它的每个元素都是取两个随机矩阵的对应元素中最大值的结果。

           

    输入max(A,[],1),这样做会得到每一列的最大值。所以第一列的最大值就是8,第二列是9,第三列的最大值是7,这里的1表示从A矩阵第一个维度去取值

    相对地,如果我键入max(A,[],2),这将得到每一行的最大值,所以,第一行的最大值是等于8,第二行最大值是7,第三行是9。

           

    可以用这个方法来求得每行或每列的最值。另外,要记住,默认情况下max(A)返回的是每一列的最大值,如果你想要找出整个矩阵A的最大值,你可以输入max(max(A)),或者你可以将矩阵A转换成一个向量,然后求最大值,可以输入max(A(:)),这就是把A转换成一个向量,并返回向量中的最大值。

           

    最后,让我们把A设计为一个9x9的幻方,幻方的特点是每行每列每对角线的求和都是相等的。这是一个9x9的幻方。

    输入sum(A,1),计算每一列的总和,这也验证了这个幻方每一列加起来都相等,都为369。输入sum(A,2),计算每一行的总和,这也验证了这个幻方每一行加起来都相等,都为369。

    接着,我们计算对角线的和,确保它们加起来还是同一个数。现在我们要构造一个9x9的单位矩阵,输入eye(9),然后我们要用A于它元素对应相乘。输入A.*eye(9),这样做的结果是这两个矩阵对应元素相乘,除了对角线元素外的其他元素都为0。

    然后输入sum(sum(A.*eye(9)),这实际上是求A的对角线的元素之和,确实是369。

    你也可以求另一条对角线(从左下角到右上角的对角线)的和。我们可以输入sum(sum(A.*flipup(eye(9))),其中flipup表示使矩阵垂直翻转。实际上我们求得另一条对角线和也是369。

    设A=magic(3)。如果你想求A矩阵的逆矩阵,输入pinv(A),通常称为伪逆矩阵,你就把它看成是矩阵A求逆,因此这就是A矩阵的逆矩阵。设 temp = pinv(A),然后再用temp乘以A,得到的就是单位矩阵,对角线为1,其他元素为0。

           

    以上就是对矩阵的元素进行运算的方法。在运行一个学习算法之后,最有用的事情去观察结果,或者说让结果可视化。在下一节中,我们会学习如何快速将数据可视化。

 

posted @ 2020-04-06 21:43  不爱学习的Shirley  阅读(429)  评论(0编辑  收藏  举报