【老计带你懂线性代数】07:线性相关、基与维度,数据到底有几个自由度
开头:一个关于"多余"的问题
先看一个AI里天天遇到的问题。假设一份数据里有三列特征:身高厘米、身高英寸、体重。你发现前两列其实是一回事,身高英寸完全能由身高厘米换算出来。那这三列里,真正独立的信息只有两个(身高、体重),有一列是多余的。
AI里这种"多余"到处都是。几百个特征里,很多是重复的、能被别人凑出来的,比如一个电商用户的"累计消费"和"平均每单消费乘以订单数"其实高度相关。搞清楚"一堆向量里到底有几个是真正独立的、有几个是多余的",就是这一篇的主题。它直接关系到一个核心问题,数据能不能压缩、能压到几维,也就是降维的根基。
这背后是三个环环相扣的概念:线性相关、基、维度。它们听着抽象,其实都在回答同一个朴素问题,这堆数据里,到底有几样东西是真正说了算的。
线性相关与无关:有没有冗余
先讲最核心的概念,线性相关和线性无关。用大白话说:
如果一组向量里,有某个向量能被其他向量组合(加减和缩放)出来,那这组向量就是线性相关的,意思是有冗余、有多余的。反过来,如果谁都没法被别人凑出来、每个都提供了独一无二的信息,就是线性无关的,意思是没冗余、个个都不可替代。
回到开头的例子:身高厘米和身高英寸线性相关(一个能换算出另一个,纯冗余);而身高和体重线性无关(谁也换算不出谁,是两个独立的信息)。
打个比方:一个团队里,如果有个人的活别人完全能顶替(他的贡献能被其他人凑出来),那他就是冗余的(线性相关);如果每个人都有别人替代不了的独特技能,这个团队就没有冗余(线性无关)。线性无关,就是一组向量里人人都不可替代。
为什么这个概念在AI里重要?因为线性相关的特征是冗余的,去掉它们不损失信息,还能减少维度、降低计算、缓解过拟合。找出并去掉冗余,正是降维要干的核心事情之一。
基:撑起整个空间的最小骨架
理解了线性无关,基就好懂了。基,是一组线性无关的向量,它们能够组合出整个空间里的任何一个向量。说白了,基是空间的最小骨架,用最少的、互不冗余的向量,搭起整个空间。
二维空间里,前面讲过的 [1,0] 和 [0,1] 就是一组基(叫标准基),任何二维向量都能由它俩组合出来。但基不是唯一的,任何两个线性无关的二维向量都能当基,只是标准基最方便。
基的意义在于,它是描述一个空间最经济的方式,不多一个(无冗余)、不少一个(够用)。空间里的每个向量,都可以唯一地表示成基向量的组合,这组组合系数就是这个向量在这组基下的坐标。换一组基,等于换一个坐标系去看同样的数据,这个思想在降维里特别关键,PCA本质就是给数据换一组更好的基。
维度与秩:到底有几个独立方向
维度,就是一个空间的基里有几个向量,也就是这个空间有几个独立的方向、几个自由度。二维空间的基有2个向量,所以是2维;三维空间是3维。维度回答的是"这个空间有几个真正独立的方向"。
而秩,是针对一个矩阵(或一组向量)说的,指这组向量里有几个是线性无关的,也就是它们实际张成的空间有几维。秩是衡量"一堆向量里有多少真正独立的信息"的指标。
回到开头三列特征的例子:虽然有3列,但因为有一列冗余,这个数据矩阵的秩是2,说明它实际只占据了一个二维的空间。秩小于特征数,就意味着数据有冗余、有压缩的余地。
打个比方:一份看着有100个特征的数据,如果秩只有10,说明这100个特征里真正独立的信息只有10个方向,剩下90个都是这10个凑出来的。那你完全可以只用10个维度来表示它,几乎不丢信息。这就是降维的底气。
AI里的核心:数据的内在维度与降维
现在把这些概念汇聚到AI最实际的地方,这也是本篇的落点。
现实中的高维数据,往往有一个远小于它表面维度的内在维度。一张1000维的人脸图片,看起来是1000维,但人脸的变化其实是有限的(脸型、表情、光照、角度等少数几个因素),它真正的自由度可能只有几十个。也就是说,这些数据虽然摊在1000维空间里,实际上只挤在其中一个几十维的低维"面"上。
这就是为什么高维数据能降维而几乎不丢信息,因为它本来就没占满那么多维度,大量维度是冗余的、相关的。找出数据真正独立的那几个方向(相当于找一组更好的基),把数据在这几个方向上重新表示,就完成了降维。
打个比方:一群人看似站在一个巨大的三维大厅里(高维),可你仔细一看,他们其实全都站在大厅中央的一块地毯上(低维的面)。既然大家都在这块地毯上,你就没必要用整个三维坐标来记录每个人,只用地毯上的二维坐标就够了。降维就是发现这块地毯、然后改用地毯的坐标。现实数据大多如此,摊在高维、实际挤在低维。
这个洞察是PCA、流形学习、自编码器等一切降维方法的根本前提。理解了它,你就懂了降维为什么可能、为什么有效。第10篇讲PCA时,我们会看到它具体怎么找出这些独立方向。
顺便点破一个很多人模糊的地方,换一组基到底有什么用,为什么降维要换基。同一份数据,用不同的基去描述,繁简可能天差地别。还拿那块地毯打比方,如果你非要用大厅的东西南北上下三个方向去记录地毯上每个人的位置,就得用三个坐标,还其中一个(垂直方向)永远接近某个固定值、纯属浪费。可如果你换成沿着地毯本身的两个方向作为基,只用两个坐标就够了,第三个维度直接消失。数据没变,只是换了个更贴合它内在结构的坐标系,冗余的维度就自动暴露、可以扔掉了。这就是换基的威力,也是降维的精髓,不是硬删特征,而是换一个聪明的视角,让冗余无处遁形。PCA做的正是这件事,它自动帮你找到那组最贴合数据、最能暴露冗余的基,然后只保留最重要的几个方向。理解了这层,你对降维的认识就从"删列"上升到了"换坐标系看数据",这是本质的一步。
输入和输出长什么样
- 输入:一组向量,或一个矩阵(每列或每行是一个向量)。
- 输出:这组向量是否线性相关、矩阵的秩(有几个独立方向)。
- NumPy里用
np.linalg.matrix_rank直接算秩。
上代码:判断冗余、算秩、看内在维度
# 依赖:pip install numpyimportnumpyasnp# 三列特征:身高cm、身高inch(=cm/2.54)、体重。前两列线性相关(冗余)height_cm=np.array([170,180,165,175])height_inch=height_cm/2.54weight=np.array([65,80,55,70])data=np.column_stack([height_cm,height_inch,weight])print("数据形状(4样本,3特征):",data.shape)print("矩阵的秩(真正独立的特征数):",np.linalg.matrix_rank(data))print("秩是2不是3,说明3列里有1列冗余(身高cm和inch是一回事)")# 对比:三列完全独立的特征,秩应为3data2=np.array([[170,65,3],[180,80,7],[165,55,2],[175,70,9],],dtype=float)print("\n三列独立特征的秩:",np.linalg.matrix_rank(data2))# 一组向量线性相关的判断:v3 = v1 + v2,所以三者线性相关v1=np.array([1,0,0])v2=np.array([0,1,0])v3=v1+v2# v3能被v1 v2凑出来M=np.column_stack([v1,v2,v3])print("\nv1 v2 v3的秩:",np.linalg.matrix_rank(M),"(3个向量但秩为2,线性相关)")# 模拟高维但内在维度低:1000维数据,其实由5个独立方向凑出来np.random.seed(0)base=np.random.randn(200,5)# 真正的5个独立方向mix=np.random.randn(5,1000)# 把5维随机映射到1000维high_dim=base @ mix# 得到看似1000维的数据print("\n高维数据形状:",high_dim.shape)print("它的秩(真正的内在维度):",np.linalg.matrix_rank(high_dim))print("表面1000维,内在其实只有5维,这就是能降维的原因")运行输出(示例):
数据形状(4样本,3特征): (4, 3) 矩阵的秩(真正独立的特征数): 2 秩是2不是3,说明3列里有1列冗余(身高cm和inch是一回事) 三列独立特征的秩: 3 v1 v2 v3的秩: 2 (3个向量但秩为2,线性相关) 高维数据形状: (200, 1000) 它的秩(真正的内在维度): 5 表面1000维,内在其实只有5维,这就是能降维的原因运行你会看到:身高cm和inch那份数据秩是2(有冗余)、三列独立的秩是3;v3能被v1v2凑出来所以三者秩为2;最后那份表面1000维的数据,秩只有5,说明它内在只有5个独立方向。最后这个例子最关键,它证明了高维数据常常内在维度很低,这正是降维能大幅压缩、还几乎不丢信息的根本原因。
在AI里怎么用
- 降维(PCA等):找出数据真正独立的方向,扔掉冗余,第10篇会讲透,呼应《老计带你懂AI算法》的PCA篇。
- 特征工程:识别并去掉高度相关的冗余特征,减少维度、缓解过拟合。
- 理解模型容量:数据的内在维度,暗示了需要多复杂的模型、多少数据才够。
- 矩阵是否可逆:满秩(无冗余)的方阵才可逆,这是下一篇的主题之一。
常见误区
- 线性相关不是"有关系"那么宽泛:它特指"一个能被其他向量线性组合出来",是精确的冗余概念。
- 秩小于特征数不是坏事:它恰恰说明数据可压缩,是降维的机会。
- 内在维度低是普遍现象:真实高维数据几乎都远没占满它的表面维度,别被"几百上千维"吓到。
小结与承上启下
- 线性相关与无关:有没有向量能被别人凑出来,相关就是有冗余、无关就是个个不可替代。
- 基:一组无冗余又够用的向量,撑起整个空间的最小骨架,换一组基就是换个坐标系看数据。
- 维度与秩:维度是空间有几个独立方向,秩是一堆向量里有几个真正独立的。
- AI核心:高维数据往往内在维度很低(挤在一块低维地毯上),这是降维能起作用的根本前提,而降维的精髓是换一组贴合数据的基、让冗余暴露出来。
我们知道了秩能反映一堆向量有没有冗余、独不独立。顺着这个,还有一组能给矩阵做"体检"的工具,秩、行列式、可逆性,能告诉你一个矩阵健不健康、能不能被撤销。下一篇我们讲这组诊断工具。
我们下一篇见。
延伸阅读
- 3Blue1Brown《线性代数的本质》:线性相关、基、张成空间:https://www.3blue1brown.com/topics/linear-algebra
- NumPy 官方文档:矩阵的秩np.linalg.matrix_rank:https://numpy.org/doc/stable/reference/generated/numpy.linalg.matrix_rank.html
- 数据的内在维度可按关键词Intrinsic Dimension、Manifold Hypothesis(流形假设)检索
(说明:以上为官方与经典公开资料地址,可能随版本调整,如打不开可用标题搜索。)