有没有办法检查数据框中线性相关的列?

Geo*_*rin 5 python linear-algebra dataframe pandas

有没有一种方法来检查熊猫数据框中的列的线性相关性?例如:

columns = ['A','B', 'C']
df = pd.DataFrame(columns=columns)
df.A = [0,2,3,4]
df.B = df.A*2
df.C = [8,3,5,4]
print(df)

   A  B  C
0  0  0  8
1  2  4  3
2  3  6  5
3  4  8  4
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以证明该列B是的线性组合A,但是C是独立的列呢?我的最终目标是对数据集进行泊松回归,但我一直遇到LinAlgError: Singular matrix错误,这意味着我的数据框不存在任何逆,因此它包含相关列。

我想提出一种编程方式来检查每个功能并确保没有相关列。

MSe*_*ert 9

如果你有SymPy,你可以使用“简化行阶梯形式”通过sympy.matrix.rref

>>> import sympy 
>>> reduced_form, inds = sympy.Matrix(df.values).rref()
>>> reduced_form
Matrix([
[1.0, 2.0,   0],
[  0,   0, 1.0],
[  0,   0,   0],
[  0,   0,   0]])

>>> inds
[0, 2]
Run Code Online (Sandbox Code Playgroud)

枢轴列(存储为inds)表示线性无关的“列号”,您可以简单地“切掉”其他列:

>>> df.iloc[:, inds]
   A  C
0  0  8
1  2  3
2  3  5
3  4  4
Run Code Online (Sandbox Code Playgroud)