def __init__(self,
MMDLayer,
MMDTargetTrain,
MMDTargetValidation_split=0.1,
MMDTargetSampleSize=1000,
n_neighbors = 25,
scales = None,
weights = None):
if scales == None:
print("setting scales using KNN")
med = np.zeros(20)
for ii in range(1,20):
sample = MMDTargetTrain[np.random.randint(MMDTargetTrain.shape[0], size=MMDTargetSampleSize),:]
nbrs = NearestNeighbors(n_neighbors=n_neighbors).fit(sample)
distances,dummy = nbrs.kneighbors(sample)
#nearest neighbor is the point so we need to exclude it
med[ii]=np.median(distances[:,1:n_neighbors])
med = np.median(med)
scales = [med/2, med, med*2] # CyTOF
print(scales)
scales = K.variable(value=np.asarray(scales))
if weights == None:
print("setting all scale weights to 1")
weights = K.eval(K.shape(scales)[0])
weights = K.variable(value=np.asarray(weights))
self.MMDLayer = MMDLayer
MMDTargetTrain, MMDTargetValidation = train_test_split(MMDTargetTrain, test_size=MMDTargetValidation_split, random_state=42)
self.MMDTargetTrain = K.variable(value=MMDTargetTrain)
self.MMDTargetTrainSize = K.eval(K.shape(self.MMDTargetTrain)[0])
self.MMDTargetValidation = K.variable(value=MMDTargetValidation)
self.MMDTargetValidationSize = K.eval(K.shape(self.MMDTargetValidation)[0])
self.MMDTargetSampleSize = MMDTargetSampleSize
self.kernel = self.RaphyKernel
self.scales = scales
self.weights = weights
#calculate the raphy kernel applied to all entries in a pairwise distance matrix
评论列表
文章目录