专栏名称: 新语数据故事汇
《新语数据故事汇,数说新语》科普数据科学、讲述数据故事,深层次挖掘数据价值。
目录
相关文章推荐
51好读  ›  专栏  ›  新语数据故事汇

数据科学家需要了解的十个关键的线性代数(Linear Algebra)概念

新语数据故事汇  · 公众号  ·  · 2024-06-25 14:12

正文

线性代数(Linear Algebra)不仅是机器学习的基石,更是一门神奇的魔法学科,让我们能够从数据中挖掘出宝藏般的信息!无论是创建新特征还是优化算法,线性代数都是我们解决问题的有力工具。线性代数在数据表示、降维、优化、特征工程和相似度测量等方面都有广泛应用。例如,通过矩阵来组织和操作数据,使复杂的数据集得以简洁表示;PCA等降维技术利用线性代数减少变量数量,提高模型效率;梯度下降法通过线性代数找到函数的最小值,驱动机器学习的优化过程。

接下了将探讨一些关键的线性代数概念,并通过可视化解释和代码示例,帮助你更好地理解这些概念在数据科学中的实际应用。

1.向量 (Vector)

向量(Vector) 是线性代数(Linear Algebra)中的最为基本元素,我们可以从三个角度理解向量(Vector):

  • 物理学的角度:向量是指向空间的箭头,由长度和方向定义。平面上的向量是二维的,我们生活空间中的向量是三维的。

  • 计算机科学的角度:向量是有序的数字列表。这个列表的长度决定了向量的维度。

  • 数学家的角度:向量可以是任何可以相加和乘以一个数字的对象。向量表示数据点或特征向量,常用于描述数据样本。

例如下面一个二维空间的一个点,就可以表示一个向量:

import numpy as npimport matplotlib.pyplot as plt# Define the vectorv = np.array([2, 3])# Create the plotplt.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='r')plt.xlim(-2, 5),plt.ylim(-2, 5),plt.grid()
plt.xlabel('x')plt.ylabel('y')plt.title('Vector v=[2,3]')plt.show()

2.向量运算(Vector operations)

2.1向量加法

向量加法是将两个向量逐元素相加,得到一个新的向量。

下面代码示意两个向量加的展示:

import numpy as npimport matplotlib.pyplot as plt
# 定义两个向量a = np.array([2, 3])b = np.array([4, 1])# 计算向量和c = a + b
plt.figure()plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='b', label='Vector:a='+str(a))plt.quiver(0, 0, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='g', label='Vector:b='+str(b))plt.quiver(0, 0, c[0], c[1], angles='xy', scale_units='xy', scale=1, color='r', label='Vector:a + b='+str(c))
plt.quiver(a[0], a[1],c[0]-a[0], c[1]-a[1], angles='xy', scale_units='xy', scale=1, color='lightgreen', label='b\'')plt.quiver(b[0], b[1],c[0]-b[0], c[1]-b[1], angles='xy', scale_units='xy', scale=1, color='lightblue', label='a\'')
plt.xlim(0, 6),plt.ylim(0, 6)plt.axhline(0, color='black', linewidth=0.5)plt.axvline(0, color='black', linewidth=0.5)plt.grid(True)
plt.legend()plt.title('Vector Addition')plt.xlabel('X-axis'),plt.ylabel('Y-axis')plt.show()

2.2标量乘法(Scalar multiplication)

标量乘法是向量乘以一个标量(即一个数),结果是一个方向与原始向量相同(如果标量为负,则方向相反),但其大小按标量的绝对值进行缩放的向量。

scalar = 3v = np.array([1, 2])v_scaled = scalar * v
plt.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='r', label='Original')plt.quiver(0, 0, v_scaled[0], v_scaled[1], angles='xy', scale_units='xy', scale=1, color='b', label='Scaled')plt.xlim(-1, 6),plt.ylim(-1, 8)plt.grid()plt.legend()plt.show()

2.3点积(Dot product)

点积(Dot product)是两个向量的欧几里德长度乘积与它们之间夹角的余弦值的乘积,反映了向量的长度和它们之间方向关系的特性。

直观地理解,可以将点积理解为一个向量对另一个向量的方向性影响或者说“一个向量对另一个向量施加了多少推力/能量”。其结果表明我们通过点积对原始向量进行了多大程度的增强(可以是正数、负数或零)。

如果点积为0,这说明向量是正交的。

关于点积的理解可以参考:https://betterexplained.com/articles/vector-calculus-understanding-the-dot-product/

v1 = np.array([1, 2])v2 = np.array([2, 3])dot_product = np.dot(v1, v2)
print("Dot Product:", dot_product)

2.4向量空间(Vector space)

向量空间(或线性空间)是指可以进行向量加法和数乘(称为标量乘法)的任何向量集合。要称作向量空间 V,必须满足一系列公理。

3.矩阵(matrix)

矩阵(matrix)是线性代数中的重要概念,它以行和列的形式组织数据和运算。每个矩阵都由数值组成,这些数值排列成若干行和若干列,形成一个二维的表格结构。矩阵在数学和计算机科学中广泛应用,能够表示和处理各种数据和运算关系。例如,矩阵可以用于描述线性方程组、表示图像的像素值、执行线性变换和投影,以及实现各种数值计算和数据分析算法。通过矩阵,我们能够更有效地理解和解决复杂的数学和工程问题,为科学研究和技术应用提供了强大的工具。


这是一个有2行2列的二维矩阵。

3.1线性变换(Linear Transformation)

线性变换是指在两个向量空间 V → W 之间的映射,它保持向量加法和标量乘法的运算。在实际应用中,将一个矩阵 A 应用于一个向量 x,得到另一个向量 y(通过运算 Ax = y),就是一个线性变换。

在数据科学中,线性变换被广泛应用于:

  • 降维:PCA 使用线性变换将高维数据映射到低维空间

  • 数据转换:对数据集进行归一化或标准化是一种线性变换

  • 特征工程:通过组合现有特征创建新特征

下面是一个最简单矩阵变换示例:

import numpy as npimport matplotlib.pyplot as plt
# Linear Transformation of a SquareT = np.array([[1, 2], [2, 1]]) # Transformation matrixsquare = np.array([[0, 0, 1, 1, 0], [0, 1, 1, 0, 0]]) # Original squaretransformed_square = np.dot(T, square) # Apply transformation
# Plot Original and Transformed Squareplt.figure(figsize=(8, 4))
# Original Squareplt.subplot(1, 2, 1)plt.plot(square[0], square[1], 'o-', color='blue')plt.title('Original Square')plt.xlim(-1, 3)plt.ylim(-1, 3)plt.axhline(0, color='grey', linewidth=0.5)plt.axvline(0, color='grey', linewidth=0.5)plt.grid(True)
# Transformed Squareplt.subplot(1, 2, 2)plt.plot(transformed_square[0], transformed_square[1], 'o-', color='red')plt.title('Transformed Square')plt.xlim(-1, 4)plt.ylim(-1, 4)plt.axhline(0, color='grey', linewidth=0.5)plt.axvline(0, color='grey', linewidth=0.5)plt.grid(True)
plt.show()

3.2逆矩阵(Inverse Matrix)和 奇异矩阵(Singular Matrix)

矩阵乘以其逆矩阵得到单位矩阵。

Python中计算逆矩阵(Inverse Matrix))的示例:

import numpy as np
# 定义原始矩阵 AA = np.array([[1, 2], [3






请到「今天看啥」查看全文