if FLAGS.svm: logging.info("Performing svm classification") solver = classifier.SolverMC( FLAGS.reg, classifier.Loss.loss_hinge, classifier.Reg.reg_l2, fminargs={"maxfun": 1000} ) w, b = solver.solve(Xtrain, classifier.to_one_of_k_coding(Ytrain, fill=-1)) pred = np.dot(Xtrain, w) + b accu_train = classifier.Evaluator.accuracy(Ytrain, pred) pred = np.dot(Xtest, w) + b accu_test = classifier.Evaluator.accuracy(Ytest, pred) logging.info("Reg %f, train accu %f, test accu %f" % (FLAGS.reg, accu_train, accu_test)) mpi.root_pickle((w, b, FLAGS.reg, accu_train, accu_test), __file__ + str(FLAGS.reg) + ".svm.pickle") if gflags.FLAGS.hier: logging.info("Performing hierarchical classification") utility = np.exp(birdtax.bird_info_gain()) utility /= utility.sum(axis=1)[:, np.newaxis] solver = classifier.SolverMC( FLAGS.reg, classifier.Loss.loss_multiclass_logistic, classifier.Reg.reg_l2, fminargs={"maxfun": 1000} ) w, b = solver.solve(Xtrain, np.ascontiguousarray(utility[Ytrain.astype(int)])) pred = np.dot(Xtrain, w) + b accu_train = classifier.Evaluator.accuracy(Ytrain, pred) pred = np.dot(Xtest, w) + b accu_test = classifier.Evaluator.accuracy(Ytest, pred) logging.info("Reg %f, train accu %f, test accu %f" % (FLAGS.reg, accu_train, accu_test)) mpi.root_pickle((w, b, FLAGS.reg, accu_train, accu_test), __file__ + str(FLAGS.reg) + ".hier.pickle") if gflags.FLAGS.hierlog: logging.info("Performing hierarchical classification") utility = birdtax.bird_info_gain()
classifier.Loss.loss_hinge, classifier.Reg.reg_l2, fminargs = {'maxfun': 1000}) w,b = solver.solve(Xtrain, classifier.to_one_of_k_coding(Ytrain, fill=-1)) pred = np.dot(Xtrain, w) + b accu_train = classifier.Evaluator.accuracy(Ytrain, pred) pred = np.dot(Xtest, w) + b accu_test = classifier.Evaluator.accuracy(Ytest, pred) logging.info("Reg %f, train accu %f, test accu %f" % \ (FLAGS.reg, accu_train, accu_test)) mpi.root_pickle((w, b, FLAGS.reg, accu_train, accu_test), __file__ + str(FLAGS.reg) + ".svm.pickle") if gflags.FLAGS.hier: logging.info("Performing hierarchical classification") utility = np.exp(birdtax.bird_info_gain()) utility /= utility.sum(axis=1)[:, np.newaxis] solver = classifier.SolverMC(FLAGS.reg, classifier.Loss.loss_multiclass_logistic, classifier.Reg.reg_l2, fminargs = {'maxfun': 1000}) w,b = solver.solve(Xtrain, np.ascontiguousarray(utility[Ytrain.astype(int)])) pred = np.dot(Xtrain, w) + b accu_train = classifier.Evaluator.accuracy(Ytrain, pred) pred = np.dot(Xtest, w) + b accu_test = classifier.Evaluator.accuracy(Ytest, pred) logging.info("Reg %f, train accu %f, test accu %f" % \ (FLAGS.reg, accu_train, accu_test)) mpi.root_pickle((w, b, FLAGS.reg, accu_train, accu_test), __file__ + str(FLAGS.reg) + ".hier.pickle")
######## # Settings ######## FEATDIR = "/u/vis/ttmp/jiayq/birds/" ######## # Main script ######## if mpi.SIZE > 1: raise RuntimeError, "This script runs on single machine only." Xtest = mpi.load_matrix_multi(os.path.join(FEATDIR,'Xtest')) Ytest = mpi.load_matrix_multi(os.path.join(FEATDIR,'Ytest')).astype(np.int) infogain = birdtax.bird_info_gain() info_mean = infogain.mean(axis=1) info_max = infogain.max(axis=1) randguess = sum([info_mean[y] for y in Ytest]) / float(len(Ytest)) bestguess = sum([info_max[y] for y in Ytest]) / float(len(Ytest)) print 'Random guess baseline:', randguess print 'Best guess baseline:', bestguess for filename in sys.argv[1:]: data = pickle.load(open(filename)) w, b = data[:2] accu_test = data[-1] pred = np.argmax(np.dot(Xtest, w) + b, axis=1)