9 from data_about_players
import Data
11 if __name__
== '__main__':
12 main_pat_filename
= Data
.main_pat_filename
16 This script is used for Style classification
26 player_vector
= Data
.questionare_total
27 # players_ignore = [ "Yi Ch'ang-ho 2004-" ]#, "Fujisawa Hideyuki","Yuki Satoshi", "Otake Hideo", "Yi Ch'ang-ho 2005+","Takao Shinji","Hane Naoki","Kobayashi Koichi" ]
28 players_ignore
= [ "Yi Ch'ang-ho 2004-", "Yi Ch'ang-ho 2005+" ]#,"Takao Shinji","Hane Naoki","Kobayashi Koichi" ]
29 players_all
= [ p
for p
in player_vector
.keys() if p
not in players_ignore
]
31 ### Object creating input vector when called
32 print "Creating input vector generator from main pat file:", main_pat_filename
33 i
= InputVectorGenerator(main_pat_filename
, num_features
)
35 # Create list of input vectors
37 for name
in players_all
:
38 input_vectors
+= [i(Data
.pat_files_folder
+ name
)]
40 #print '"%s"'%(players_all[2],)
41 #print input_vectors[2]
43 if len(input_vectors
) == 0:
44 print >>sys
.stderr
, "No reference vectors."
48 # Change this to False, if you do not want to use PCA
51 # Create PCA object, trained on input_vectors
52 print >>sys
.stderr
, "Running PCA."
53 pca
= PCA(input_vectors
, reduce=True)
54 # Perform a PCA on input vectors
55 input_vectors
= pca
.process_list_of_vectors(input_vectors
)
56 # Creates a Composed object that first generates an input vector
57 # and then performs a PCA analysis on it.
60 ### n/4-fold cross validation
61 #bounds = random.sample(range(1,len(players_all)), len(players_all) / 10 )
63 for x
in range(1,len(players_all
)/4):
64 bounds
+= [4*x
for _
in [1] if 4*x
< len(players_all
)]
66 print >>sys
.stderr
, "Pop too small."
71 return [ (x
- 1) / 4.5 - 1.0 for x
in vec
]
73 return [ (x
+ 1) * 4.5 + 1.0 for x
in vec
]
76 return list(2.0*numpy
.random
.random(k
)-1.0)
78 print >>sys
.stderr
, "Running Cross-validation."
80 errs
=[ [] for _
in xrange(len(players_all
)) ]
83 sentinel
=len(players_all
)
85 for _
in xrange(number_runs
):
86 pairs
= zip(players_all
, input_vectors
)
88 players_all
= [ a
for a
, b
in pairs
]
89 input_vectors
= [ b
for a
, b
in pairs
]
91 for b
in bounds
+[sentinel
]:
92 validation_set
= range(prev
, b
)
93 reference_set
= range(0,prev
) + range(b
,sentinel
)
95 print "Reference set :",
96 for pr
in range(0, prev
):
98 for pr
in validation_set
:
100 for pr
in range(b
, sentinel
):
106 for index
in reference_set
:
107 data
.append( (input_vectors
[index
], norm(player_vector
[players_all
[index
]])) )
110 ### We can enlarge the data set by adding linear combinations of input and output vectors
111 use_lin_combinations
= False
112 if use_lin_combinations
:
113 data
+= Combinator().combine(data
)
115 print_set_to_file(data
,'nn_cross.data')
117 nn
= NeuralNet('nn_cross.data')
118 # Create list of output vectors using weighted kNN algorithm approximating output_vector
119 output_vectors
= [ nn(input_vectors
[index
]) for index
in validation_set
]
122 ### Object creating output vector when called;
124 for index
in reference_set
:
125 ref_dict
[tuple(input_vectors
[index
])] = norm(player_vector
[players_all
[index
]])
128 # best pro InputVectorGenerator rescale=Rescale
129 oknn
= KNNOutputVectorGenerator(ref_dict
, k
=3, weight_param
=0.8)
131 # Create list of output vectors using weighted kNN algorithm approximating output_vector
132 output_vectors
= [ oknn(input_vectors
[index
]) for index
in validation_set
]
133 elif typ
== 'joint_nn_knn':
136 for index
in reference_set
:
137 data
.append( (input_vectors
[index
], norm(player_vector
[players_all
[index
]])) )
138 ref_dict
[tuple(input_vectors
[index
])] = norm(player_vector
[players_all
[index
]])
140 print_set_to_file(data
,'nn_cross.data')
141 nn
= NeuralNet('nn_cross.data')
142 # Create list of output vectors using weighted kNN algorithm approximating output_vector
143 ov_3
= [ nn(input_vectors
[index
]) for index
in validation_set
]
147 oknn
= KNNOutputVectorGenerator(ref_dict
, k
=3, weight_param
=0.8)
148 ov_1
= [ oknn(input_vectors
[index
]) for index
in validation_set
]
150 oknn
= KNNOutputVectorGenerator(ref_dict
, k
=1, weight_param
=0.8)
151 ov_2
= [ oknn(input_vectors
[index
]) for index
in validation_set
]
153 oknn
= KNNOutputVectorGenerator(ref_dict
, k
=1, weight_param
=0.8)
154 ov_4
= [ oknn(input_vectors
[index
]) for index
in validation_set
]
156 output_vectors
= [ [a
[0],b
[1],c
[2],d
[3]] for a
,b
,c
,d
in zip(ov_1
, ov_2
, ov_3
, ov_4
)]
158 output_vectors
= [ rand_vect(4) for index
in validation_set
]
160 output_vectors
= [ revnorm(x
) for x
in output_vectors
]
161 desired_vectors
= [ player_vector
[players_all
[index
]] for index
in validation_set
]
162 #desired_vectors = [ norm(player_vector[players_all[index]]) for index in validation_set ]
165 for vec_set
,text
in [(output_vectors
, "Output: "), (desired_vectors
, "Desired:")]:
173 for num1
, (o
,d
) in zip(validation_set
, zip(output_vectors
, desired_vectors
)):
175 for num
,(x
,y
) in enumerate(zip(o
,d
)):
182 if typ
== 'joint_nn_knn':
183 print "Joint classifier:"
185 print "k-NN classifier:"
187 print "Neural network classifier:"
189 print "Random classifier:"
190 #print "Total square err: %2.3f"%( sum(errs) / number_runs,)
191 mar
= numpy
.array(errs
)
193 print "Mean square err per player: " + "%2.3f ( = sd %2.3f) "%(mean
, sqrt(mean
))
194 mean
= numpy
.array(es
).mean()
195 print "Mean square err per style: " + "%2.3f ( = sd %2.3f) "%(mean
, sqrt(mean
))
196 for num
, style
in enumerate(esps
):
197 mean
= numpy
.array(style
).mean()
198 print "Style %1d : %2.3f ( = sd %2.3f)"%(num
+1, mean
, sqrt(mean
))
199 #print "%2.3f &"%(mean,),
201 #mean = numpy.array(es).mean()
202 #print "%2.3f &"%(mean),
203 #print "%2.3f \\\\\\hline"%(11.776 / mean)
206 #print "Players sorted by mean square error:"
207 #p = zip([numpy.array(errs[p]).mean() for p in xrange(len(players_all)) ], players_all)
210 # print "%2.3f %s"%(err,name)
211 # #print "%s"%(name,)