for batchIndex in xrange(nfolds): print('\t\t Batch %d ...' % (batchIndex)) # Initial parameters random.seed(25) b0, a0 = set_initial(c, data.dxm + 1, data.dxr + 1) param0 = mapOptimizationMatrices2Vector(b0, a0) validateIds = np.arange(batchIndex * batchSize, (batchIndex + 1) * batchSize) trainIds = list(set(np.arange(trainAndValidateXm.shape[0])) - set(validateIds)) res = mixedLogistic_EMtrain(param0=param0, c=c, y=np.matrix(trainAndValidateY[trainIds]).T, xm=trainAndValidateXm[trainIds, :], xr=trainAndValidateXr[trainIds, :], m=1) pred = mixedLogistic_pred(res=res, xmt=trainAndValidateXm[validateIds, :], xrt=trainAndValidateXr[validateIds, :], c=c, yt=np.matrix(trainAndValidateY[validateIds]).T) validateScores.append(pred['f1']) print('\t\twith validation score (F1) = %f' % (pred['f1'])) avgValidateScores.append(np.mean(validateScores)) print('\tAverage validation score = %f for c = %d' % (np.mean(validateScores), c)) c_optim = c_candidates[np.array(avgValidateScores).argmax()] print('Optimal c = %d' % (c_optim))
# Initialize parameters b0, a0 = set_initial(c, data.dxm + 1, data.dxr + 1) param0 = mapOptimizationMatrices2Vector(b0, a0) # nParams = (data.dxm + 1) * (c - 1) + (data.dxr + 1) * c # param0 = np.zeros(nParams) # param0 = np.ones(nParams) # res = mixedLogistic_EMtrain(param0=param0, c=c, # y=np.matrix(data.y).T, # xm=data.xm, # xr=data.xr, # m=1) res = mixedLogistic_EMtrain_separate(param0=param0, c=c, y=np.matrix(data.y).T, xm=data.xm, xr=data.xr, m=1) # === Check parameters === beta_est, alpha_est = mapOptimizationVector2Matrices(res['param'], 2, 3) beta_est alpha_est data.beta data.alpha # === Predict === pred = mixedLogistic_pred(res, data.xm, data.xr, c, data.y)