线性相关特征

机器算法验证 机器学习 matlab 矩阵 线性代数
2022-03-28 21:07:38

我有一个包含 1000 个观察值(行)和 100 个特征(列)的矩阵 A。我想找到:

  1. 线性相关的特征,以便我可以删除它们并简化问题。rank(A) 给了我 88,我假设这意味着 12 个特征是线性相关的。我对吗?
  2. 完成上述步骤后,如何确定 100 列中的哪 12 列是线性相关的?我知道没有唯一的答案。但这是否意味着我可以选择任意 12 列?
  3. 假设我选择删除最后 12 列。但在删除它们之前,我要找到计算到最后 12 列的 12 个线性组合。我如何得到这些?

到目前为止,我已经尝试过使用 Matlab 的 PCA、QR 和 SVD,但它们中的每一个都给出了不同的矩阵,我不知道如何使用这些矩阵来得到我想要的。

3个回答

有点晚了,但是...

有一种称为Pearson 相关性的度量,可用于查找两个变量 X 和 Y 之间的线性相关性(依赖性)。简而言之,它是两个变量的协方差除以其标准差的乘积:

皮尔逊相关公式

结果是介于 +1 和 -1(含)之间的值,其中 1 是完全正相关,0 是无相关性,-1 是完全负相关。

使用它,您可以找到哪些列相关并忽略(其中一些)它们。

一种方法是使用不完整的 Cholesky 分解,我在这里有一些 MATLAB 代码,有关详细信息,请参阅该页面上提到的 Fine 和 Scheinberg 的论文。

  1. 是的,排名大致告诉您有多少列向量(特征)是独立的。

  2. 不,您不能删除任意列。您可以尝试删除随机列并计算结果的排名——您会看到不同的数字。您只需要删除那些依赖的功能。

    或者,假设您以只有最后 12 列依赖于前 12 列的方式生成数据。你还能删除任何 12 列吗?

    但是,您可以做的是使用与等级相等的组件数执行 PCA。这不仅会减少您的空间尺寸,还会使您的特征去相关。这种转换的缺点是(可能)失去了可解释性,但这不是数学问题,如果你想保留它,你应该根据你的洞察力删除特征。

  3. 假设您的数据矩阵是形式(X;Y)在哪里XXn_rows × (n_cols - 12)分别是 form和的子矩阵n_rows × 12这意味着,那XY是通过切出最后 12 列形成的子矩阵。如果你想找到 12 个线性组合X要得到Y,你实际上想要求解形式为的 12 个线性方程组

    Xbi=Yi

    在哪里Yii第 列Y. 现在将所有这些方程粘合在一起bi成矩阵B的形状(n_cols - 12) × 12然后方程变为

    XB=Y

    请注意,X它不是正方形,因此不可逆。幸运的是,解决方案仍然存在,并由pseudoinversion给出:

    B=(XTX)1XY

注意:现在有足够深思熟虑的人可能会注意到,我提供上述公式的方式看起来我们可以将原始数据矩阵的任何列集合表示为其余列的线性组合。怎么会这样?这是否意味着任何一组列都是线性依赖于所有其他列的?这听起来很疯狂!

当然,还有一个重要的注意事项X这里。注意XTX那是倒置的。为了反转矩阵,它需要是满秩的。这意味着X必须具有完整的列排名,即排名等于列数。

另一个有趣的事情是当一些Yi实际上独立于X. 显然,公式没有地方可以打破,但是结果的含义是什么,我们得到了什么?在这种情况下,结果bi是正交投影的系数向量Yi到由列产生的空间上X. 从某种意义上说,它是最接近的线性组合X.