def compute_induced_kernel_matrix_on_data(self,data_x,data_y):
'''Z follows the same distribution as X; W follows that of Y.
The current data generating methods we use
generate X and Y at the same time. '''
size_induced_set = max(self.num_inducex,self.num_inducey)
#print "size_induce_set", size_induced_set
if self.data_generator is None:
subsample_idx = np.random.randint(self.num_samples, size=size_induced_set)
self.data_z = data_x[subsample_idx,:]
self.data_w = data_y[subsample_idx,:]
else:
self.data_z, self.data_w = self.data_generator(size_induced_set)
self.data_z[[range(self.num_inducex)],:]
self.data_w[[range(self.num_inducey)],:]
print 'Induce Set'
if self.kernelX_use_median:
sigmax = self.kernelX.get_sigma_median_heuristic(data_x)
self.kernelX.set_width(float(sigmax))
if self.kernelY_use_median:
sigmay = self.kernelY.get_sigma_median_heuristic(data_y)
self.kernelY.set_width(float(sigmay))
Kxz = self.kernelX.kernel(data_x,self.data_z)
Kzz = self.kernelX.kernel(self.data_z)
#R = inv(sqrtm(Kzz))
R = inv(sqrtm(Kzz + np.eye(np.shape(Kzz)[0])*10**(-6)))
phix = Kxz.dot(R)
Kyw = self.kernelY.kernel(data_y,self.data_w)
Kww = self.kernelY.kernel(self.data_w)
#S = inv(sqrtm(Kww))
S = inv(sqrtm(Kww + np.eye(np.shape(Kww)[0])*10**(-6)))
phiy = Kyw.dot(S)
return phix, phiy
评论列表
文章目录