2013-10-08 35 views
3

參考https://stats.stackexchange.com/questions/15798/how-to-calculate-a-gaussian-kernel-effectively-in-numpy,提供了用於計算預先計算的內核矩陣的解決方案。Python中的內核方法

from scipy.spatial.distance import pdist, squareform 
X = loaddata() # this is an NxD matrix, where N is number of items and D its dimensions 
pairwise_dists = squareform(pdist(X, 'euclidean')) 
K = scip.exp(pairwise_dists/s**2) 

如果輸入是有向圖的加權鄰接矩陣,那麼如何實現上面的Guassin核?

回答

2

如果你已經有了距離矩陣,你可以簡單地套用

K = scip.exp(YOUR_DISTANCE_HERE/s**2) 

但是,它可能不再是內核。並非所有「相似性分數」都是有效的內核。如果你的距離是有效的馬哈拉諾比斯距離那麼你有一個保證,一切都會好的。在「任何」距離的情況下 - 任何事情都可能發生。

Usinig無效內核可能導致:

  1. 優化進程崩潰
  2. 尋找次優解(壞的解決方案)
  3. 什麼,也有完全沒有保證。

也許你應該考慮graph kernels這是有點密切相關的高斯核和熱擴散