美文网首页
1.2对象、矩阵与矢量化编程

1.2对象、矩阵与矢量化编程

作者: Vekaco | 来源:发表于2018-12-04 22:15 被阅读0次
    1.2.1对象与维度的概念

    1.类比面向对象开发程序语言中的对象概念,在机器学习中,对象指的是含有一组特征的行向量
    2.对象的维度指的是行向量的列数

    表1.1
    如上表中,非洲象就是一个对象实例,他的特征向量维度为5。
    2.在机器学习中,对于图片的处理也会进行向量化。一张图片可以处理成一个高维度的向量。
    3.在文本类数据集的处理中,机器学习会根据文本内容生成词袋列表,将每个词出现的词频数数值化,未出现为0,出现记为1,多次出现则累加。
    1.2.2初识矩阵

    1.矩阵的特征

    • 矩阵是具有相同特征和维度的对象集合
    • 一个对象表示为矩阵中的一行,一个特镇表示为矩阵中的一列,每个特镇都有数值型的取值
    • 特征相同、取值相异的对象集合所构成的矩阵,是对象之间既相互独立,又相互联系
    • 有特征列的取值范围所构成的矩阵空间应具有完整性,即能够反映出实物的空间形式或变化
      2.矩阵的用途
    • 解线性方程:比如二维矩阵可以理解为一个平面直角坐标系内的点集,通过计算点与点之间的距离,完成聚类、分类或者预测。
    • 方程降次:利用矩阵的二次型,通过升维将线性不可分的数据集英社到高维中去,转换为线性可分的情形,这是支持向量机的基本原理之一。
    • 变换:矩阵可以通过特征值和特征向量完成维度约简,简化类似图片这种高维度数据集的运算,主成分分析使用的就是这个原理。
    1.2.3矢量化编程与GPU运算

    1.2.4理解数学公式与Numpy矩阵运算

    1.矩阵初始化

    • 全0矩阵和全1矩阵
    #创建3*5的全0矩阵
    myZeros = np.zeros([3, 5])
    print myZeros
    
    #创建3*5的全1矩阵
    myOnes = np.ones([3, 5])
    print myOnes
    
    • 生成随机矩阵
    #生成随机矩阵
    myRand = np.random.rand(3, 4)#3*4的0~1为元素的随机数矩阵
    print myRand
    
    • 单位阵
    #单位矩阵(方阵)
    myEye = np.eye(3)
    print myEye
    

    2.矩阵的元素运算

    • 元素相加和相减
    # 条件:矩阵的行数和列数必须相同
    myOnes = ones(3)
    myEye = eye(3)
    print myOnes + myEye
    print myOnes - myEye
    
    • 矩阵数乘:一个数乘以一个矩阵
    # 条件:矩阵的每个元素都与该数相乘
    mymatrix = mat("1,2,3;4,5,6;7,8,9")
    a = 10
    print a * mymatrix
    
    • 矩阵所有元素求和
    mymatrix = mat("1,2,3;4,5,6;7,8,9")
    print sum(mymatrix)
    
    • 矩阵各元素的积(矩阵点乘)
    # 条件:同维度元素相乘,维度不同时可通过广播规则扩充
    mymatrix2 = 1.5 * ones(3)
    print np.multiply(mymatrix, mymatrix2)
    
    • 矩阵各元素的n次幂
    mylist = mat("1,2,3;4,5,6;7,8,9")
    print np.power(mylist, 2)
    
    1. 矩阵运算
    • 矩阵乘法
    #条件:m*p矩阵a与p*n矩阵b相乘,得到m*n结果矩阵c, c矩阵(i,j)位置元素为a矩阵i行与b矩阵j列各元素乘积之和
    mymatrix = mat("1,2,3;4,5,6;7,8,9")
    mymatrix2 = mat("1;2;3")
    print mymatrix * mymatrix2
    
    • 矩阵转置
    #条件:矩阵元素行列互换
    mymatrix = mat("1,2,3;4,5,6;7,8,9")
    print mymatrix.T
    np.transpose(mymatrix)
    print mymatrix
    

    4.矩阵的其他操作:行列数、切片、复制、比较

    • 行列数
    mymatrix = mat("1,2,3;4,5,6;7,8,9")
    [m, n] = shape(mymatrix)
    print "矩阵的行数和列数:",m, n
    
    • 切片
    #按行切片
    myscl1 = mymatrix[0]
    print "按行切片:", myscl1
    #按列切片
    myscl2 = mymatrix[:,0]
    print "按列切片:", myscl2
    #按列切片2
    myscl3 = mymatrix.T[0]
    print "按列切片:", myscl3
    
    • 复制(浅拷贝、深拷贝)
    #浅拷贝
    a = mymatrix
    #深拷贝
    b = np.copy(mymatrix)
    #当改变mymatrix元素时,浅拷贝矩阵也会改变其元素,而深拷贝不会改变
    mymatrix[0] = mat("7,7,7")
    print a
    print b
    
    • 比较
    #矩阵比较:会对两个矩阵的各元素依次比较,符合条件为True
    print mymatrix < mymatrix.T
    

    项目源代码:github地址

    相关文章

      网友评论

          本文标题:1.2对象、矩阵与矢量化编程

          本文链接:https://www.haomeiwen.com/subject/yaavcqtx.html