Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- p_t_given_y=p_t_given_y[:,np.random.permutation(card_y)]
- a=np.linspace(0,30,num=25)
- b=np.linspace(30,100,num=50)
- c=np.linspace(100,400,num=50)
- d=np.array([np.inf])
- beta=np.concatenate((a, b,c,d), axis=0)
- p=np.zeros(len(beta))
- I_t_and_y_new_list=[]
- for h in np.arange(0,len(beta)):
- while Js>Eps:
- KL=np.zeros([card_t,card_y])
- for runKL in np.arange(0, card_x):
- klp1 = np.matlib.repmat(np.log((p_x_given_t[runKL, :])), card_y, 1)
- klp2 = np.matlib.repmat(np.log(p_x_given_y[runKL, :]), card_t, 1)
- klp12 = klp2.T - klp1
- klp3 = np.matlib.repmat(p_x_given_y[runKL, :], card_t, 1)
- klp123 = klp3 * klp12.T
- KL = KL + klp123
- KL_div = KL
- if beta[h]==np.inf:
- p_t_given_yi =(np.argmin(KL,axis=0))
- a=np.zeros([card_y,card_t])
- a[np.arange(p_t_given_yi.size),p_t_given_yi]=1
- p_t_given_y_new=a.T
- else:
- exp_dkl=np.exp(-beta[h]*KL)
- p_t_given_y_new=(np.tile(p_t,(card_y,1))).T * exp_dkl
- z_x_and_beta=np.sum(p_t_given_y_new,axis=0)
- p_t_given_y_new = p_t_given_y_new/np.tile(z_x_and_beta,(card_t,
- p_t=np.sum(p_y[np.newaxis,:]*p_t_given_y_new,axis=1)
- p_t_and_y_new= p_t_given_y_new*p_y[np.newaxis,:]
- I_t_and_y_new=np.sum(p_t_and_y_new*np.nan_to_num(np.log2(p_t_and_y_new/(np.tile(np.tile(p_t,(1,32))*p_y,[card_t,1])))))
- I_t_and_y_new_list.append(I_t_and_y_new)
- p_t_given_y3d_new= np.tile(np.expand_dims(p_t_given_y_new,axis=2),[1,1,card_x])#turning 2d into 3d for calculation of p(x|t)
- p_x_and_y3d_new=np.tile(np.expand_dims(p_x_and_y,axis=2),[1,1,card_t])
- p_x_given_t=np.sum(np.transpose(p_t_given_y3d_new)*p_x_and_y3d,axis=1)/p_t
- pi=np.array([0.5,0.5])
- p_t_given_ybar=pi[0]*p_t_given_y_new+pi[1]*p_t_given_y
- dkl1=p_t_given_y_new*np.nan_to_num(np.log2(p_t_given_y_new/p_t_given_ybar))
- dkl2=p_t_given_y*np.nan_to_num(np.log2(p_t_given_y/p_t_given_ybar))
- Js=np.sum(pi[0]*dkl1+pi[1]*dkl2)
- #Js=np.sum(pi[0]*p_t_given_y_new*np.log2(p_t_given_y_new/(pi[0]*p_t_given_y_new+pi[1]*p_t_given_y)))+np.sum(pi[1]*np.sum(p_t_given_y*np.log2(p_t_given_y/(pi[0]*p_t_given_y_new+pi[1]*p_t_given_y))))
- p_t_given_y=p_t_given_y_new
- counter += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement