张量
一、张量的轴、阶和形状
张量是机器学习程序中的数字容器,本质上就是各种不同维度的数组,我们把张量的维度称为轴(axis),轴的个数称为阶(rank)(也就是俗称的维度,但是为了把张量的维度和每个阶的具体维度区分开,这里统一把张量的维度称为正脸那个的阶,Numpy中把它叫做数组的秩)
张量的形状(shape)就是张量的阶,加上每个阶的维度(每个阶的元素数目)
张量都可以通过Numpy来定义、操作。因此把Numpy数学函数库里面的数组用好,就可以搞定机器学习里面的数据结构。
二、标量——0D(阶)张量
仅包含一个数字的张量叫做标量(scalar),既0阶张量或0D张量。
标量的功能主要在于程序流程控制、设置参数值等。
下面创建一个NumPy标量:
import numpy as np #导入NumPy
X = np.array(5) # 创建0D张量,也就是标量
print("X的值",X)
print("X的阶",X.ndim) #ndim属性显示张量轴的个数
print("X的数据类型",X.dtype) # dtype属性显示张量数据类型
print("X的形状",X.shape) # shape属性显示张量形状
此处标量的形状为(),既标量的阶为0.
Numpy中,不管是阶的索引,还是数组的索引,永远是从0开始的。
三、向量——1D(阶)张量
由一组数字组成的数组叫做向量(vector),也就是一阶张量,或称1D张量。一阶张量只有一个轴。
下面创建一个NumPy向量:
X = np.array([5,6,7,8,9]) #创建1D张量,也就是向量
print("X的值",X)
print("X的阶",X.ndim) #ndim属性显示张量轴的个数
print("X的形状",X.shape) # shape属性显示张量形状
创建向量的时候要把数字元素放进方括号里面,形成一个包含5个元素的1D张量。需要再次强调的是,机器学习中把5个元素的向量称为5维向量。千万不要把5维向量和5阶向量混淆。
创建一个一维向量:
X = np.array([5]) # 1维的向量,就是1D数组里面只有一个元素
1.机器学习中的向量数据
向量非常的重要。在机器学习中,普通的连续数值数据集中的每一个独立样本都是一个向量,因此普通的连续数值数据集也可以叫做向量数据集。而数据集中的标签列也可以视为一个向量。
向量数据集是说数据集中的每一行或每一列,都可以视为向量,但是数据集整体是一个矩阵。
载入波士顿房价数据集查看:
from keras.datasets import boston_housing # 波士顿房价数据集
(X_train, y_train), (X_test, y_test) = boston_housing.load_data()
print("X_train的形状:", X_train.shape)
print("X_train中第一个样本的形状:", X_train[0].shape)
print("y_train的形状:", y_train.shape)
这个是Keras内置的波士顿房价数据集,是一个2D的普通数值数据集。
X_train是一个2D矩阵,是404个样本数据的集合。
X_train[0]代表的是X_train训练集的第一行数据,是一个13维向量(也是1D张量)。也就是说,训练集的每行数据都包含13个特征。
2.向量的点积
两个向量之间可以进行乘法运算,而且不止一种,有点积和叉积,其运算法则不同。
点积运算法则:就是两个相同维度的向量对应元素先相乘,后相加。
用代码展示:
python
weight = np.array([1,-1.8,1,1,2]) # 权重向量(也就是多项式的参数)
X = np.array([1,6,7,8,9]) # 特征向量(也就是一个特定样本中的特征值)
y_hat = np.dot(X,weight) # 通过点积运算构建预测函数
print('函数返回结果:', y_hat) # 输出预测结果
下面语句也可以实现相同的功能:
y_hat = weight.dot(X) # X.dot(weight)也可以实现同样结果
注意向量点积的结果是一个值,也就是一个标量,而不是一个向量。
四、矩阵——2D(阶)张量
矩阵是一组一组向量的集合。矩阵中的个元素横着、竖着、斜着都能构成不同的向量。而矩阵,也就是二阶张量,或称2D张量,其形状维(m,n)
矩阵里面横向的元素称为“行”,纵向的元素称为“列”。
1.机器学习中的矩阵数据
矩阵式2D张量,形状维(样本,特征)。第一个轴式样本轴,第二个式特征轴。
print("X_train的内容:", X_train) #X_train是2D张