2017-06-14 53 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 
相關問題