7 from data_about_players
import Data
9 from knn
import KNNOutputVectorGenerator
11 if __name__
== '__main__':
12 main_pat_filename
= Data
.main_pat_filename
13 filename_play_other
= 'knn_other.data'
14 filename_play_ref
= 'knn_ref.data'
15 filename_play_ref_orig
= 'knn_ref_orig.data'
18 player_vector
= Data
.questionare_total
19 players_ignore
= [ "Yi Ch'ang-ho 2004-" ]#, "Fujisawa Hideyuki","Yuki Satoshi", "Otake Hideo", "Yi Ch'ang-ho 2005+","Takao Shinji","Hane Naoki","Kobayashi Koichi" ]
20 players_all
= [ p
for p
in player_vector
.keys() if p
not in players_ignore
]
22 ### Object creating input vector when called
23 print "Creating input vector generator from main pat file:", main_pat_filename
25 i
= InputVectorGenerator(main_pat_filename
, num_features
)
27 # Create list of input vectors
29 for name
in players_all
:
30 input_vectors
+= [i(Data
.pat_files_folder
+ name
)]
32 #print '"%s"'%(players_all[2],)
33 #print input_vectors[2]
35 if len(input_vectors
) == 0:
36 print >>sys
.stderr
, "No reference vectors."
40 # Change this to False, if you do not want to use PCA
43 # Create PCA object, trained on input_vectors
44 print >>sys
.stderr
, "Running PCA."
45 pca
= PCA(input_vectors
, reduce=True)
46 # Perform a PCA on input vectors
47 input_vectors
= pca
.process_list_of_vectors(input_vectors
)
48 # Creates a Composed object that first generates an input vector
49 # and then performs a PCA analysis on it.
52 ### n/4-fold cross validation
53 #bounds = random.sample(range(1,len(players_all)), len(players_all) / 10 )
55 for x
in range(1,len(players_all
)/4):
56 bounds
+= [4*x
for _
in [1] if 4*x
< len(players_all
)]
58 print >>sys
.stderr
, "Pop too small."
63 sentinel
=len(players_all
)
65 for b
in bounds
+[sentinel
]:
66 validation_set
= range(prev
, b
)
67 reference_set
= range(0,prev
) + range(b
,sentinel
)
68 print "Reference set :",
69 for pr
in range(0, prev
):
71 for pr
in validation_set
:
73 for pr
in range(b
, sentinel
):
78 ### Object creating output vector when called;
80 for index
in reference_set
:
81 ref_dict
[tuple(input_vectors
[index
])] = player_vector
[players_all
[index
]]
83 oknn
= KNNOutputVectorGenerator(ref_dict
, k
=5, weight_param
=0.799)
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 = [ rand_vect(4) for index in validation_set ]
90 desired_vectors
= [ 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
):
103 err
+= (1.0*x
-1.0*y
)**2
107 # print "%2.3f"%(e,),
111 print "Total square err: %2.3f"%( sum(errs
),)
112 print "Mean square err: " + u
"%2.3f \u00B1 %2.3f "%(numpy
.array(errs
).mean(),sqrt(numpy
.array(errs
).var()))
114 print "Players sorted by mean square error:"
115 p
= zip(errs
, players_all
)
118 print "%2.3f %s"%(err
,name
)