Skip to content

Latest commit

 

History

History
520 lines (328 loc) · 16.8 KB

linear-algebra-machine-learning-7-day-mini-course.md

File metadata and controls

520 lines (328 loc) · 16.8 KB

机器学习中的线性代数(7 天迷你课程)

原文: https://machinelearningmastery.com/linear-algebra-machine-learning-7-day-mini-course/

机器学习速成课程的线性代数。

在 7 天内掌握机器学习中使用的线性代数。

线性代数是一个数学领域,普遍认为它是更深入理解机器学习的先决条件。

尽管线性代数是一个具有许多深奥理论和发现的大型领域,但机械学习从业者需要从该领域获取的螺母和螺栓工具和符号。凭借线性代数的坚实基础,可以专注于良好或相关的部分。

在本速成课程中,您将了解如何开始并自信地阅读并实现 7 天内使用 Python 进行机器学习时使用的线性代数符号。

这是一个重要且重要的帖子。您可能想要将其加入书签。

让我们开始吧。

  • 更新 Mar / 2018 :修正了 SVD 课程中的一个小错字。

Linear Algebra for Machine Learning (7-Day Mini-Course)

用于机器学习的线性代数(7 天迷你课程) 照片由 Jeff Kubina 拍摄,保留一些权利。

谁是这个速成课?

在我们开始之前,让我们确保您在正确的位置。

本课程适用于可能了解某些应用机器学习的开发人员。也许你知道如何使用流行的工具来完成预测性建模问题的端到端,或者至少是大多数主要步骤。

本课程的课程会假设您的一些事情,例如:

  • 你知道你的基本 Python 编程方式。 你可能知道一些基本的 NumPy 用于数组操作。
  • 您想学习线性代数,以加深您对机器学习的理解和应用。

你不需要知道:

  • 你不需要成为一个数学家!
  • 您不需要成为机器学习专家!

这个速成课程将带您从了解机器学习的开发人员到可以浏览线性代数基础知识的开发人员。

注意:此速成课程假设您有一个至少安装了 NumPy 的 Python3 SciPy 环境。如果您需要有关环境的帮助,可以按照此处的分步教程进行操作:

速成课程概述

这个速成课程分为 7 节课。

您可以每天完成一节课(推荐)或在一天内完成所有课程(硬核)。这取决于你有空的时间和你的热情程度。

下面列出了 7 个课程,这些课程将帮助您开始并使用线性代数在 Python 中进行机器学习:

  • 第 01 课:用于机器学习的线性代数
  • 第 02 课:线性代数
  • 第 03 课:向量
  • 第 04 课:矩阵
  • 第 05 课:矩阵类型和操作
  • 第 06 课:矩阵分解
  • 第 07 课:奇异值分解

每节课可能需要 60 秒或 30 分钟。花点时间,按照自己的进度完成课程。在下面的评论中提出问题甚至发布结果。

课程期望你去学习如何做事。我会给你提示,但每节课的部分内容是强迫你学习去寻找有关线性代数和 NumPy API 以及 Python 中最好的工具的帮助(提示:我直接在这个博客上得到了所有的答案;使用搜索框)。

我确实以相关帖子的链接形式提供了更多帮助,因为我希望你建立一些信心和惯性。

在评论中发布您的结果;我会为你加油!

挂在那里;不要放弃。

注意:这只是一个速成课程。有关更多细节和充实的教程,请参阅我的书,主题为“机器学习线性代数基础知识”。

第 01 课:机器学习的线性代数

在本课程中,您将了解机器学习从业者应该加深对线性代数理解的 5 个理由。

1.你需要学习线性代数表示法

您需要能够读取和写入向量和矩阵表示法。使用向量和矩阵表示法在书籍,论文和网站上描述算法。

你需要学习线性代数算术

与线性代数的符号相结合是执行的算术运算。您需要知道如何添加,减去和乘以标量,向量和矩阵。

你需要学习线性代数的统计学

您必须学习线性代数才能学习统计量。特别是多变量统计。为了能够阅读和解释统计量,您必须学习线性代数的符号和操作。现代统计学使用线性代数的符号和工具来描述统计方法的工具和技术。从用于数据均值和方差的向量,到描述多个高斯变量之间的关系的协方差矩阵。

4.你需要学习矩阵分解

基于符号和算术的构思是矩阵分解的思想,也称为矩阵分解。您需要知道如何对矩阵进行分解以及它意味着什么。矩阵分解是线性代数中的关键工具,广泛用作线性代数(如矩阵逆)和机器学习(最小二乘)中许多更复杂运算的元素。

5.你需要学习线性最小二乘法

您需要知道如何使用矩阵分解来求解线性最小二乘法。这种类型的问题可以被定义为平方误差的最小化,称为最小二乘,并且可以用线性代数的语言重新编程,称为线性最小二乘。线性最小二乘问题可以使用诸如矩阵分解之类的矩阵运算在计算机上有效地解决。

还有一个原因

如果我能再给出一个理由,那就是:因为它很有趣。认真。

你的任务

在本课程中,您必须列出 3 个理由,为什么您个人想要学习线性代数。

在下面的评论中发表您的答案。我很乐意看到你想出了什么。

在下一课中,您将发现线性代数的简明定义。

第 02 课:线性代数

在本课程中,您将发现线性代数的简明定义。

线性代数

线性代数是数学的一个分支,但事实是线性代数是数学的数学。矩阵和向量是数据的语言。

线性代数是线性组合。也就是说,使用称为向量的数字列和称为矩阵的二维数字数组的算术来创建新的列和数字数组。

数值线性代数

线性代数在计算机中的应用通常被称为数值线性代数。

它不仅仅是代码库中线性代数运算的实现;它还包括仔细处理应用数学问题,例如使用数字计算机的有限浮点精度。

线性代数的应用

由于线性代数是数据的数学,线性代数的工具被用于许多领域。

  • 工程中的矩阵,例如一系列弹簧。
  • 图形和网络,例如分析网络。
  • 马尔可夫矩阵,人口和经济学,如人口增长。
  • 线性规划,单纯形优化方法。
  • 傅立叶级数:函数线性代数,广泛用于信号处理。
  • 用于统计和概率的线性代数,例如回归的最小二乘法。
  • 计算机图形学,例如图像的各种平移,缩放和旋转。

Your Task

在本课程中,您必须从定义线性代数领域的研究论文,博客或书籍中找到五个引号。

在下面的评论中发表您的答案。我很乐意看到你发现了什么。

在下一课中,您将发现向量和简单的向量算法。

第 03 课:向量

在本课程中,您将发现向量和简单的向量算法。

什么是向量?

向量是一个或多个称为标量的值的元组。

向量通常用小写字符表示,例如“v”;例如:

v = (v1, v2, v3)

其中 v1,v2,v3 是标量值,通常是实数值。

定义向量

我们可以将 Python 中的向量表示为 NumPy 数组。

可以从数字列表创建 NumPy 数组。例如,下面我们定义一个长度为 3 且整数值为 1,2 和 3 的向量。

# create a vector
from numpy import array
v = array([1, 2, 3])
print(v)

向量乘法

两个相等长度的向量可以相乘。

c = a * b

与加法和减法一样,该操作以元素方式执行以产生相同长度的新向量。

a * b = (a1 * b1, a2 * b2, a3 * b3)

我们可以直接在 NumPy 中执行此操作。

# multiply vectors
from numpy import array
a = array([1, 2, 3])
print(a)
b = array([1, 2, 3])
print(b)
c = a * b
print(c)

Your Task

在本课程中,您必须实现其他向量算术运算,例如加法,除法,减法和向量点积。

Post your answer in the comments below. I would love to see what you discover.

在下一课中,您将发现矩阵和简单矩阵算法。

第 04 课:矩阵

在本课程中,您将发现矩阵和简单矩阵运算。

什么是矩阵?

矩阵是具有一个或多个列和一个或多个行的标量的二维数组。

矩阵的符号通常是大写字母,例如 A,并且条目由它们的行(i)和列(j)的二维下标引用,例如 aij。例如:

A = ((a11, a12), (a21, a22), (a31, a32))

定义矩阵

我们可以使用二维 NumPy 数组在 Python 中表示矩阵。

可以在给定列表列表的情况下构造 NumPy 数组。例如,下面是 2 行 3 列矩阵。

# create matrix
from numpy import array
A = array([[1, 2, 3], [4, 5, 6]])
print(A)

矩阵加法

可以将具有相同尺寸的两个矩阵相加在一起以创建新的第三矩阵。

C = A + B

所得矩阵中的标量元素被计算为添加的每个矩阵中元素的相加。

我们可以在 python 中使用 plus 运算符直接在两个 NumPy 数组上实现它。

# add matrices
from numpy import array
A = array([[1, 2, 3], [4, 5, 6]])
print(A)
B = array([[1, 2, 3], [4, 5, 6]])
print(B)
C = A + B
print(C)

矩阵点产品

矩阵乘法(也称为矩阵点乘积)比先前的操作更复杂并且涉及规则,因为并非所有矩阵都可以相乘。

C = A * B

矩阵乘法的规则如下:第一矩阵(A)中的列数(n)必须等于第二矩阵(B)中的行数(m)。

例如,矩阵 A 的尺寸为 m 行 n 列,矩阵 B 的尺寸为 n 和 k。 A 行和 n 行 b 中的 n 列相等。结果是一个 m 行和 k 列的新矩阵。

C(m,k) = A(m,n) * B(n,k)

矩阵乘法的直觉是我们计算矩阵 A 中每一行与矩阵 B 中每列之间的点积。例如,我们可以逐步降低 A 列的行数并将每一行乘以 B 中的第 1 列来给出标量 C 列第 1 列中的值

矩阵乘法运算可以使用 dot()函数在 NumPy 中实现。

# matrix dot product
from numpy import array
A = array([[1, 2], [3, 4], [5, 6]])
print(A)
B = array([[1, 2], [3, 4]])
print(B)
C = A.dot(B)
print(C)

Your Task

在本课程中,您必须实现更多矩阵算术运算,例如减法,除法,Hadamard 乘积和向量矩阵乘法。

Post your answer in the comments below. I would love to see what you come up with.

在下一课中,您将发现不同类型的矩阵和矩阵运算。

第 05 课:矩阵类型和操作

在本课程中,您将发现不同类型的矩阵和矩阵运算。

颠倒

可以转置定义的矩阵,这将创建一个新的矩阵,其中列和行的数量被翻转。

这由矩阵旁边的上标“T”表示。

C = A^T

我们可以通过调用 T 属性在 NumPy 中转置矩阵。

# transpose matrix
from numpy import array
A = array([[1, 2], [3, 4], [5, 6]])
print(A)
C = A.T
print(C)

逆温

反转矩阵的操作由矩阵旁边的-1 上标表示;例如,A ^ -1。该操作的结果称为原始矩阵的逆;例如,B 是 A 的倒数。

B = A^-1

并非所有矩阵都是可逆的。

可以使用 inv()函数在 NumPy 中反转矩阵。

# invert matrix
from numpy import array
from numpy.linalg import inv
# define matrix
A = array([[1.0, 2.0], [3.0, 4.0]])
print(A)
# invert matrix
B = inv(A)
print(B)

方阵

方阵是矩阵,其中行数(n)等于列数(m)。

n = m

方矩阵与矩形矩阵形成对比,矩形矩阵的行数和列数不相等。

对称矩阵

对称矩阵是一种方形矩阵,其中右上角三角形与左下角三角形相同。

为了对称,对称轴始终是矩阵的主要对角线,从左上角到右下角。

对称矩阵总是正方形并且等于它自己的转置。

M = M^T

三角矩阵

三角矩阵是一种方矩阵,其在矩阵的右上或左下具有所有值,其余元素填充零值。

仅在主对角线上方具有值的三角矩阵称为上三角矩阵。然而,仅在主对角线下方具有值的三角矩阵被称为下三角矩阵。

对角矩阵

对角矩阵是主对角线外部的值具有零值的矩阵,其中主对角线从矩阵的左上角到右下角。

对角矩阵通常用变量 D 表示,并且可以表示为完整矩阵或主对角线上的值向量。

Your Task

在本课程中,您必须为其他矩阵运算开发示例,例如行列式,跟踪和排名。

Post your answer in the comments below. I would love to see what you come up with.

在下一课中,您将发现矩阵分解。

课 06:矩阵分解

在本课程中,您将了解矩阵分解的基础知识,也称为矩阵分解。

什么是矩阵分解?

矩阵分解是一种将矩阵简化为其组成部分的方法。

这种方法可以简化更复杂的矩阵运算,这些运算可以在分解的矩阵上执行,而不是在原始矩阵本身上执行。

矩阵分解的一个常见类比是数字因式分解,例如将因子分解为 5×5。因此,矩阵分解也称为矩阵分解。与分解实数值一样,有许多方法可以分解矩阵,因此存在一系列不同的矩阵分解技术。

LU 矩阵分解

LU 分解用于方形矩阵,并将矩阵分解为 L 和 U 分量。

A = L . U

其中 A 是我们希望分解的方阵,L 是下三角矩阵,U 是上三角矩阵。在实践中数值上更稳定的这种分解的变化称为 LUP 分解,或具有部分枢转的 LU 分解。

A = P . L . U

重新排序父矩阵的行以简化分解过程,并且附加的 P 矩阵指定用于置换结果或将结果返回到原始顺序的方式。 LU 还有其他变体。

LU 分解通常用于简化线性方程组的求解,例如在线性回归中找到系数。

LU 分解可以使用 lu()函数在 Python 中实现。更具体地说,该函数计算 LPU 分解。

# LU decomposition
from numpy import array
from scipy.linalg import lu
# define a square matrix
A = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(A)
# LU decomposition
P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruct
B = P.dot(L).dot(U)
print(B)

Your Task

在本课程中,您必须实现其他简单方法的小例子进行矩阵分解,例如 QR 分解,Cholesky 分解和特征分解。

Post your answer in the comments below. I would love to see what you come up with.

在下一课中,您将发现用于矩阵分解的奇异值分解方法。

第 07 课:奇异值分解

在本课程中,您将发现用于矩阵分解的奇异值分解方法。

奇异值分解 奇异值分解(简称 SVD)是一种矩阵分解方法,用于将矩阵简化为其组成部分,以使某些后续矩阵计算更简单。

A = U . Sigma . V^T

其中 A 是我们希望分解的真实 mxn 矩阵,U 是 mxm 矩阵,Sigma(通常由大写希腊字母 Sigma 表示)是 mxn 对角矩阵,V ^ T 是 nxn 矩阵的转置,其中 T 是一个上标。

计算奇异值分解

可以通过调用 svd()函数来计算 SVD。

该函数采用矩阵并返回 U,Sigma 和 V ^ T 元素。 Sigma 对角矩阵作为奇异值的向量返回。 V 矩阵以转置的形式返回,例如, V.T.

# Singular-value decomposition
from numpy import array
from scipy.linalg import svd
# define a matrix
A = array([[1, 2], [3, 4], [5, 6]])
print(A)
# SVD
U, s, V = svd(A)
print(U)
print(s)
print(V)

Your Task

在本课程中,您必须列出 5 个 SVD 应用程序。

如果你能用 Python 中的一个小例子演示每一个,那么奖励积分。

Post your answer in the comments below. I would love to see what you discover.

这是迷你课程的最后一课。

结束!

(_ 看你有多远 _)

你做到了。做得好!

花点时间回顾一下你到底有多远。

你发现:

  • 线性代数对应用机器学习的重要性。
  • 什么是线性代数。
  • 向量是什么以及如何执行向量运算。
  • 什么是矩阵以及如何执行矩阵运算,包括矩阵乘法。
  • 一套类型的矩阵,它们的属性以及涉及矩阵的高级操作。
  • 矩阵分解方法和 LU 分解方法详细说明。
  • 用于机器学习的流行的奇异值分解方法。

这只是您使用线性代数进行机器学习的旅程的开始。继续练习和发展你的技能。

下一步,查看我的关于机器学习线性代数的书。

摘要

_ 你如何处理迷你课程?_ 你喜欢这个速成课吗?

_ 你有什么问题吗?有没有任何问题?_ 让我知道。在下面发表评论。