def build_apprentissage(fn,generator): ex_raw = KeyboardStrategy.read(fn) exemples = [] labels = [] for x in ex_raw: exemples.append(generator(x[1],x[0][0],x[0][1])) labels.append(x[0][2]) return exemples,labels
def build_apprentissage(fn, generator): ex_raw = KeyboardStrategy.read(fn) exemples = [] labels = [] for x in ex_raw: exemples.append(generator(x[1], x[0][0], x[0][1])) labels.append(x[0][2]) return exemples, labels
long = 10 sep1="|"+"-"*(long-1) sepl="|"+" "*(long-1) sepr=" "*long def aux(node,sep): if tree.tree_.children_left[node]<0: ls ="(%s)" % (", ".join( "%s: %d" %(tree.classes_[i],int(x)) for i,x in enumerate(tree.tree_.value[node].flat))) return sep+sep1+"%s\n" % (ls,) return (sep+sep1+"X%d<=%0.2f\n"+"%s"+sep+sep1+"X%d>%0.2f\n"+"%s" )% \ (tree.tree_.feature[node],tree.tree_.threshold[node],aux(tree.tree_.children_left[node],sep+sepl), tree.tree_.feature[node],tree.tree_.threshold[node],aux(tree.tree_.children_right[node],sep+sepr)) return aux(0,"") exemples = KeyboardStrategy.read("./monfichier.exp") train,labels = build_apprentissage("./monfichier.exp",gen_features) tree = apprendre_arbre(train,labels) print(affiche_arbre(tree)) if __name__=="__main__": prefix = "./test" if len(sys.argv)>1: prefix = sys.argv[1] ## constitution de la base d'entrainement et des labels train,labels = build_apprentissage(prefix+".exp",gen_features) ## apprentissage de l'arbre
#gen_features.names = ["ball_dist","distance ball my goal","distance ball his goal","hisgoal_dist","mygoal_dist","dist adv le plus proche","nb adv autour"] def build_apprentissage(fn,generator): ex_raw = KeyboardStrategy.read(fn) exemples = [] labels = [] for x in ex_raw: exemples.append(generator(x[1],x[0][0],x[0][1])) labels.append(x[0][2]) return exemples,labels def apprendre_arbre(train,labels,depth=5,min_samples_leaf=2,min_samples_split=2): tree= DecisionTreeClassifier(max_depth=depth,min_samples_leaf=min_samples_leaf,min_samples_split=min_samples_split) tree.fit(train,labels) return tree ## Match d'entrainement et apprentissage de l'arbre if True: #match = SoccerMatch(team_noob,team_bad,1000) #show(match) ## Sauvegarde des exemples, mettre False a True si concatenation des fichiers #strat.write("test.tree",True) ## Lecture du fichier cree exemples = KeyboardStrategy.read("./training.exp") ## constitution de la base d'entrainement et des labels train,labels = build_apprentissage("./training.exp",gen_features) ## apprentissage de l'arbre tree = apprendre_arbre(train,labels) ## sauvegarde de l'arbre cPickle.dump(tree,file("tree.pkl","w"))
sepr = " " * long def aux(node, sep): if tree.tree_.children_left[node] < 0: ls = "(%s)" % (", ".join( "%s: %d" % (tree.classes_[i], int(x)) for i, x in enumerate(tree.tree_.value[node].flat))) return sep + sep1 + "%s\n" % (ls, ) return (sep+sep1+"X%d<=%0.2f\n"+"%s"+sep+sep1+"X%d>%0.2f\n"+"%s" )% \ (tree.tree_.feature[node],tree.tree_.threshold[node],aux(tree.tree_.children_left[node],sep+sepl), tree.tree_.feature[node],tree.tree_.threshold[node],aux(tree.tree_.children_right[node],sep+sepr)) return aux(0, "") exemples = KeyboardStrategy.read("./monfichier.exp") train, labels = build_apprentissage("./monfichier.exp", gen_features) tree = apprendre_arbre(train, labels) print(affiche_arbre(tree)) if __name__ == "__main__": prefix = "./test" if len(sys.argv) > 1: prefix = sys.argv[1] ## constitution de la base d'entrainement et des labels train, labels = build_apprentissage(prefix + ".exp", gen_features) ## apprentissage de l'arbre tree = apprendre_arbre(train, labels) ## sauvegarde de l'arbre cPickle.dump(tree, file(prefix + ".pkl", "w")) ## exporter l'arbre en .dot