2013-10-09 28 views
1

以下簡單示例返回一個奇異矩陣。爲什麼?任何方法來克服它?KDE失敗兩點?

In: from scipy.stats import gaussian_kde 
Out: 

In: points 
Out: (array([63, 84]), array([46, 42])) 

In: gaussian_kde(points) 
Out: (array([63, 84]), array([46, 42])) 

LinAlgError: singular matrix 

回答

4

查看回溯,反轉協方差矩陣時可以看到它失敗。這是由於您的數據的確切multicollinearity。從頁,你有多重數據中的兩個變量是共線的,也就是說,如果

兩個自變量之間的相關性等於1或-1

在這種情況下,這兩個變量只有兩個樣本,它們總是共線的(平凡,總是有一條線通過兩個不同的點)。我們可以檢查:

np.corrcoef(array([63,84]),array([46,42])) 
[[ 1. -1.] 
[-1. 1.]] 

爲了不一定是共線的,兩個變量必須至少有n=3樣本。爲了增加這個限制,你有ali_m指出的限制,樣本數n應該大於或等於變量數p。把兩者結合起來,

n>=max(3,p) 

在這種情況下p=2n>=3是正確的約束。

1

錯誤時gaussian_kde()試圖採取輸入數據的協方差矩陣的逆矩陣進行。爲了使協方差矩陣是非奇異的,輸入中(非相同)點的數量必須大於等於變量數量。嘗試添加第三點,你應該看到它的作品。

This answer on Crossvalidated對此有正確的解釋。

+0

他的點數是> =變量的數量,2> = 2 – gg349

+1

@flebool D'oh - 不知道如何錯過!是的,當然你是對的,擁有'n> = p'是一個必要但不充分的條件 - 如果你有多重共線性,協方差矩陣仍然可能是等級不足的。 –