import xgboost as xgb import codecs import os import sys import getopt
defmain(argv): modelfile = "" featureconf = ""
try: opts, args = getopt.getopt(argv, "hm:f:", ["modelfile=", "featureconf="]) except getopt.GetoptError: print 'plotTree.py -m <modelfile> -f <featureconf> ' for opt, arg in opts: if opt == '-h': print 'plotTree.py -m <modelfile> -f <featureconf>' sys.exit() elif opt in ("-m", "--modelfile"): modelfile = arg elif opt in ("-f", "--featureconf"): featureconf = arg
fmap = {} if os.path.exists(modelfile): if os.path.exists(featureconf): if os.path.exists("./featuremap.txt"): os.remove("./featuremap.txt") filemap = open("./featuremap.txt", "wb") filemap.write(("0 null q" + '\n').encode())
for line inopen(featureconf, "rb"): # print(line) content = line.decode().strip('\n').split('\t') # print(content) iflen(content) >= 3: fmap[content[1]] = content[2] temp = (content[1] + " " + content[2] + " " + "q" + '\n').encode() filemap.write(temp) filemap.close() xgb_model = xgb.Booster() xgb_model.load_model(modelfile) score = xgb_model.get_fscore() importance = {} for key, value in score.items(): temp = key[1:None] if temp in fmap: importance[fmap[temp]] = int(value) else: importance[key] = int(value) sort_importance = sorted(importance.items(), key=lambda importance: importance[1])
for values in sort_importance[::-1]: print(values) tree = xgb_model.get_dump() i = 0 while i < len(tree): f = codecs.open(modelfile + "_" + str(i)+'.png', mode='wb') g = xgb.to_graphviz(xgb_model, './featuremap.txt', i) f.write(g.pipe('png')) f.close() i = i+1 print("success!")