矩阵表达数据与NumPy的基础运用

机器学习   2023-09-03 23:00   68   0  

机器学习中的数据

· 我们前面提到了机器学习的四个核心是数据、模型、损失函数和优化,其中,数据基本都是以矩阵(Matrices)的形式来提供的,因此学会如何处理矩阵非常重要。

· 接下来我们会选择使用Python中的NumPy库进行矩阵运算与处理。

为何选择以矩阵的方式表达数据

· 世界上的数据基本上都可以用矩阵的方式来表达,接下来我们看一点例子。

· 时间序列数据(以音频数据为例)

54498_jsze_5013.png

我们把随着时间而产生的数据称为时间序列(Timeseries)数据,如上图表示的音频,它可以用1*n矩阵(向量)来表示每一秒的声音大小。

· 图片(灰度图与彩色图)

54694_lroa_1679.png

54714_00tg_6117.png

灰度图就是一个矩阵,每一个像素表示的灰度值就是矩阵该位置的值;而彩色图就是R、G、B三张矩阵叠加出来的。

· 自然语言(Natural Language)

54856_res3_6315.png

计算机科学家会把一句话转换为一个矩阵,例如字典向量法,具体方法留到NLP课程再讲。

NumPy的基础使用

· 创建一个NumPy数组(ndarray):

np.array([1,2,3])

55319_ih9v_5211.png

· 其他创建数组的方法:

np.ones(3) # 创建一个长度为3的向量,用1填充数据
np.zeros(3) # 创建一个长度为3的向量,用0填充数据
np.random.random(3) # 创建一个长度为3的向量,内容随机

55456_t9qs_5240.png

· 注意!上述创建的都是向量而不是矩阵!向量在NumPy中进行计算的时候会进行广播(Broadcasting),运算结果可能和想象的有所不同,比如:

print([1,2,3]) # 是一个向量,不是矩阵
print([[1,2,3]]) # 是一个矩阵,一行三列的矩阵

· 矩阵的加减乘除运算:

55887_ma9t_9159.png

55903_q9k1_8380.png

55925_uegk_2161.png

可以发现,乘法并不是线性代数中的矩阵乘法,而是元素对应相乘,相应的,线性代数中的矩阵是没有除法的,而NumPy是支持除法的,但是是对应元素相除。在矩阵乘1.6的时候,可以发现NumPy进行了一次广播,把1.6变为了一个向量进行乘法。

· 向量取元素的方式

56133_mpns_9335.png

· 求最大、最小、和

56162_kuq5_8364.png

· 创建一个矩阵

np.array([[1,2],[3,4]]) # 创建一个两行两列矩阵

56284_nbdr_9807.png

· 同理,可使用ones、zeros和random创建矩阵

56259_ydz0_6098.png

· 矩阵的加减乘除运算跟向量是一样的

56357_g45e_6945.png

56370_yx2x_8565.png

可以看到当data+ones_row的时候,NumPy进行了广播,使得加法可以进行。

· 线性代数上的矩阵乘法

56418_66lw_2318.png

56436_g7sl_2419.png

可以看到,使用.dot函数就可以进行线性代数含义的矩阵乘法,在新版NumPy中,可以直接使用@符号进行乘法:

· 取出矩阵中的元素的方法和向量有一点不一样

56635_pwdv_7929.png

可以看到,下标是[行,列]格式组成的。

· 矩阵也可以求最大最小值

56706_znwi_5741.png

· 如果想求所有行或所有列的最大值,指定axis参数即可,axis=0的时候是求行最大值,axis=1的时候是求列最大值

56762_li82_4360.png

· 矩阵的转置(行变列、列变行)

56906_8osn_9235.png

· 更改矩阵的维度(形状)

57006_eawj_4109.png

· NumPy还支持创建张量(Tensor)

57047_t7df_8910.png

57063_kijr_5036.png

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。