def main(): # Takes in the file and parses into datum's. D = cData(sys.argv[1]) # Starting points from the pickle or not. EmAlg = parseCommandLine(D, sys.argv) prevCons = 0 totalcons = 0 nmiResult = evaluateEM_NMI(D, EmAlg) print "Initial nmi: ",nmiResult consobj = Cons.cCons(D) for numCons in range(1,len(D.data)/4,1): consobj.constype = Cons.cCons.eConsType.TripCenterChunk consobj.centerChunkSize = 0.2 cons = consobj.tripCons(EmAlg.mGammas,numCons-prevCons) prevCons = numCons totalcons += len(cons) for i in cons: EmAlg.mCij[i[0]][i[1]] = i[2] EmAlg.mCij[i[1]][i[0]] = i[2] EmAlg.EM(len(D.classlist)) nmiresult = evaluateEM_NMI(D, EmAlg) print numCons, ",", nmiresult, ",", totalcons if(nmiresult > 0.999 or len(D.data)==numCons): break
from EM import * from cData import * if len(sys.argv) > 3: print("Error - usage is " + sys.argv[0] + " <data_file>") sys.exit(1) m = cData(sys.argv[1]) if len(sys.argv) == 2: m.poscons = [(i,j) for i in range(len(m.data)) for j in range(len(m.data))] else: m.parseConstraints(sys.argv[2]) iteration = m.emRestarts(10) iteration.bPPC = True prevCons = 0 for numCons in [0,25,50,100,200,500,1000,2000,5000,10000]: #for numCons in range(0,len(m.poscons)): cons=m.makeConst(numCons-prevCons) prevCons = numCons for i in cons: iteration.mCij[i[0]][i[1]] = i[2] iteration.mCij[i[1]][i[0]] = i[2] nmiresult = m.evaluateEM(iteration) print numCons, ",", nmiresult if(nmiresult == 1): break