def _initialize(self, data, alpha=1.0, sigma_w=1, initial_Z=None, initial_W=None, KK=None):
if data is None:
# @debug if data=None !
data = np.zeros((1,1))
if type(data) is not ma.masked_array:
# Ignore Diagonal
data = np.ma.array(data, mask=np.zeros(data.shape))
np.fill_diagonal(data, ma.masked)
self.mask = data.mask
self.symmetric = (data == data.T).all()
self.nnz = len(data.compressed())
super(IBPGibbsSampling, self)._initialize(data, alpha, initial_Z, KK=KK)
self._mean_w = 0
assert(type(sigma_w) is float)
self._sigma_w = sigma_w
self._sigb = 1 # Carreful make overflow in exp of sigmoid !
self._W_prior = np.zeros((1, self._K))
if initial_W != None:
self._W = initial_W
else:
if self.assortativity == 1:
# Identity
self._W = (np.ones((self._K, self._K))*W_diag) * (np.ones((self._K)) + np.eye(self._K)*-2)
elif self.assortativity == 2:
# Bivariate Gaussian
v = 10
x, y = np.mgrid[-v:v:self._K*1j, -v:v:self._K*1j]
xy = np.column_stack([x.flat, y.flat])
mu = np.array([0, 0])
sigma = np.array([1, 1])
covariance = np.array([[v*100,0],[0,v/10]])
theta = np.pi / 4
rot = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])
covariance = rot.dot(covariance).dot(rot.T)
z = sp.stats.multivariate_normal.pdf(xy, mean=mu, cov=covariance)
z = 400 * z.reshape(x.shape)
self.z_mean = z - np.ones(z.shape)*1
self._W = np.random.normal(self.z_mean, self._sigma_w, (self._K, self._K))
else:
self._W = np.random.normal(self._mean_w, self._sigma_w, (self._K, self._K))
if self.symmetric:
self._W = np.tril(self._W) + np.tril(self._W, -1).T
np.fill_diagonal(self._W, 1)
#self._Z = csr_matrix(self._Z)
#self._Z = lil_matrix(self._Z)
assert(self._W.shape == (self._K, self._K))
评论列表
文章目录