Source code for causalexplain.independence.kernels
'''
Created on 2013/01/26
@author: myamada
'''
import numpy as np
[docs]
def rbf_dot(X, deg):
# Set kernel size to median distance between points, if no kernel specified
if X.ndim == 1:
X = X[:, np.newaxis]
m = X.shape[0]
G = np.sum(X * X, axis=1)[:, np.newaxis]
Q = np.tile(G, (1, m))
H = Q + Q.T - 2.0 * np.dot(X, X.T)
if deg == -1:
dists = (H - np.tril(H)).flatten()
deg = np.sqrt(0.5 * np.median(dists[dists > 0]))
H = np.exp(-H / 2.0 / (deg ** 2))
return H
[docs]
def kernel_Delta_norm(xin1, xin2):
n1 = xin1.shape[1]
n2 = xin2.shape[1]
K = np.zeros((n1, n2))
ulist = np.unique(xin1)
for ind in ulist:
c1 = np.sqrt(np.sum(xin1 == ind))
c2 = np.sqrt(np.sum(xin2 == ind))
ind1 = np.where(xin1 == ind)[1]
ind2 = np.where(xin2 == ind)[1]
K[np.ix_(ind1, ind2)] = 1 / c1 / c2
return K
[docs]
def kernel_Delta(xin1, xin2):
n1 = xin1.shape[1]
n2 = xin2.shape[1]
K = np.zeros((n1, n2))
ulist = np.unique(xin1)
for ind in ulist:
ind1 = np.where(xin1 == ind)[1]
ind2 = np.where(xin2 == ind)[1]
K[np.ix_(ind1, ind2)] = 1
return K
[docs]
def kernel_Gaussian(xin1, xin2, sigma):
n1 = xin1.shape[1]
n2 = xin2.shape[1]
xin12 = np.sum(np.power(xin1, 2), 0)
xin22 = np.sum(np.power(xin2, 2), 0)
dist2 = np.tile(xin22, (n1, 1)) + np.tile(xin12,
(n2, 1)).transpose() - 2 * np.dot(
xin1.T, xin2)
K = np.exp(-dist2 / (2 * np.power(sigma, 2)))
return K