有没有办法检查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
有没有办法证明列B
是A
的线性组合,但C
是一个独立的列?我的最终目标是在数据集上运行泊松回归,但我不断收到LinAlgError: Singular matrix
错误,这意味着我的数据帧不存在逆,因此它包含依赖列。
我想提出一种以编程方式检查每个功能并确保没有相关列。
答案 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