2017-06-14 51 views
3

有没有办法检查熊猫数据框中列的线性依赖关系?例如:有没有办法检查数据框中的线性依赖列?

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是一个独立的列?我的最终目标是在数据集上运行poisson回归,但我一直得到一个LinAlgError: Singular matrix错误,这意味着我的数据框不存在反向,因此它包含从属列。

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

+0

你应该能够实现你需要用'numpy'什么,这个帖子:https://stackoverflow.com/questions/28816627/how-to-find-linearly-independent-rows -from-A-矩阵 –

回答

3

如果你有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 
相关问题