def KLscore( x, z, returnQlog=False, qlog=None, qlogExp=None): #x are samples (change), z is measure data (unchanged!) tree_d = BallTree(x) plog = tree_d.kernel_density(xy_grid, h=.5, kernel='gaussian', return_log=True, rtol=.1) computeQlog = (qlog == None) if computeQlog: tree_m = BallTree(z) qlog = tree_m.kernel_density(xy_grid, h=1, kernel='gaussian', return_log=True) qlogExp = np.exp(qlog) delta_log = (qlog - plog) v = (qlogExp * delta_log).sum() v -= (np.exp(plog) * delta_log).sum() #- since we want p * (log(p)-log(q)) v *= -0.5 * dz2 #-sign to make it work as a similarity if returnQlog: return v, qlog else: return v
def kde_density(x, tree=None, apply_mean=False): if tree is None: tree = BallTree(x) data = tree.get_arrays()[0] h = np.std(data) * (4 / 3 / len(data))**(1 / 5 ) # Silverman's Rule of Thumb density = tree.kernel_density(x, h) if apply_mean: return np.mean(density) return density
def balltree_kde_density(x): tree = BallTree(x) h = np.std(x) * (4 / 3 / len(x))**(1 / 5) # Silverman's Rule of Thumb density = tree.kernel_density(x, h) return np.mean(density)