语句实例
np.random.rand(100, 2)
这行代码是用 numpy 库中的 rand
函数生成一个形状为 (100, 2)
的随机数组。其中,第一个参数 100 表示生成的数组有 100 行,第二个参数 2 表示生成的数组有 2 列。每个元素的值都是在区间 [0, 1)
内的随机数。
Y = X @ np.array([[1], [2]]) + np.random.randn(100, 1)
这行代码生成了样本的标签
Y
Y
Y。其中,@
符号表示矩阵乘法,np.array([[1], [2]])
是一个列向量,表示真实模型的参数向量。因此,X @ np.array([[1], [2]])
的结果就是样本的标签的理论值,也就是样本的真实标签。
我们还添加了一些随机噪声,以模拟实际情况下样本标签的噪声。具体来说,np.random.randn(100, 1)
生成一个形状为 (100, 1)
的随机数组,每个元素的值都是从均值为 0、方差为 1 的正态分布中随机抽取的。
X = np.concatenate([np.ones((X.shape[0], 1)), X], axis=1)
这行代码是在特征矩阵 X 的左侧添加了一列全为 1 的特征,以实现拟合截距项的目的。
具体来说,np.ones((X.shape[0], 1)) 生成了一个形状为 (X.shape[0], 1) 的全为 1 的二维数组(用ndarray时尽量不用一维),其中 X.shape[0] 表示 X 的行数,也就是样本数量。然后,np.concatenate([np.ones((X.shape[0], 1)), X], axis=1) 将这个全为 1 的二维数组和特征矩阵 X 按列方向拼接起来,得到一个新的特征矩阵,形状为 (X.shape[0], X.shape[1]+1),其中 X.shape[1] 表示 X 的列数,也就是特征数量。
这样,新的特征矩阵就包含了截距项和所有原始特征,可以用于拟合多元线性回归模型。
类似于 numpy.ones() 的函数有:
numpy.zeros(shape, dtype=float, order=‘C’):返回一个指定形状和数据类型的全为 0 的数组。其中,shape 表示数组的形状,dtype 表示数组的数据类型,默认为 float,order 表示数组元素在内存中的存储顺序,默认为 C。
numpy.empty(shape, dtype=float, order=‘C’):返回一个指定形状和数据类型的未初始化的数组。其中,shape 表示数组的形状,dtype 表示数组的数据类型,默认为 float,order 表示数组元素在内存中的存储顺序,默认为 C。
numpy.full(shape, fill_value, dtype=None, order=‘C’):返回一个指定形状和数据类型的全为指定值的数组。其中,shape 表示数组的形状,fill_value 表示数组的填充值,dtype 表示数组的数据类型,默认为 None,自动匹配 fill_value 的数据类型,order 表示数组元素在内存中的存储顺序,默认为 C。
numpy.eye(N, M=None, k=0, dtype=float, order=‘C’):返回一个指定形状的单位矩阵。其中,N 和 M 分别表示矩阵的行数和列数,如果 M 为 None,则默认为 N,k 表示矩阵的偏移量,即对角线的位置,默认为 0,dtype 表示矩阵的数据类型,默认为 float,order 表示矩阵元素在内存中的存储顺序,默认为 C。