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

时间:2017-06-14 22:35:03

标签: python pandas dataframe linear-algebra

有没有办法检查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

有没有办法证明列BA的线性组合,但C是一个独立的列?我的最终目标是在数据集上运行泊松回归,但我不断收到LinAlgError: Singular matrix错误,这意味着我的数据帧不存在逆,因此它包含依赖列。

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

1 个答案:

答案 0 :(得分:4)

如果您有SymPy,可以通过"reduced row echelon form"使用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]

数据透视列(存储为inds)代表线性独立的“列数”,您可以简单地“切掉”其他列:

>>> df.iloc[:, inds]
   A  C
0  0  8
1  2  3
2  3  5
3  4  4