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错误,这意味着我的数据框不存在任何逆,因此它包含相关列。
我想提出一种编程方式来检查每个功能并确保没有相关列。
如果你有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)