def mvm_form_prod(self,X,pselect=1.0): xdata=[[],[],[]] ## row index, column index , value (m,n)=X.shape X=X.reshape((1*m,n/1)) ## X=np.dot(X,X.T) # n=m k=0 icount=0 for i in range(m): px=np.random.rand(m) for j in range(m): if px[j]<pselect: v=np.dot(X[i],X[j]) ij=np.ravel_multi_index(([i],[j]),(m,m))[0] tij=np.unravel_index([ij],(m*1,m/1)) xdata[0].append(tij[0][0]) xdata[1].append(tij[1][0]) xdata[2].append(v) k+=1 icount+=1 xdata=mvm_prepare.sort_table(xdata,ifloat=1) return(xdata)
def mvm_form_prod_reorder(self,X,xfactors): xdata=[[],[],[]] ## row index, column index , value (m,n)=X.shape X2=np.dot(X,X.T) if m==400: print(m,n) ctensor=tensor_decomp.cls_tensor_decomp() ctensor.load(X2,xfactors) X2=ctensor.reorder_in_x(X2) (m2,n2)=X2.shape xmean=np.mean(X2) xstd=np.std(X2) lbound=xmean-5*xstd ubound=xmean+5*xstd k=0 icount=0 for i in range(m2): for j in range(n2): v=X2[i,j] if v>=lbound and v<=ubound: xdata[0].append(i) xdata[1].append(j) xdata[2].append(v) k+=1 icount+=1 xdata=mvm_prepare.sort_table(xdata,ifloat=1) return(xdata,m2,n2)
def load(self,ifile,pselect,itrain=1): xdata=[[],[],[]] ## row index, column index , value ddata=scipy.io.loadmat(self.sbasedir+self.ldirs[ifile]+'/'+self.slabels) if itrain==1: xtrain=ddata['xtrain'] else: xtrain=ddata['xtest'] m=xtrain.shape[0] ## antimatroid(xtrain[:5000]) iselect=np.where(np.random.rand(m)<pselect)[0] xtrain0=xtrain[iselect] m=xtrain0.shape[0]; X=np.dot(xtrain0,xtrain.T) for i in range(m): for j in range(m): v=X[i,j] if v!=0: xdata[0].append(i) xdata[1].append(j) xdata[2].append(v) xdata=mvm_prepare.sort_table(xdata,ifloat=1) return(xdata,m,m)
def load_objobj_act(self, lfiles, ifeature): """ load collected known entities (object, action,feature) into the relation table. """ ## first phase collect object labels for ifile in lfiles: self.collect_entities(ifile, ifeature) ## second phase load the relation table of known examples xdata = [[], [], []] ## row index, column index , value idata = 0 ifixtrain = [] ifixtest = [] for iobject1 in range(self.nobject): for iaction in self.ddata[iobject1].keys(): for iobject2 in range(self.nobject): if iaction in self.ddata[iobject2]: lvalue1 = self.ddata[iobject1][iaction] lvalue2 = self.ddata[iobject2][iaction] if len(lvalue1) > 0 and len(lvalue2) > 0: vvalue=np.hstack((np.array(list(lvalue1)), \ np.array(list(lvalue2)))) ## if len(vvalue)>1: ## print(vvalue) vvalue = np.mean(vvalue.astype(np.double)) if self.irowcol == 0: xdata[0].append(iobject1 * self.nobject + iobject2) xdata[1].append(iaction) xdata[2].append(vvalue) elif self.irowcol == 1: xdata[0].append(iaction) xdata[1].append(iobject1 * self.nobject + iobject2) xdata[2].append(vvalue) ifixtrain.append(idata) idata += 1 if self.irowcol == 0: self.nrow = self.nobject**2 self.ncol = self.naction elif self.irowcol == 1: self.nrow = self.naction self.ncol = self.nobject**2 xdata = mvm_prepare.sort_table(xdata, ifloat=1) ifixtrain = np.array(ifixtrain) ifixtest = ifixtrain return (xdata, self.nrow, self.ncol, ifixtrain, ifixtest)
def load_objobj_act(self,lfiles,ifeature): """ load collected known entities (object, action,feature) into the relation table. """ ## first phase collect object labels for ifile in lfiles: self.collect_entities(ifile,ifeature) ## second phase load the relation table of known examples xdata=[[],[],[]] ## row index, column index , value idata=0 ifixtrain=[] ifixtest=[] for iobject1 in range(self.nobject): for iaction in self.ddata[iobject1].keys(): for iobject2 in range(self.nobject): if iaction in self.ddata[iobject2]: lvalue1=self.ddata[iobject1][iaction] lvalue2=self.ddata[iobject2][iaction] if len(lvalue1)>0 and len(lvalue2)>0: vvalue=np.hstack((np.array(list(lvalue1)), \ np.array(list(lvalue2)))) ## if len(vvalue)>1: ## print(vvalue) vvalue=np.mean(vvalue.astype(np.double)) if self.irowcol==0: xdata[0].append(iobject1*self.nobject+iobject2) xdata[1].append(iaction) xdata[2].append(vvalue) elif self.irowcol==1: xdata[0].append(iaction) xdata[1].append(iobject1*self.nobject+iobject2) xdata[2].append(vvalue) ifixtrain.append(idata) idata+=1 if self.irowcol==0: self.nrow=self.nobject**2 self.ncol=self.naction elif self.irowcol==1: self.nrow=self.naction self.ncol=self.nobject**2 xdata=mvm_prepare.sort_table(xdata,ifloat=1) ifixtrain=np.array(ifixtrain) ifixtest=ifixtrain return(xdata,self.nrow,self.ncol,ifixtrain,ifixtest)
def load_onefile(self, iknown, ifile): """ - load collected known entities (object, action,feature) into the relation table. - one file is loaded and cut into training and test - it is to find the best parameters for the general case """ ## first phase collect object labels if iknown == 0: sfile = self.listfull[ifile] else: sfile = self.listknown[ifile] self.collect_objects(sfile) self.collect_relations(sfile, self.ddata_tra) print('<<<' + sfile) ## second phase load the relation table of known examples xdata = [[], [], []] ## row index, column index , value for iobject1, dobject2 in self.ddata_tra.items(): for iobject2, dvalues in dobject2.items(): for ifeature in range(self.nfeature): if ifeature in dvalues: svalue = dvalues[ifeature] else: svalue = '' if len( svalue ) > 0: ## if value is not given it is assumed as missing if self.irowcol == 0: xdata[0].append(iobject1) xdata[1].append(ifeature * self.nobject + iobject2) xdata[2].append(float(svalue)) elif self.irowcol == 1: xdata[0].append(ifeature * self.nobject + iobject1) xdata[1].append(iobject2) xdata[2].append(float(svalue)) if self.irowcol == 0: self.nrow = self.nobject self.ncol = self.nobject * self.nfeature elif self.irowcol == 1: self.nrow = self.nobject * self.nfeature self.ncol = self.nobject xdata = mvm_prepare.sort_table(xdata, ifloat=1) return (xdata, self.nrow, self.ncol)
def load_onefile(self,iknown,ifile): """ - load collected known entities (object, action,feature) into the relation table. - one file is loaded and cut into training and test - it is to find the best parameters for the general case """ ## first phase collect object labels if iknown==0: sfile=self.listfull[ifile] else: sfile=self.listknown[ifile] self.collect_objects(sfile) self.collect_relations(sfile,self.ddata_tra) print('<<<'+sfile) ## second phase load the relation table of known examples xdata=[[],[],[]] ## row index, column index , value for iobject1,dobject2 in self.ddata_tra.items(): for iobject2,dvalues in dobject2.items(): for ifeature in range(self.nfeature): if ifeature in dvalues: svalue=dvalues[ifeature] else: svalue='' if len(svalue)>0: ## if value is not given it is assumed as missing if self.irowcol==0: xdata[0].append(iobject1) xdata[1].append(ifeature*self.nobject+iobject2) xdata[2].append(float(svalue)) elif self.irowcol==1: xdata[0].append(ifeature*self.nobject+iobject1) xdata[1].append(iobject2) xdata[2].append(float(svalue)) if self.irowcol==0: self.nrow=self.nobject self.ncol=self.nobject*self.nfeature elif self.irowcol==1: self.nrow=self.nobject*self.nfeature self.ncol=self.nobject xdata=mvm_prepare.sort_table(xdata,ifloat=1) return(xdata,self.nrow,self.ncol)
def mvm_form(self,pselect=1.0): xdata=[[],[],[]] ## row index, column index , value (m,n)=self.X.shape k=0 for i in range(m): px=np.random.rand(n) for j in range(n): if px[j]<pselect: xdata[0].append(i) xdata[1].append(j) xdata[2].append(self.X[i,j]) k+=1 xdata=mvm_prepare.sort_table(xdata,ifloat=1) return(xdata)
def load(self,ifile): if ifile==0: sdir='/home/szedmak/data/image_text/labeled_images/' sfile='/cambridge/Image007.png' xmatpil=pilimg.open(sdir+sfile) xmatrix=np.array(xmatpil.resize((768,512))) ## 504,756 -> 512,768 self.xfactors=np.array([[32,48,1],[16,16,1],[1,1,3]]) elif ifile==1: sdir='/home/szedmak/src/python/algebra/tensor_decomp/' sfile='handwritten.png' xmatpil=pilimg.open(sdir+sfile) xmatrix=np.array(xmatpil.resize((1024,1024))) ## 504,756 -> 512,768 self.xfactors=np.array([[32,32],[32,32]]) elif ifile==2: sdir='/home/szedmak/src/python/algebra/tensor_decomp/' sfile='tilling.png' xmatpil=pilimg.open(sdir+sfile) xmatrix=np.array(xmatpil.resize((576,512))) ## 504,756 -> 512,768 ## xmatrix=np.mean(xmatrix,axis=2) self.xfactors=np.array([[32,36,1],[16,16,1],[1,1,3]]) ## tilling elif ifile==3: sdir='/home/szedmak/src/python/algebra/tensor_decomp/' sfile='poligon.png' xmatpil=pilimg.open(sdir+sfile) xmatrix=np.array(xmatpil.resize((512,512))) ## 504,756 -> 512,768 self.xfactors=np.array([[32,32,1],[16,16,1],[1,1,3]]) ## poligon elif ifile==4: sdir='/home/szedmak/src/python/algebra/tensor_decomp/' sfile='2008toyroom.png' xmatpil=pilimg.open(sdir+sfile) xmatrix=np.array(xmatpil.resize((768,512))) ## 504,756 -> 512,768 ## xmatrix=np.mean(xmatrix,axis=2) self.xfactors=np.array([[32,48,1],[16,16,1],[1,1,3]]) elif ifile==5: sdir='/home/szedmak/src/python/algebra/tensor_decomp/' sfile='PLayroom_How_to_Organize_Kids_Room_2013.png' xmatpil=pilimg.open(sdir+sfile) xmatrix=np.array(xmatpil.resize((768,512))) ## 504,756 -> 512,768 self.xfactors=np.array([[32,48,1],[16,16,1],[1,1,3]]) print(sdir,sfile) print(self.xfactors) self.baseline(xmatrix) ctensor=tensor_decomp.cls_tensor_decomp() ctensor.load(xmatrix,self.xfactors) X=ctensor.reorder_in_x(xmatrix) ## X=X.T tshape=X.shape mi=tshape[0] mj=tshape[1] ## if len(tshape)>2: ## mk=tshape[2] ## X=X/self.image_scale xdata=[[],[],[]] ## row index, column index , value for i in range(mi): for j in range(mj): xdata[0].append(i) xdata[1].append(int(np.mean(X[i,j]))) xdata[2].append(X[i,j]/self.image_scale) xdata=mvm_prepare.sort_table(xdata,ifloat=1) m1=mi ## m2=mj m2=256 return(xdata,m1,m2)
def load_twofiles(self,iknown1,iknown2,ifile1,ifile2): """ load collected known entities (object, action,feature) + the unknown object, action pairs without value into the relation table. !!! here we assume that all files contains the same set of object pairs. !!! it can be changed later!!! iknown1,ifile1 give the training iknown2,ifile2 give the test """ ## first phase collect object labels if iknown1==0: sfile1=self.listfull[ifile1] else: sfile1=self.listknown[ifile1] if iknown2==0: sfile2=self.listfull[ifile2] else: sfile2=self.listknown[ifile2] self.collect_objects(sfile1) self.collect_relations(sfile1,self.ddata_tra) self.collect_relations(sfile2,self.ddata_tes) ## second phase load the relation table of known examples xdata=[[],[],[]] ## row index, column index , value ## ndata=self.nobject**2 idata=0 ifixtrain=[] ifixtest=[] for iobject1,dobject2 in self.ddata_tra.items(): for iobject2,dvalues in dobject2.items(): for ifeature,svalue in dvalues.items(): if len(svalue)>0: if self.irowcol==0: xdata[0].append(iobject1) ## xdata[1].append(ifeature*self.nobject+iobject2) xdata[1].append(ifeature+self.nfeature*iobject2) xdata[2].append(float(svalue)) elif self.irowcol==1: ## xdata[0].append(ifeature*self.nobject+iobject1) xdata[0].append(ifeature+self.nfeature*iobject1) xdata[1].append(iobject2) xdata[2].append(float(svalue)) ifixtrain.append(idata) idata+=1 else: svalue=self.ddata_tes[iobject1][iobject2][ifeature] if len(svalue)>0: fvalue=float(svalue) else: fvalue=0 if self.irowcol==0: xdata[0].append(iobject1) ## xdata[1].append(ifeature*self.nobject+iobject2) xdata[1].append(ifeature+self.nfeature*iobject2) xdata[2].append(fvalue) elif self.irowcol==1: ## xdata[0].append(ifeature*self.nobject+iobject1) xdata[0].append(ifeature+self.nfeature*iobject1) xdata[1].append(iobject2) xdata[2].append(fvalue) ifixtest.append(idata) idata+=1 if self.irowcol==0: self.nrow=self.nobject self.ncol=self.nobject*self.nfeature elif self.irowcol==1: self.nrow=self.nobject*self.nfeature self.ncol=self.nobject xdata=mvm_prepare.sort_table(xdata,ifloat=1) ifixtrain=np.array(ifixtrain) ifixtest=np.array(ifixtest) return(xdata,self.nrow,self.ncol,ifixtrain,ifixtest)
def create_diag_kernel(self, xdatacls, params_spec, norm_spec, itraintest=1): xdata_1 = xdatacls.xdata_tra nval = xdata_1[2].shape[1] xranges_1 = xdatacls.xranges_rel if itraintest != 1: xdata_2 = xdatacls.xdata_tes xranges_2 = xdatacls.xranges_rel_test else: xdata_2 = xdata_1 xranges_2 = xranges_1 nrow = xdatacls.nrow ncol = xdatacls.ncol ## create column, row order xdata_1_inv = [xdata_1[1], xdata_1[0]] xdata_1_inv = mvm_prepare.sort_table(xdata_1_inv, idata=0) xranges_1_inv = mvm_prepare.mvm_ranges(xdata_1_inv, ncol, None) if itraintest != 1: xdata_2_inv = [xdata_2[1], xdata_2[0]] xdata_2_inv = mvm_prepare.sort_table(xdata_2_inv, idata=0) xranges_2_inv = mvm_prepare.mvm_ranges(xdata_2_inv, ncol, None) else: xdata_2_inv = xdata_1_inv xranges_2_inv = xranges_1_inv cxdata = cls_dataitem() npart = 3 cxdata.xdata_tra = [None] * npart cxdata.xdata_tes = [None] * npart for ilearner in range(nrow): (istart, nlength) = xranges_1[ilearner] nlength_1 = 0 for icol in range(nlength): inboro = xdata_1[1][istart + icol] nlength_1 += xranges_1_inv[inboro][1] cxdata.xdata_tra=[np.zeros(nlength_1,dtype=int), \ np.zeros(nlength_1,dtype=int), \ np.zeros((nlength_1,nval))] if itraintest != 1: (istart, nlength) = xranges_2[ilearner] nlength_2 = 0 for icol in range(nlength): inboro = xdata_2[1][istart + icol] nlength_2 += xranges_2_inv[inboro][1] cxdata.xdata_tes=[np.zeros(nlength_1,dtype=int), \ np.zeros(nlength_1,dtype=int), \ np.zeros((nlength_1,nval))] else: nlength_2 = nlength_1 for ilearner in range(nrow): (istart, nlength_tra) = xranges_1[ilearner] for icol in range(nlength_tra): inboro = xdata_1[1][istart + icol] (istartr, nlengthr) = xranges_1_inv[inboro] xilearners = xdata_1_inv[istartr, istartr:nlengthr] ipos = 0 for ilearnerc in xilearners: (istartc, nlengthc) = xranges_1[ilearnerc] for ipart in range(npart): cxdata.xdata_tra[ipart][ipos:ipos+nlengthc] \ =xdata_1[ipart][istartc,istartc+nlengthc] ipos += nlengthc if itraintest != 1: (istart, nlength_tes) = xranges_2[ilearner] for icol in range(nlength_tes): inboro = xdata_2[1][istart + icol] (istartr, nlengthr) = xranges_2_inv[inboro] xilearners = xdata_2_inv[istartr, istartr:nlengthr] ipos = 0 for ilearnerc in xilearners: (istartc, nlengthc) = xranges_2[ilearnerc] for ipart in range(npart): cxdata.xdata_tes[ipart][ipos:ipos+nlengthc] \ =xdata_2[ipart][istartc,istartc+nlengthc] ipos += nlengthc cxdata.nrow = nrow if itraintest == 1: cxdata.nncol = nlength_tra self.dkernel[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \ params_spec,norm_spec) else: cxdata.nncol = nlength_tes self.dkernel_test[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \ params_spec,norm_spec) return
def create_diag_kernel(self,xdatacls,params_spec,norm_spec,itraintest=1): xdata_1=xdatacls.xdata_tra nval=xdata_1[2].shape[1] xranges_1=xdatacls.xranges_rel if itraintest!=1: xdata_2=xdatacls.xdata_tes xranges_2=xdatacls.xranges_rel_test else: xdata_2=xdata_1 xranges_2=xranges_1 nrow=xdatacls.nrow ncol=xdatacls.ncol ## create column, row order xdata_1_inv=[xdata_1[1],xdata_1[0]] xdata_1_inv=mvm_prepare.sort_table(xdata_1_inv,idata=0) xranges_1_inv=mvm_prepare.mvm_ranges(xdata_1_inv,ncol,None) if itraintest!=1: xdata_2_inv=[xdata_2[1],xdata_2[0]] xdata_2_inv=mvm_prepare.sort_table(xdata_2_inv,idata=0) xranges_2_inv=mvm_prepare.mvm_ranges(xdata_2_inv,ncol,None) else: xdata_2_inv=xdata_1_inv xranges_2_inv=xranges_1_inv cxdata=cls_dataitem() npart=3 cxdata.xdata_tra=[None]*npart cxdata.xdata_tes=[None]*npart for ilearner in range(nrow): (istart,nlength)=xranges_1[ilearner] nlength_1=0 for icol in range(nlength): inboro=xdata_1[1][istart+icol] nlength_1+=xranges_1_inv[inboro][1] cxdata.xdata_tra=[np.zeros(nlength_1,dtype=int), \ np.zeros(nlength_1,dtype=int), \ np.zeros((nlength_1,nval))] if itraintest!=1: (istart,nlength)=xranges_2[ilearner] nlength_2=0 for icol in range(nlength): inboro=xdata_2[1][istart+icol] nlength_2+=xranges_2_inv[inboro][1] cxdata.xdata_tes=[np.zeros(nlength_1,dtype=int), \ np.zeros(nlength_1,dtype=int), \ np.zeros((nlength_1,nval))] else: nlength_2=nlength_1 for ilearner in range(nrow): (istart,nlength_tra)=xranges_1[ilearner] for icol in range(nlength_tra): inboro=xdata_1[1][istart+icol] (istartr,nlengthr)=xranges_1_inv[inboro] xilearners=xdata_1_inv[istartr,istartr:nlengthr] ipos=0 for ilearnerc in xilearners: (istartc,nlengthc)=xranges_1[ilearnerc] for ipart in range(npart): cxdata.xdata_tra[ipart][ipos:ipos+nlengthc] \ =xdata_1[ipart][istartc,istartc+nlengthc] ipos+=nlengthc if itraintest!=1: (istart,nlength_tes)=xranges_2[ilearner] for icol in range(nlength_tes): inboro=xdata_2[1][istart+icol] (istartr,nlengthr)=xranges_2_inv[inboro] xilearners=xdata_2_inv[istartr,istartr:nlengthr] ipos=0 for ilearnerc in xilearners: (istartc,nlengthc)=xranges_2[ilearnerc] for ipart in range(npart): cxdata.xdata_tes[ipart][ipos:ipos+nlengthc] \ =xdata_2[ipart][istartc,istartc+nlengthc] ipos+=nlengthc cxdata.nrow=nrow if itraintest==1: cxdata.nncol=nlength_tra self.dkernel[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \ params_spec,norm_spec) else: cxdata.nncol=nlength_tes self.dkernel_test[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \ params_spec,norm_spec) return
def load_twofiles(self, iknown1, iknown2, ifile1, ifile2): """ load collected known entities (object, action,feature) + the unknown object, action pairs without value into the relation table. !!! here we assume that all files contains the same set of object pairs. !!! it can be changed later!!! iknown1,ifile1 give the training iknown2,ifile2 give the test """ ## first phase collect object labels if iknown1 == 0: sfile1 = self.listfull[ifile1] else: sfile1 = self.listknown[ifile1] if iknown2 == 0: sfile2 = self.listfull[ifile2] else: sfile2 = self.listknown[ifile2] self.collect_objects(sfile1) self.collect_relations(sfile1, self.ddata_tra) self.collect_relations(sfile2, self.ddata_tes) ## second phase load the relation table of known examples xdata = [[], [], []] ## row index, column index , value ## ndata=self.nobject**2 idata = 0 ifixtrain = [] ifixtest = [] for iobject1, dobject2 in self.ddata_tra.items(): for iobject2, dvalues in dobject2.items(): for ifeature, svalue in dvalues.items(): if len(svalue) > 0: if self.irowcol == 0: xdata[0].append(iobject1) ## xdata[1].append(ifeature*self.nobject+iobject2) xdata[1].append(ifeature + self.nfeature * iobject2) xdata[2].append(float(svalue)) elif self.irowcol == 1: ## xdata[0].append(ifeature*self.nobject+iobject1) xdata[0].append(ifeature + self.nfeature * iobject1) xdata[1].append(iobject2) xdata[2].append(float(svalue)) ifixtrain.append(idata) idata += 1 else: svalue = self.ddata_tes[iobject1][iobject2][ifeature] if len(svalue) > 0: fvalue = float(svalue) else: fvalue = 0 if self.irowcol == 0: xdata[0].append(iobject1) ## xdata[1].append(ifeature*self.nobject+iobject2) xdata[1].append(ifeature + self.nfeature * iobject2) xdata[2].append(fvalue) elif self.irowcol == 1: ## xdata[0].append(ifeature*self.nobject+iobject1) xdata[0].append(ifeature + self.nfeature * iobject1) xdata[1].append(iobject2) xdata[2].append(fvalue) ifixtest.append(idata) idata += 1 if self.irowcol == 0: self.nrow = self.nobject self.ncol = self.nobject * self.nfeature elif self.irowcol == 1: self.nrow = self.nobject * self.nfeature self.ncol = self.nobject xdata = mvm_prepare.sort_table(xdata, ifloat=1) ifixtrain = np.array(ifixtrain) ifixtest = np.array(ifixtest) return (xdata, self.nrow, self.ncol, ifixtrain, ifixtest)