1.2对象、矩阵与矢量化编程
2018-12-04 本文已影响0人
Vekaco
1.2.1对象与维度的概念
1.类比面向对象开发程序语言中的对象概念,在机器学习中,对象指的是含有一组特征的行向量
2.对象的维度指的是行向量的列数
如上表中,非洲象就是一个对象实例,他的特征向量维度为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)
- 矩阵运算
- 矩阵乘法
#条件: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地址