def predict(self,xt,tau=None,confidenceMap=None):
'''
Function that predict the label for sample xt using the learned model
Inputs:
xt: the samples to be classified
Outputs:
y: the class
K: the decision value for each class
'''
MAX = sp.finfo(sp.float64).max
E_MAX = sp.log(MAX) # Maximum value that is possible to compute with sp.exp
## Get information from the data
nt = xt.shape[0] # Number of testing samples
C = self.ni.shape[0] # Number of classes
## Initialization
K = sp.empty((nt,C))
if tau is None:
TAU=self.tau
else:
TAU=tau
for c in range(C):
invCov,logdet = self.compute_inverse_logdet(c,TAU)
cst = logdet - 2*sp.log(self.prop[c]) # Pre compute the constant
xtc = xt-self.mean[c,:]
temp = sp.dot(invCov,xtc.T).T
K[:,c] = sp.sum(xtc*temp,axis=1)+cst
del temp,xtc
yp = sp.argmin(K,1)
if confidenceMap is None:
## Assign the label save in classnum to the minimum value of K
yp = self.classnum[yp]
return yp
else:
K *= -0.5
K[K>E_MAX],K[K<-E_MAX] = E_MAX,-E_MAX
sp.exp(K,out=K)
K /= K.sum(axis=1).reshape(nt,1)
K = K[sp.arange(len(K)),yp]
#K = sp.diag(K[:,yp])
yp = self.classnum[yp]
return yp,K
评论列表
文章目录