7 from data_about_players
import Data
9 from knn
import KNNOutputVectorGenerator
11 if __name__
== '__main__':
12 main_pat_filename
= Data
.main_pat_filename
15 player_vector
= Data
.questionare_total
16 players_ignore
= [ "Yi Ch'ang-ho 2004-" ]#, "Fujisawa Hideyuki","Yuki Satoshi", "Otake Hideo", "Yi Ch'ang-ho 2005+","Takao Shinji","Hane Naoki","Kobayashi Koichi" ]
17 players_all
= [ p
for p
in player_vector
.keys() if p
not in players_ignore
]
19 ### Object creating input vector when called
20 print "Creating input vector generator from main pat file:", main_pat_filename
22 i
= InputVectorGenerator(main_pat_filename
, num_features
)
24 # Create list of input vectors
26 for name
in players_all
:
27 input_vectors
+= [i(Data
.pat_files_folder
+ name
)]
29 #print '"%s"'%(players_all[2],)
30 #print input_vectors[2]
32 if len(input_vectors
) == 0:
33 print >>sys
.stderr
, "No reference vectors."
37 # Change this to False, if you do not want to use PCA
40 # Create PCA object, trained on input_vectors
41 print >>sys
.stderr
, "Running PCA."
42 pca
= PCA(input_vectors
, reduce=True)
43 # Perform a PCA on input vectors
44 input_vectors
= pca
.process_list_of_vectors(input_vectors
)
45 # Creates a Composed object that first generates an input vector
46 # and then performs a PCA analysis on it.
49 ### n/4-fold cross validation
50 #bounds = random.sample(range(1,len(players_all)), len(players_all) / 10 )
52 for x
in range(1,len(players_all
)/4):
53 bounds
+= [4*x
for _
in [1] if 4*x
< len(players_all
)]
55 print >>sys
.stderr
, "Pop too small."
62 sentinel
=len(players_all
)
64 for b
in bounds
+[sentinel
]:
65 validation_set
= range(prev
, b
)
66 reference_set
= range(0,prev
) + range(b
,sentinel
)
67 print "Reference set :",
68 for pr
in range(0, prev
):
70 for pr
in validation_set
:
72 for pr
in range(b
, sentinel
):
77 ### Object creating output vector when called;
79 for index
in reference_set
:
80 ref_dict
[tuple(input_vectors
[index
])] = r(player_vector
[players_all
[index
]])
82 #oknn = KNNOutputVectorGenerator(ref_dict, k=5, weight_param=0.799)
83 oknn
= KNNOutputVectorGenerator(ref_dict
, k
=4, weight_param
=0.8)
85 # Create list of output vectors using weighted kNN algorithm approximating output_vector
87 return list(10*numpy
.random
.random(k
))
88 output_vectors
= [ oknn(input_vectors
[index
]) for index
in validation_set
]
89 #output_vectors = [ r(rand_vect(4)) for index in validation_set ]
90 desired_vectors
= [ r(player_vector
[players_all
[index
]]) for index
in validation_set
]
92 for vec_set
,text
in [(output_vectors
, "Output: "), (desired_vectors
, "Desired:")]:
100 for o
,d
in zip(output_vectors
, desired_vectors
):
109 # print "%2.3f"%(e,),
113 print "Total square err: %2.3f"%( sum(errs
),)
114 mean
= numpy
.array(errs
).mean()
115 print "Mean square err per player: " + u
"%2.3f ( = sd \u00B1 %2.3f) "%(mean
, sqrt(mean
))
116 mean
= numpy
.array(es
).mean()
117 print "Mean square err per style: " + u
"%2.3f ( = sd \u00B1 %2.3f) "%(mean
, sqrt(mean
))
119 print "Players sorted by mean square error:"
120 p
= zip(errs
, players_all
)
123 print "%2.3f %s"%(err
,name
)