机器学习中向量范数的温和介绍
原文:
machinelearningmastery.com/vector-norms-machine-learning/
计算向量的长度或幅度通常需要直接作为机器学习中的正则化方法,或作为更宽的向量或矩阵运算的一部分。
在本教程中,您将发现计算向量长度或幅度的不同方法,称为向量范数。
完成本教程后,您将了解:
- L1 范数,计算为向量绝对值之和。
- L2 范数,计算为平方向量值之和的平方根。
- 最大范数,计算为最大向量值。
让我们开始吧。
- 更新 Mar / 2018 :修正了最大范数方程中的拼写错误。
- 更新 Sept / 2018 :修复了与定义的向量大小相关的拼写错误。
机器学习中向量范数的温和介绍
Cosimo 的照片,保留一些权利。
教程概述
本教程分为 4 个部分;他们是:
- 向量范数
- 向量 L1 范数
- 向量 L2 范数
- 向量最大范数
向量范数
通常需要直接或作为更宽向量或向量矩阵运算的一部分来计算向量的大小或长度。
向量的长度称为向量范数或向量的幅度。
向量的长度是一个非负数,用于描述空间中向量的范围,有时也称为向量的大小或范数。
- 第 112 页,无线性代数废话指南,2017 年
除了所有零值的向量之外,向量的长度始终是正数。它是使用一些度量来计算的,该度量总结了向量距向量空间原点的距离。例如,具有 3 个元素的向量的向量空间的原点是(0,0,0)。
符号用于表示更广泛计算中的向量范数,并且向量范数计算的类型几乎总是具有其自己的唯一符号。
我们将看一下机器学习中使用的一些常见的向量范数计算。
向量 L1 范数
可以使用 L1 范数计算向量的长度,其中 1 是 L 的上标,例如, L ^ 1。
向量的 L1 范数的符号是|| v || 1,其中 1 是下标。因此,这个长度有时被称为出租车标准或曼哈顿标准。
l1(v) = ||v||1
L1 范数被计算为绝对向量值之和,其中标量的绝对值使用符号| a1 |。实际上,范数是从向量空间的原点计算曼哈顿距离。
||v||1 = |a1| + |a2| + |a3|
可以使用带有参数的 norm()函数在 NumPy 中计算向量的 L1 范数,以指定范数顺序,在本例中为 1。
# l1 norm of a vector
from numpy import array
from numpy.linalg import norm
a = array([1, 2, 3])
print(a)
l1 = norm(a, 1)
print(l1)
首先,定义 1×3 向量,然后计算向量的 L1 范数。
首先运行示例打印定义的向量,然后打印向量的 L1 范数。
[1 2 3]
6.0
当将机器学习算法拟合为正则化方法时,经常使用 L1 范数,例如,一种保持模型系数较小的方法,反过来,模型不那么复杂。
向量 L2 范数
可以使用 L2 范数计算向量的长度,其中 2 是 L 的上标,例如, L ^ 2。
向量的 L2 范数的符号是|| v || 2,其中 2 是下标。
l2(v) = ||v||2
L2 范数计算向量坐标距向量空间原点的距离。因此,它也被称为欧几里德范数,因为它被计算为距离原点的欧几里德距离。结果是正距离值。
L2 范数被计算为平方向量值之和的平方根。
||v||2 = sqrt(a1² + a2² + a3²)
可以使用带有默认参数的 norm()函数在 NumPy 中计算向量的 L2 范数。
# l2 norm of a vector
from numpy import array
from numpy.linalg import norm
a = array([1, 2, 3])
print(a)
l2 = norm(a)
print(l2)
首先,定义 1×3 向量,然后计算向量的 L2 范数。
首先运行示例打印定义的向量,然后打印向量的 L2 范数。
[1 2 3]
3.74165738677
与 L1 范数一样,L2 范数经常在将机器学习算法拟合为正则化方法时使用,例如,一种保持模型系数较小的方法,反过来,模型不那么复杂。
到目前为止,L2 范数在机器学习中比其他向量范数更常用。
向量最大范数
向量的长度可以使用最大范数来计算,也称为最大范数。
向量的最大范数被称为 L ^ inf,其中 inf 是上标并且可以用无穷大符号表示。 max norm 的表示法是|| x || inf,其中 inf 是下标。
maxnorm(v) = ||v||inf
最大范数计算为返回向量的最大值,因此返回名称。
||v||inf = max(|a1|, |a2|, |a3|)
可以使用 norm()函数在 NumPy 中计算向量的最大范数,并将 order 参数设置为 inf。
# max norm of a vector
from numpy import inf
from numpy import array
from numpy.linalg import norm
a = array([1, 2, 3])
print(a)
maxnorm = norm(a, inf)
print(maxnorm)
首先,定义 1×3 向量,然后计算向量的最大范数。
首先运行示例打印定义的向量,然后打印向量的最大范数。
[1 2 3]
3.0
Max norm 也被用作机器学习中的正则化,例如神经网络权重,称为最大范数正则化。
扩展
本节列出了一些扩展您可能希望探索的教程的想法。
- 使用您自己的数据使用每个操作创建 5 个示例。
- 为定义为列表列表的矩阵手动实现每个矩阵操作。
- 搜索机器学习论文并找到每个正在使用的操作的示例。
如果你探索任何这些扩展,我很想知道。
进一步阅读
如果您希望深入了解,本节将提供有关该主题的更多资源。
图书
API
用品
- 维基百科上的 Norm(数学)
摘要
在本教程中,您发现了计算向量长度或大小的不同方法,称为向量范数。
具体来说,你学到了:
- L1 范数,计算为向量绝对值之和。
- L2 范数,计算为平方向量值之和的平方根。
- 最大范数,计算为最大向量值。
你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。
为机器学习学习线性代数的 5 个理由
原文:
machinelearningmastery.com/why-learn-linear-algebra-for-machine-learning/
为什么学习线性代数进行机器学习?
线性代数是一个数学领域,可以称为数学数学。
无可否认,它是机器学习领域的一个支柱,许多人建议它在开始机器学习之前作为学习的先决条件。这是一种误导性建议,因为线性代数一旦具有应用机器学习过程的上下文就可以对实践者更有意义。
在这篇文章中,您将发现为什么机器学习从业者应该学习线性代数来提高他们作为从业者的技能和能力。
阅读这篇文章后,你会知道:
- 不是每个人都应该学习线性代数,这取决于你在学习机器学习的过程中所处的位置。
- 5 个理由为什么中间机器学习从业者需要更深入地理解线性代数。
- 一旦你有动力开始进入线性代数领域的旅程,从哪里开始。
让我们开始吧。
学习机器学习线性代数的 5 个理由
照片来自 a.poll_o ,保留一些权利。
不学习线性代数的原因
在我们解释你应该学习线性代数的原因之前,让我们先看一下你不应该学习的原因。
我认为如果你刚开始应用机器学习,你不应该学习线性代数。
- 不需要。为了使用机器学习作为解决问题的工具,不需要了解一些机器学习算法的抽象操作。
- 这很慢。在机器学习之前花费数月到数年来研究整个相关领域将延迟实现您能够通过预测性建模问题的目标。
- 这是一个巨大的领域。并非所有线性代数都与理论机器学习相关,更不用说应用机器学习了。
我建议采用广度优先的方法开始应用机器学习。
我称这种方法是结果优先的方法。在这里,您首先要学习和实践使用工具(例如 scikit-learn 和 Python 中的 Pandas)进行端到端预测性建模问题(例如,如何获得结果)的步骤。
然后,此过程提供了逐步深化您的知识的框架和上下文,例如算法如何工作以及最终构成它们的数学。
在您知道如何解决预测性建模问题之后,让我们看看为什么您应该加深对线性代数的理解。
1.你需要学习线性代数表示法
您需要能够读取和写入向量和矩阵表示法。
使用向量和矩阵表示法在书籍,论文和网站上描述算法。
线性代数是数据的数学,符号允许您使用特定的运算符精确地描述数据操作。
您需要能够读写这种表示法。这项技能将允许您:
- 阅读教科书中现有算法的描述。
- 解释并实现研究论文中新方法的描述。
- 向其他从业者简要描述您自己的方法。
此外,Python 等编程语言提供了直接实现线性代数表示法的有效方法。
理解符号以及如何在您的语言或库中实现它将允许更短且可能更有效地实现机器学习算法。
你需要学习线性代数算术
与线性代数的符号相结合是执行的算术运算。
您需要知道如何添加,减去和乘以标量,向量和矩阵。
线性代数领域的新手面临的挑战是诸如矩阵乘法和张量乘法之类的操作,这些操作并未实现为这些结构的元素的直接乘法,并且乍一看似乎不直观。
同样,大多数(如果不是全部)这些操作都是通过现代线性代数库中的 API 调用有效实现并提供的。
作为能够有效读写矩阵表示法的一部分,需要理解如何实现向量和矩阵运算。
你需要学习线性代数的统计学
您必须学习线性代数才能学习统计量。特别是多变量统计。
统计和数据分析是支持机器学习的数学的另一个支柱领域。他们主要关注描述和理解数据。作为数据的数学,线性代数已将其指纹留在许多相关的数学领域,包括统计学。
为了能够阅读和解释统计量,您必须学习线性代数的符号和操作。
现代统计学使用线性代数的符号和工具来描述统计方法的工具和技术。从用于数据均值和方差的向量,到描述多个高斯变量之间的关系的协方差矩阵。
两个领域之间的一些合作的结果也是主要机器学习方法,例如主成分分析,或简称 PCA,用于数据减少。
4.你需要学习矩阵分解
基于符号和算术的基础是矩阵分解的思想,也称为矩阵分解。
您需要知道如何对矩阵进行分解以及它意味着什么。
矩阵分解是线性代数中的关键工具,广泛用作线性代数(如矩阵逆)和机器学习(最小二乘)中许多更复杂运算的元素。
此外,还有一系列不同的矩阵分解方法,每种方法都有不同的优势和能力,其中一些可以被认为是“机器学习”方法,例如奇异值分解,或简称 SVD,用于数据缩减。
为了阅读和解释高阶矩阵运算,您必须理解矩阵分解。
5.你需要学习线性最小二乘法
您需要知道如何使用矩阵分解来求解线性最小二乘法。
线性代数最初是为解决线性方程组而开发的。这些是存在比未知变量(例如系数)更多的方程的情况。因此,它们在算术上难以解决,因为没有单一解决方案,因为没有线或平面可以适应数据而没有一些错误。
这种类型的问题可以被定义为平方误差的最小化,称为最小二乘,并且可以用线性代数的语言重新编程,称为线性最小二乘。
线性最小二乘问题可以使用诸如矩阵分解之类的矩阵运算在计算机上有效地解决。
最小二乘法因其在线性回归模型解决方案中的作用而闻名,但在一系列机器学习算法中也发挥着更广泛的作用。
为了理解和解释这些算法,您必须了解如何使用矩阵分解方法来解决最小二乘问题。
还有一个原因
如果我能再给出一个理由,那就是:因为它很有趣。
认真。
学习线性代数,至少我用实际例子和可执行代码教它的方式,很有趣。一旦您可以看到操作如何处理实际数据,就很难避免对方法产生强烈的直觉。
您是否有更多理由说明为什么对于中级机器学习从业者来说学习线性代数至关重要?
如果以下评论,请告诉我。
在线性代数中从哪里开始?
也许现在你有动力进入线性代数领域。
我会提醒你不要直接使用线性代数。这是一个很大的领域,并非所有这些都与您作为机器学习从业者相关或适用,至少在一开始就不是。
我建议采用交错方法,从以下与机器学习相关的线性代数区域开始。
- 向量和矩阵表示法。
- 向量和矩阵算法。
- 多变量统计。
- 矩阵分解。
- 线性最小二乘法。
我认为这是一个有效的机器学习从业者所需的最小线性代数。
您可以更深入地了解操作是如何得出的,这反过来可能加深您在应用机器学习的某些方面的理解和有效性,但它可能超出了大多数从业者的收益递减点,至少就当天而言普通机器学习从业者的日常活动。
摘要
在这篇文章中,您发现了为什么作为机器学习从业者,您应该加深对线性代数的理解。
具体来说,你学到了:
- 不是每个人都应该学习线性代数,这取决于你在学习机器学习的过程中所处的位置。
- 5 个理由为什么中间机器学习从业者需要更深入地理解线性代数。
- 一旦你有动力开始进入线性代数领域的旅程,从哪里开始。
你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。