ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ (Τ. & Τ.Π.) ΕΡΓΑΣΤΗΡΙΟ ΕΝΣΥΡΜΑΤΟΥ ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΣ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών ΘΑΝΟΥ ΑΝΑΣΤΑΣΙΟΥ ΤΟΥ ΔΗΜΗΤΡΙΟΥ Αριθμός Μητρώου: 6511 «Συμπίεση βάσης δεδομένων σκακιστικών φινάλε με μεθόδους data mining» Επιβλέπων: Σγάρμπας Κυριάκος, Επίκουρος καθηγητής Αριθμός Διπλωματικής Εργασίας: Πάτρα Νοέμβριος 2012
ΠΙΣΤΟΠΟΙΗΣΗ Πιστοποιείται ότι η Διπλωματική Εργασία με θέμα «Συμπίεση βάσης δεδομένων σκακιστικών φινάλε με μεθόδους data mining» του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών ΘΑΝΟΥ ΑΝΑΣΤΑΣΙΟΥ ΤΟΥ ΔΗΜΗΤΡΙΟΥ Αριθμός Μητρώου: 6511 παρουσιάστηκε δημόσια και εξετάστηκε στο Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών στις /11/2012 Ο Επιβλέπων Ο Διευθυντής του τομέα Κ. Σγάρμπας Επ. καθηγητής Φακωτάκης Νικόλαος Καθηγητής 2
ΤΙΤΛΟΣ: ΣΥΜΠΙΕΣΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ ΣΚΑΚΙΣΤΙΚΩΝ ΦΙΝΑΛΕ ΜΕ ΧΡΗΣΗ ΜΕΘΟΔΩΝ DATA MINING ΣΥΓΓΡΑΦΕΑΣ: ΘΑΝΟΥ Δ. ΑΝΑΣΤΑΣΙΟΣ (Α.Μ. 6511) Περίληψη Η συγκεκριμένη διπλωματική εργασία διαπραγματεύεται τη συμπίεση των βάσεων του Nalimov με μεθόδους data mining. Είναι βάσεις σκακιστικών φινάλε, οι οποίες παρέχουν πληροφορίες, ανάλογα με την τοποθέτηση των κομματιών για το ποιος νικάει κάθε φορά σε ένα φινάλε τριών ή περισσοτέρων κομματιών συμπεριλαμβανομένων και των δύο βασιλιάδων. Η προσπάθεια γίνεται με το έτοιμο πρόγραμμα Weka, το οποίο διατίθεται δωρεάν στο internet και προσφέρεται για εφαρμογές του data mining. Η συμπίεση προσφέρει ευελιξία στην αποθήκευση, ίσως και κατανόηση από τον άνθρωπο, όπως πάντα γίνεται στο data mining. Αρχικά, μελετήθηκε το φινάλε με βασιλιά και ένα πιόνι εναντίον του μαύρου βασιλιά. Έγινε μελέτη από διάφορες πλευρές και με διαφορετικά χαρακτηριστικά (attributes) που ορίζονται από το χρήστη και αποσκοπούν στην καλή εκπαίδευση ενός ταξινομητή, ο οποίος λέει ποιος νικάει ή αν έχουμε ισοπαλία. Ενδιαφέρουσα ήταν και η προσπάθεια για αύξηση της απόδοσης ώστε να πλησιάσει κατά το δυνατόν το 100% στο συγκεκριμένο φινάλε, άλλοτε με ανάθεση μεγαλύτερης προσπάθειας στον υπολογιστή και άλλοτε καθαρά από τον ανθρώπινο παράγοντα, με διόρθωση λαθών και επανεπισκόπηση των χαρακτηριστικών για τη δημιουργία καταλληλοτέρων δεδομένων. Ακολούθως, μελετήθηκαν τα φινάλε με βασίλισσα ή πύργο αντί για πιόνι και γίνονταν σχόλια σε καίρια σημεία. Τέλος, η μελέτη επεκτάθηκε και σε φινάλε τεσσάρων κομματιών, όπου είχαμε την ευκαιρία να δούμε τα φινάλε KBBK και KRKN, τα οποία παρουσιάζουν ενδιαφέρον, καθώς αυξάνονται οι υπολογιστικές απαιτήσεις. Abstract This diploma dissertation deals with the compression of the Nalimov bases using methods of data mining. They are chess endgame databases, which provide information, depending on the placement of the men, about who wins in an endgame of three or more pieces, including the two kings. The work was made by means of the open-software program Weka, which is available free on the internet and is ideal for applications of data mining. This compression aims to provide flexibility in storage and perhaps understanding by the users, as is always the case in data mining. At first, the endgame with one king and a pawn vs the black king was studied. A study was done from different perspectives and with quite different characteristics (attributes), which are specified by the user and designed in order that a good classifier should be trained, a classifier that should finally say who wins or if it is a tie. Also, something interesting that was done was an attempt to increase efficiency to close as possible to 100% in this endgame, sometimes shifting the whole work to the computer and sometimes mainly by the human factor. Of course, the latter was managed by correcting errors and reconsidering the attributes for creating the most appropriate data possible. Then, we studied the endgames with a queen and then, with a rook instead of a pawn, with comments made at key points. Finally, the study was expanded to endgames with four men, where we had the opportunity to see the endgames KBBK and KRKN, which are interesting as the computational requirements increase. 3
ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧOΜΕΝΑ... 4 ΚΕΦΑΛΑΙΟ 1... 6 ΕΙΣΑΓΩΓΗ... 6 ΚΕΦΑΛΑΙΟ 2... 8 ΓΕΝΙΚΕΣ ΓΝΩΣΕΙΣ-ΠΡΟΕΡΓΑΣΙΑ... 8 2.1 Φινάλε-Βάσεις Δεδομένων... 8 2.2 Η προεργασία και αρχή της διπλωματικής... 9 2.3 Το λογισμικό της διπλωματικής και στοιχεία χρήσης του... 10 ΚΕΦΑΛΑΙΟ 3... 12 Η ΕΦΑΡΜΟΓΗ... 12 Το Φινάλε KPK white to move... 12 3.1 Φινάλε KPK white to move... 12 3.1.1 Προσέγγιση πρώτη... 12 3.1.2 Το φινάλε KPK wtm με «σκακιστικά» και «πρωτογενή» χαρακτηριστικά... 19 3.1.3 Βελτιώσεις... 21 3.1.4 Αποτέλεσμα-προεκτάσεις των πρωτογενών attributes... 22 3.1.5 Προσθήκη πληροφορίας για τη απόλυτη θέση των κομματιών... 24 3.1.6 Σχόλιο για τα γεωμετρικά attributes... 26 3.2 Βελτιώσεις στο αρχικό τρέξιμο με την πρώτη προσέγγιση... 33 Προσπάθεια για το τέλειο... 33 ΚΕΦΑΛΑΙΟ 4... 55 ΤΑ ΦΙΝΑΛΕ KPK BTM, KQK ΚΑΙ KRK... 55 4.1 To Φιναλε KPK black to move... 55 4.2 Φινάλε KQK... 57 4.3 Φινάλε KRK... 58 ΚΕΦΑΛΑΙΟ 5... 60 ΦΙΝΑΛΕ ΤΕΣΣΑΡΩΝ ΚΟΜΜΑΤΙΩΝ... 60 5.1 Φινάλε KBBK... 60 5.1.1 Το φινάλε KBBK white to move... 61 5.1.2 Black to move... 65 5.1.3 Βελτιώσεις... 68 5.1.4 Άλλη προσέγγιση... 71 5.1.4.1 για το φινάλε KBBK white to move... 71 5.1.4.2 για το φινάλε KBBK black to move... 75 5.2 Φινάλε KRKN... 77 5.2.1 Το φινάλε KRKN white to move... 77 4
5.2.2 Το φινάλε KRKN black to move και με τα ίδια attributes... 79 ΚΕΦΑΛΑΙΟ 6... 80 ΘEΜΑΤΑ AΛΛΩΝ ΑΛΓΟΡIΘΜΩΝ ΚΑΙ ΠΑΡΑΔΕΙΓΜAΤΩΝ... 80 6.1 Άλλοι αλγόριθμοι... 80 6.2 Διακριτοποίηση (ταχύτητα, ακρίβεια χειρότερη)... 88 6.3 Φίλτρα στην προεπεξεργασία των δεδομένων για τη δημιουργία μη γραμμικών χαρακτηριστικών... 89 6.4 Η επιρροή του Attribute Selection tab στην ταχύτητα και στα αποτελέσματα... 98 ΚΕΦΑΛΑΙΟ 7... 101 ΣΥΜΠΕΡAΣΜΑΤΑ... 101 7.1 Συμπεράσματα-Σχόλια... 101 7.2 Συνοπτική παρουσίαση αποτελεσμάτων... 102 7.2.1 Φινάλε τριών κομματιών... 102 7.2.2 Φινάλε τεσσάρων κομματιών... 104 ΚΕΦΑΛΑΙΟ 8... 106 ΣΥΝEΧΕΙΑ-ΜΕΛΛΟΝΤΙΚEΣ ΒΕΛΤΙΩΣΕΙΣ... 106 Βιβλιογραφία... 108 Παράρτημα Α... 109 Παραρτημα Β... 111 5
ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Η παρούσα διπλωματική εργασία ασχολείται με το θέμα των σκακιστικών φινάλε, αλλά με σκοπό τη μελέτη τους με μεθόδους data mining. Το θέμα είναι πολύ σημαντικό. Κατ αρχάς, το data mining είναι η διαδικασία εξόρυξης χρήσιμης πληροφορίας από μεγάλο όγκο δεδομένων. Αυτή τη διαδικασία εκτελεί αυτοματοποιημένα ο υπολογιστής, μέσα από ειδικό λογισμικό. Στην περίπτωσή μας, τα δεδομένα παρέχονται στις βάσεις δεδομένων του Nalimov. Οι βάσεις αυτές περιλαμβάνουν την πληροφορία του ποιος νικάει και σε πόσες κινήσεις σε κάθε περίπτωση ενός φινάλε. Σκοπός είναι να μελετηθούν αυτές όσο είναι δυνατόν και να εξαχθούν χρήσιμα συμπεράσματα. Το θέμα έχει ενδιαφέρον και έχει προσελκύσει πολλούς ερευνητές. Το ίδιο το data mining έχει μια σχετικά πρόσφατη ιστορία [13]. Εμφανίστηκε πριν 30 έως 40 χρόνια, αλλά δεν ονομαζόταν από την αρχή έτσι. Ουσιαστικά ξεκίνησε ως στατιστική ανάλυση, όταν προωθήθηκε από τις εταιρίες SAS και SPSS. Καθώς προχώρησε η δεκαετία του 80, η αύξηση της ισχύος των υπολογιστών έδωσε τη δυνατότητα για αναλύσεις πιο ισχυρές, αλλά και σε μεγαλύτερους όγκους δεδομένων. Η ρίζες αυτού του νέου κλάδου της επιστήμης βρίσκονται: Πρώτον, στην επιστήμη της στατιστικής. Δεύτερον, στην τεχνητή νοημοσύνη που χρησιμοποιεί επεξεργασία που μοιάζει με τη σκέψη του ανθρώπου (human-thought-like processing) και στον κλάδο που ονομάζεται machine learning, όπου ο υπολογιστής μαθαίνει κατά κάποιον τρόπο μέσω δεδομένων με τα οποία τον τροφοδοτούμε (νευρωνικά δίκτυα, αναγνώριση προτύπων). Σήμερα, το data mining βρίσκει εφαρμογή σε πολυπίκοιλα πεδία, όπως στον χρηματοπιστωτικό κλάδο (financial industry), στις τράπεζες, στις επιχειρήσεις, στον εμπορικό κλάδο, στις τηλεπικοινωνίες, σε θέματα ασφαλείας και ανίχνευση εισβολών [4] (intrusion detection), στα σπορ και τη διασκέδαση, στην αστρονομία. Τελικά, θα μπορούσε κανείς να ισχυριστεί ότι ο κλάδος του data mining, όπως ορίζεται σήμερα έχει μια ιστορία δέκα έως δεκαπέντε χρόνων. Από την άλλη πλευρά, η ίδια η μελέτη των σκακιστικών φινάλε ανοίγει νέους δρόμους στη σκακιστική θεωρία. Πολλή δουλειά έχει γίνει, ακόμα και βιβλία έχουν γραφτεί, ως αποτέλεσμα αυτής της δουλειάς. Η αξία του θέματος έγκειται και στη μεγάλη διευκόλυνση που συνεπάγεται η κατανόηση και απλούστευση των φινάλε. Τα ίδια τα αρχεία που αναφέρουν όλες τις περιπτώσεις, σαν τηλεφωνικοί κατάλογοι, είναι πολύ μεγάλα. Αν λοιπόν μπορέσει κάποιος να τα αντικαταστήσει με ένα σχήμα, ένα δέντρο που να περιγράφει κάπως τις δυνατές μορφές του φινάλε και να αποφαίνεται ως προς το τελικό αποτέλεσμα του παιχνιδιού, τότε θα κερδίσουμε και χώρο στον υπολογιστή, αλλά ίσως και μια καλύτερη κατανόηση του ίδιου του παιχνιδιού. Αυτό κλήθηκα να κάνω στην παρούσα διπλωματική, όπου ο κύριος σκοπός είναι μια απλή συμπίεση των αρχείων. Οι δυσκολίες του εγχειρήματος είναι αρκετές. Κατ αρχάς, να μπορέσει κανείς να χειριστεί σωστά τη βάση, ώστε να εξαγάγει τα δεδομένα της. Αυτό μου πήρε πολύ καιρό προσπάθειας, διότι στη βάση δεδομένων του Nalimov όλες οι πληροφορίες είναι κωδικοποιημένες. Στη βάση αυτή, περιέχεται ένας αριθμός αρχείων, τα οποία, δυστυχώς, δεν μπορούσα να ανοίξω για να τα διαβάσω σαν ένα κατανοητό κείμενο. Με μια βιβλιοθήκη, όμως, που υπάρχει στο διαδίκτυο, μπόρεσα να αποκτήσω πρόσβαση και να παίρνω όποιο αποτέλεσμα φινάλε ήθελα. Μετά, έπρεπε να φτιαχτεί ένα αρχείο με τα δεδομένα για την εκτέλεση του data mining. Είχα δει πολλά παραδείγματα διαβάζοντας για το data mining, όπου τα δεδομένα είναι γνωστά και «σερβίρονται» έτοιμα, π.χ. από μια έρευνα πολλών καταναλωτών. Στην παρούσα διπλωματική, έπρεπε εγώ να βρω δεδομένα, πράγμα το οποίο ήταν και το πιο ενδιαφέρον στοιχείο της. Έπρεπε να δημιουργήσω ένα αρχείο δεδομένων για το κάθε φινάλε και να προχωρήσω στην εξόρυξη δεδομένων. Για να καταστεί αυτό πιο 6
σαφές, εγώ ήξερα εκ προοιμίου, χάρη στη βάση του Nalimov, μόνο και μόνο το ποιος νικάει και με ποια τοποθέτηση κομματιών. Στη συνέχεια, έπρεπε να δημιουργήσω δεδομένα, απλώς παρατηρώντας τη σκακιέρα. Τα δεδομένα αυτά, είναι απολύτως απαραίτητα για να εκφράσουν με κάποιον συστηματικό, μαθηματικοποιημένο τρόπο την ταυτότητα, την ιδιαιτερότητα, τα χαρακτηριστικά γνωρίσματα της εκάστοτε θέσης στη σκακιέρα. Έπρεπε, τέλος, και τα ίδια αυτά τα αρχεία να τα μετατρέψω σε μορφή κατάλληλη για να τα εισαγάγω στο ειδικό λογισμικό που εκτελεί το data mining. Αργότερα, κλήθηκα να βελτιώσω ξανά και ξανά το αποτέλεσμα του προγράμματος, ώστε τα συμπεράσματα να είναι όσο το δυνατόν πιο ακριβή ή ισοδυνάμως, να αποτυπώνουν μια λογική που να μπορεί να ταξινομήσει ικανοποιητικά και νέα παραδείγματα (εκπαίδευση ενός καλού ταξινομητή). Αυτή η διαδικασία, πραγματικά, μου πήρε πολύ καιρό, καθώς απαιτούσε επανειλημμένες παρατηρήσεις διαφόρων θέσεων στη σκακιέρα, επισκόπηση των χαρακτηριστικών που έπαιρνα από κάθε σκακιστική εικόνα, ίσως και αναθεώρηση κάποιων από αυτών και πολλαπλές βελτιώσεις αυτών των χαρακτηριστικών. Είχα, δηλαδή, να εκτελέσω ένα έργο στο data mining, στο οποίο έπρεπε να εφαρμόζω τους αλγορίθμους εξόρυξης δεδομένων δημιουργώντας εγώ τα δεδομένα που κατά τη γνώμη μου θα μπορούσαν καλύτερα να περιγράψουν τα φινάλε. Όσο καλύτερα ήταν αυτά τα δεδομένα, τόσο ακριβέστερη περιγραφή θα έπρεπε να περιμένω και καλύτερα αποτελέσματα από τους αλγορίθμους του λογισμικού εξόρυξης δεδομένων. 7
ΚΕΦΑΛΑΙΟ 2 ΓΕΝΙΚΕΣ ΓΝΩΣΕΙΣ-ΠΡΟΕΡΓΑΣΙΑ 2.1 ΦΙΝΑΛΕ-ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Στα φινάλε τριών κομματιών, διακρίνουμε τα φινάλε όπου έχουμε δύο βασιλιάδες και ένα πιόνι για τον λευκό, στο φινάλε που ο λευκός έχει μια βασίλισσα ή έναν πύργο (KPK, KQK, KRK). Όλα αυτά, για πρώτη κίνηση του λευκού (white to move) ή πρώτη κίνηση του μαύρου (black to move). Τα φινάλε με έναν αξιωματικό και ένα άλογο δεν υπάρχουν, διότι αυτοδικαίως ο αγώνας κρίνεται ισόπαλος, καθώς δε γίνεται ποτέ mat. Υπάρχουν, από εκεί και πέρα, τα φινάλε τεσσάρων κομματιών, πέντε και έξι. Τα φινάλε στο σκάκι παρουσιάζουν μέγιστη σημασία, καθώς αποτελούν το τέλος του παιχνιδιού. Μπορεί κανείς να μην παίξει καλά και να χάσει, ενώ θα μπορούσε να νικήσει. Επιπλέον δε, είναι ένα θέμα ομολογουμένως δύσκολο και παρουσιάζει έντονο σκακιστικό ενδιαφέρον. Για όλα αυτά τα φινάλε, υπάρχουν βάσεις δεδομένων οι οποίες μας πληροφορούν σχετικά με το ποιος νικάει κάθε φορά. Οι βάσεις δεδομένων είναι μεγάλα αρχεία κωδικοποιημένα, που έχουν δημιουργηθεί με ανάλυση από το τέλος προς την αρχή (retrograde analysis [3] ). Από μια θέση ματ έχουν γίνει κινήσεις προς τα πίσω, οπότε φαίνεται πώς ένα ολόκληρο φινάλε καταλήγει στη συγκεκριμένη θέση ματ. Τι ακριβώς σημαίνει, όμως, το ποιος νικάει; Θα δοθεί ένα παράδειγμα για να καταστεί σαφές. Έστω ότι αναφερόμαστε στο γνωστό φινάλε με ένα πιόνι για τον λευκό KPK. Σε αυτό, όμως, μπορεί το πιόνι και οι δύο βασιλιάδες να βρίσκονται πάνω στη σκακιέρα σε πολλές διαφορετικές τοποθετήσεις. Είναι θέμα, λοιπόν, αρχικής θέσης των κομματιών. Υπάρχουν θέσεις που ωφελούν τον λευκό και άλλες που τον δυσκολεύουν, παρόλο που έχει υπεροχή ενός πιονιού. Για παράδειγμα, στην παρακάτω θέση, αν παίζει ο μαύρος, τότε θα βγει ισοπαλία, διότι θα φάει αμέσως το πιόνι. Εικόνα 2.1. Η σημασία της αρχικής τοποθέτησης των κομματιών. Παίζει ο μαύρος και μπορεί να φάει το πιόνι. 8
Επομένως, η αρχική τοποθέτηση των κομματιών είναι υψίστης σημασίας. Για αυτό το λόγο, στη βάση δεδομένων του Nalimov, υπάρχει ένα αρχείο μόνο για το φινάλε KPK white to move. Αυτό, αν μπορούσε κανείς να το κοιτάξει να δει τι περιέχει, δεν είναι παρά τα αποτελέσματα όλων των δυνατών τοποθετήσεων των τριών κομματιών για το φινάλε KPK white to move. Αυτό περιέχει δηλαδή κάθε αρχείο του Nalimov. Εδώ πρέπει να γίνει ένα καίριο σχόλιο: Για να πούμε ποιος νικάει ή όχι, εννοείται ότι τόσο ο λευκός όσο και ο μαύρος παίζουν τέλεια (perfect play), δηλαδή παίζουν την καλύτερη κίνηση που υπάρχει. Αν τυχόν ο μαύρος έχει μια κίνηση που οδηγεί σε ισοπαλία, τότε σε καμία περίπτωση δεν θα αφήσει τον λευκό να νικήσει. Άρα, μιλάμε για τη δυνατότητα του λευκού να νικήσει, ανεξαρτήτων των κινήσεων του μαύρου ή του μαύρου να φέρει σε ισοπαλία το παιχνίδι, ανεξαρτήτων των προσπαθειών του λευκού βασιλιά. Ευτυχώς, αυτές οι πληροφορίες είναι δεδομένες από μελέτες που έχουν γίνει και περιέχονται στη βάση δεδομένων του Eugene Nalimov. Δηλαδή, είναι γνωστό, μέσω αυτών των βάσεων, για κάποια οποιαδήποτε τοποθέτηση των κομματιών στη σκακιέρα ποιος νικάει (αν ο λευκός μπορεί να νικήσει ή είναι υποχρεωμένος ό,τι και να κάνει να δεχτεί το αποτέλεσμα της ισοπαλίας λόγω των ενεργειών του μαύρου). Τα συγκεκριμένα αρχεία είναι κωδικοποιημένα και αν τα ανοίξει κανείς με επεξεργαστή κειμένου, δε θα μπορέσει να δει παρά ακατανόητο κείμενο και σύμβολα. Η προέκτασή τους ήταν nbw.emd για τα white to move (π.χ. KPK.nbw.emd) και nbb.emd για το black to move. Στη συνέχεια φαίνεται ένα δείγμα αυτού του κειμένου: Εικόνα 2.2 Το κωδικοποιημένο περιεχόμενο των αρχείων.nbw.emd δε χρησιμεύει σε αυτή τη μορφή. 2.2 Η ΠΡΟΕΡΓΑΣΙΑ ΚΑΙ ΑΡΧΗ ΤΗΣ ΔΙΠΛΩΜΑΤΙΚΗΣ Στη αρχή, αντιμετώπισα μεγάλη δυσκολία, γιατί δεν ήξερα πώς θα μπορέσω να διαβάσω τις βάσεις του Nalimov. Αυτή η διαδικασία, με χαμηλό ρυθμό δουλειάς, μου πήρε τέσσερις μήνες. Επικοινώνησα με τον αναπληρωτή καθηγητή Robert Hyatt του πανεπιστημίου University of Alabama στο Birmingham της Αγγλίας, στον οποίον έστειλα και τρία e-mails. Τον ρώτησα πώς μπορούμε να δούμε αυτές τις βάσεις δεδομένων και αν είναι αλήθεια ότι ο κώδικας για την αποκωδικοποίησή τους βρίσκεται στα αρχεία egtb.cpp και tbdecode.h, αρχεία του προγράμματος Crafty, όπως είχα διαβάσει στο διαδίκτυο. Επίσης, τον ρώτησα αν είναι καλή ιδέα να χρησιμοποιήσω τα λεγόμενα SOAP messages, με το πρωτόκολλο SOAP, σχετικές πληροφορίες για το οποίο θέμα είχα συναντήσει στο διαδίκτυο. Αυτό μου απάντησε ότι πράγματι αυτά τα αρχεία περιέχουν τον κώδικα για την αποκωδικοποίηση των βάσεων και είναι αρχεία του Crafty. Με παρότρυνε να τα χρησιμοποιήσω και να βρίσκω μια θέση στα αρχεία του Nalimov δίνοντας εγώ πρώτα το index της εκάστοτε θέσης. Διάβασα αρκετά το αρχείο E.V. Nalimov, G.McC. Haworth, E.A. Heinz, Space-efficient indexing of chess endgame tables, ICGA J. 23 (3) (2000) 148 162. Είναι αρκετά πολύπλοκο να βρει κανείς το index για μια δεδομένη θέση και δεν υπάρχει και κάποιο πολύ κατανοητό παράδειγμα. Στη συνέχεια, τον ξαναρώτησα πώς, έχοντας τον αριθμό αυτό, θα κάνω την αναζήτηση στη βάση του Nalimov. Αυτός μου 9
είπε ότι δεν υπάρχει θέμα να γράψω κώδικα, αφού όλος ο κώδικας διατίθεται στο αρχείο egtb.cpp. Προσέθεσε ότι υπάρχει και ένα άλλο αρχείο, με το όνομα probe.c, το οποίο περιέχει πληροφορίες για το πώς ακριβώς θα μπορέσει κανείς να περάσει στον υπολογιστή τις θέσεις των κομματιών, ώστε να λάβει το αποτέλεσμα του ποιος νικάει. Στη συνέχεια, δυστυχώς, μπερδεύτηκα, γιατί τα αρχεία αυτά δεν μπορούσα να τα καταλάβω σε ικανοποιητικό βαθμό. Ένας λόγος είναι ο μεγάλος αριθμός μεταβλητών που περιέχουν. Ήθελα να μπορέσω να τρέξω μόνο του το αρχείο egtb.cpp, διότι αυτό περιέχει τον κώδικα που δίνει το αποτέλεσμα από το αρχείο του Nalimov. Όμως, εστάθη αδύνατον να τρέξει αυτό μόνο του και κοιτούσα να δω με ποια αρχεία από το σκακιστικό πρόγραμμα Crafty και με ποιες από τις βιβλιοθήκες του είναι δυνατόν να τρέξει. Αυτό γιατί περιείχε μεταβλητές και συναρτήσεις που ορίζονταν σε άλλα σημεία του προγράμματος. Μετά, έστειλα και τρίτο e-mail στον κ.hyatt, με το οποίο τον ρωτούσα πώς είναι δυνατόν να κάνω compile και να τρέξω το αρχείο αυτό που με ενδιέφερε. Να σημειώσω, εδώ, ότι ούτε καν το πρόγραμμα Crafty δεν μπορούσα να τρέξω, καθώς ήταν μια ομάδα από αρχεία γραμμένα σε γλώσσα C. Ο κ.hyatt μου είπε ότι πρέπει απλώς να τρέξω το πρόγραμμα Crafty, οπότε υπέθεσα ότι δε γίνεται και δεν υπάρχει νόημα να τρέξω το μισό ή μόνο το αρχείο που με ενδιαφέρει, αφού είναι μέρος αναπόσπαστο ενός ολόκληρου προγράμματος. Από τότε, άρχισα να τρέχω το πρόγραμμα Crafty, αφού βρήκα στο internet κάποιες συμβουλές για το compilation που έπρεπε να γίνει [11]. Το Crafty έπαιζε σε περιβάλλον κονσόλας και άρχισα να δοκιμάζω πώς παίζουν αγώνες. Στη συνέχεια, βρήκα την εντολή setboard, για να μπορώ να βάζω μια συγκεκριμένη θέση. Στην εντολή, τοποθετεί κανείς τη θέση με κωδικό FEN. Σκοπός μου ήταν να θέτω ένα φινάλε και να παίζω με τον υπολογιστή, αφού του φόρτωνα με την εντολή egtb τις βάσεις του Nalimov. Μάλιστα, ήταν φανερό ότι όταν οι βάσεις είχαν συνδεθεί στο πρόγραμμα με αυτή την εντολή, ότι ο υπολογιστής ως αντίπαλος σκεφτόταν σε μηδενικό χρόνο, πράγμα που σημαίνει ότι την επόμενη κίνηση την έπαιρνε αυτομάτως από τη βάση του Nalimov. Επειδή ήταν δυσχερής η κατανόηση του κώδικα στο αρχείο egtb.cpp, καθώς και στο αρχείο probe.c, προσπάθησα στη συνέχεια να παίζω σκάκι με τον υπολογιστή και εκτός των μηνυμάτων του Crafty να βάλω και δικά μου μηνύματα να εμφανίζονται στην οθόνη, οιονεί debugging, για να καταφέρω να καταλάβω πώς λειτουργούν όλα. Και πάλι, η κατανόηση των αρχείων ήταν δυσχερής, αλλά σε εκείνο περίπου το σημείο βρέθηκε η άλλη λύση. Σε αυτό το σημείο, άλλαξα τακτική και άρχισα να χρησιμοποιώ τη βιβλιοθήκη gafslib.h. Αυτή η βιβλιοθήκη, μπορεί να κάνει αυτήν ακριβώς τη δουλειά που ήθελα, δηλαδή να διαβάζει τις βάσεις δεδομένων του Nalimov και να μου δίνει το αποτέλεσμα μια συγκεκριμένης θέσης. Μπορεί να τη βρει κανείς στη διεύθυνση http://horizonchess.com/ FAQ/Winboard/egtb.html#[A.19], όπου αναφέρονται πληροφορίες και λύσεις για το θέμα του Nalimov bases viewing. Εκεί, πατάει κανείς την επιλογή GAFS. Η συγκεκριμένη βιβλιοθήκη μας λύνει τα χέρια, με τις δύο συναρτήσεις που διαθέτει. Η πρώτη είναι για την αρχικοποίηση των βάσεων δεδομένων στον υπολογιστή. Η δεύτερη συνάρτηση είναι αυτή που μας δίνει το αποτέλεσμα μιας συγκεκριμένης θέσης για το φινάλε KPK ή για οποιοδήποτε άλλο θέλουμε, αρκεί η βάση να είναι φορτωμένη στον υπολογιστή, σε κάποιο path που ορίζει ο χρήστης. Με αυτήν τη συνάρτηση, όπως φαίνεται στο παράρτημα, έγινε η δουλειά, αφού με κώδικα έπαιρνα αποτελέσματα και δημιουργούσα τα αρχεία με τα data που χρειαζόμουν, για να εφαρμοστεί το data mining. Κάποιες άλλες πληροφορίες, σχετικά με τη βιβλιοθήκη, έχουν τεθεί στο Παράρτημα Α. 2.3 ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΗΣ ΔΙΠΛΩΜΑΤΙΚΗΣ ΚΑΙ ΣΤΟΙΧΕΙΑ ΧΡΗΣΗΣ ΤΟΥ Το πρόγραμμα που χρησιμοποίησα για να εφαρμόζω τους αλγορίθμους του data mining είναι το γνωστό λογισμικό Weka 3.7, το οποίο διατίθεται ελεύθερα στο διαδίκτυο. Αρκεί κανείς να πληκτρολογήσει τη διεύθυνση http://www.cs.waikato.ac.nz/ml/weka/ σε έναν φυλλομετρητή (browser). Το πρόγραμμα Weka [4] δημιουργήθηκε με σπόνσορα την εταιρία ελεύθερου λογισμικού Pentaho και αποτελεί μια συλλογή των πιο γνωστών αλγορίθμων για data mining, ενώ περιλαμβάνει εργαλεία για pre-processing, classification, clustering και association rule mining. Είναι εύκολο στη χρήση και με πολλές δυνατότητες. Στο λογισμικό Weka διατίθεται ένα πλήθος αλγορίθμων, κατάλληλων για πολλές εφαρμογές. Στην παρούσα διπλωματική εργασία χρησιμοποιήθηκε ως επί το πλείστον ο αλγόριθμος δέντρου απόφασης J48. Εκτός αυτού, αναφέρονται και οι αλγόριθμοι Naϊve Bayes, Random Forest, OneR και Bagging. 10
Το δέντρο απόφασης J48 χρησιμοποιήθηκε περισσότερο από τους άλλους αλγορίθμους για διάφορους λόγους. Κατ αρχάς, ήταν ένας αλγόριθμος που ξέρω περίπου πώς λειτουργεί [2]. Ο υπολογιστής εκτελεί μια αναζήτηση σε όλα τα διαθέσιμα χαρακτηριστικά και αναζητεί αυτό για το οποίο υπάρχει το μεγαλύτερο κέρδος πληροφορίας, δηλαδή λαμβάνεται με τη διακλάδιση με βάση αυτό το χαρακτηριστικό το μεγαλύτερο ποσό πληροφορίας. Η λέξη «πληροφορία», που εκφράζεται με μια απλή μαθηματική συνάρτηση, αναφέρεται στο κατά πόσο το αποτέλεσμα έγινε πιο προβλέψιμο, δηλαδή, στο κατά πόσο μπορούμε πλέον να αποφανθούμε σε σχέση με το ποιος θα νικήσει στο παιχνίδι ή αν θα βγει ισοπαλία. Εκτός αυτού, ο συγκεκριμένος αλγόριθμος J48 χρησιμοποιήθηκε σαν ο βασικός αλγόριθμος της διπλωματικής εργασίας για λόγους ομοιομορφίας. Δεν θα ήταν ωραίο να χρησιμοποιώ διαφορετικούς αλγορίθμους ίδιας περίπου ισχύος και να πραγματοποιούνται ακολούθως συγκρίσεις των αποτελεσμάτων. Ενώ, αν η εργασία εκτελείται μόνο με τον ίδιον (καλό) αλγόριθμο και με τον ίδιο τρόπο εκτίμησης του σφάλματος του ταξινομητή (10-fold cross-validation), είναι φανερό ότι μπορούν να γίνουν συγκρίσεις υπό πολύ ευνοϊκούς όρους και να συναχθούν αρκετά ασφαλή συμπεράσματα. Τέλος, υπήρχαν κάποιοι λόγοι για τους οποίους κάποιοι αλγόριθμοι αποκλείστηκαν. Για παράδειγμα, ο αλγόριθμος Naϊve Bayes εκπαιδεύει έναν ταξινομητή με πολύ χαμηλό επίπεδο ακρίβειας, πράγμα που εμποδίζει συχνά να τον χρησιμοποιήσουμε, αλλά και δεν υπήρχε η κατάλληλη γνώση και υποδομή για να τον χρησιμοποιήσω αποτελεσματικά. Σχετικά με τους αλγορίθμους της κατηγορίας lazy, έγινε δοκιμή με τον γνωστό KStar, αλλά, δυστυχώς, μου φάνηκε απαράδεκτα αργός στο evaluation. Εν ολίγοις, ο αλγόριθμος J48 απεδείχθη ικανοποιητικός και όσον αφορά την ακρίβεια και την παρουσίαση και κατανόηση των αποτελεσμάτων του, ακόμα και από άποψη ταχύτητας. Εκτός αυτών, χρησιμοποιήθηκε εκτεταμένα το φίλτρο unsupervised.attribute.addexpression, για τη δημιουργία νέων χαρακτηριστικών είτε μη γραμμικών, γενικά, είτε για απλούς συνδυασμούς των υπαρχόντων, όπως για παράδειγμα για να εκτελεστεί η πράξη wkfile-filediffkk = bkfile, για να ληφθεί το χαρακτηριστικό bkfile. Επίσης, χρησιμοποιήθηκε και το φίλτρο της διακριτοποίησης των χαρακτηριστικών, discretization filter. 11
ΚΕΦΑΛΑΙΟ 3 Η ΕΦΑΡΜΟΓΗ ΤΟ ΦΙΝΑΛΕ KPK WHITE TO MOVE 3.1 ΦΙΝΑΛΕ KPK WHITE TO MOVE 3.1.1 Προσέγγιση πρώτη Στην αρχή προσπάθησα να σκεφτώ κάποια χαρακτηριστικά σκακιστικά, τέτοια ώστε να δίνουν χρήσιμη πληροφορία για το φινάλε. Αυτό απαιτούσε, συνολικά, μεγάλη προσπάθεια από μέρους του χρήστη. Ο λόγος είναι απλός: Έπρεπε να έχω αρκετά καλή γνώση για το φινάλε και σκακιού γενικότερα και, στη συνέχεια, να μεταφραστούν όλα αυτά σε πρακτικό επίπεδο με κώδικα. Αποτέλεσμα: η δημιουργία attributes που αντανακλούν κάποια σκακιστική κατανόηση. Πρόκειται για τα εξής χαρακτηριστικά: distancetothefrontsquare wpahaidintherace wpcanbecaptured wponfileaorh racetimeenough opposition Ακολουθεί σύντομη ανάλυση αυτών των χαρακτηριστικών: 1) distancetothefrontsquare (Numeric attribute) Είναι η απόσταση των δύο βασιλιάδων σε σχέση με την μπροστινή περιοχή του πιονιού. Αυτές οι δύο αποστάσεις αφαιρούνται. Εξετάζεται η απόσταση του λευκού βασιλιά από το μπροστινό πλαϊνό τετράγωνο και του μαύρου από το δεύτερο μπροστινό τετράγωνο σε σχέση με το πιόνι. Αυτά τα τετράγωνα 12
ορίστηκαν, γιατί νομίζω πως σημασία έχουν αυτά τα τετράγωνα αντίστοιχα για τους δύο βασιλιάδες. Φυσικά, και όλα τα μπροστινά τετράγωνα είναι σημαντικά. Όποιος φτάσει πρώτος σε αυτά έχει κάποιο πλεονέκτημα. Σχηματικά, εξετάζουμε τη διαφορά των αποστάσεων που απεικονίζονται: Εικόνα 3.1 Το χαρακτηριστικό distancetothefrontsquare. Ο κώδικας για το συγκεκριμένο χαρακτηριστικό distancetothefrontsquare είναι ο ακόλουθος: // Attribute 1: DistanceCmpToTheFrontRegion \\ attribute1= min(dist(pk,pp+7) - dist(pk,pp+16), dist(pk,pp+9) - dist(pk,pp+16)); // Two things and min (,), because the white king // comes from left or from right. if (attribute1 <= 0) fprintf(fp,"near"); else fprintf(fp,"far"); fprintf(fp,","); Για να φτιαχτεί αυτό το attribute έπρεπε πρώτα να βρεθεί μια συνάρτηση που να δίνει την απόσταση μεταξύ δύο τετραγώνων (περιλάμβανε και διαγωνίους κινήσεις, αφού κινούνταν βασιλιάδες). Ένας ικανοποιητικός τύπος είναι ο εξής: int dist(int f1, int i1) { return (max(abs(f(f1)-f(i1)),abs(r(f1)- r(i1)))); } Ο παραπάνω τύπος ελέγχει ποια είναι η μεγαλύτερη απόσταση, αυτή των files ή αυτή των ranks και παίρνει υπ όψιν μόνο αυτήν τη μεγαλύτερη απόσταση. Αυτό το κάνει γιατί, καθώς επιτρέπονται οι διαγώνιες κινήσεις, για κάθε file που πλησιάζει ένα κομμάτι προς το στόχο μπορεί, ταυτόχρονα, να πλησιάζει και κατά ένα rank, άρα μπορεί κανείς να αδιαφορήσει για την ύπαρξη των δύο διαστάσεων (files στη θέση της τετμημένης και ranks στη θέση της τεταγμένης). 2) wpahaidintherace (Nominal attribute) Το συγκεκριμένο χαρακτηριστικό εξετάζει αν το πιόνι είναι ήδη πιο μπροστά από το μαύρο βασιλιά, οπότε προλαβαίνει ο λευκός να βγάλει βασίλισσα απλώς προωθώντας το πιόνι του. Ένα χαρακτηριστικό σχήμα φαίνεται στη συνέχεια: 13
Εικόνα 3.2. Το χαρακτηριστικό wpahaidintherace. Συγχρόνως, περιλαμβάνεται και η περίπτωση κατά την οποία το πιόνι βρίσκεται στη δεύτερη γραμμή και εκτελεί διπλή κίνηση, οπότε ο μαύρος βασιλιάς και πάλι δεν μπορεί να το προλάβει και ας ξεκινά σε αυτήν την περίπτωση από την ίδια γραμμή σε σχέση με το πιόνι. Αυτό φαίνεται στο σχήμα παρακάτω: Εικόνα 3.3 Το χαρακτηριστικό wpahaidintherace, όταν το πιόνι μπορεί να εκτελέσει διπλή κίνηση. Ο κώδικας για αυτό το attribute είναι ο εξής: // Attribute 3: wpahaidintherace. \\ vasilia... diplhkinhsh... if (r(pp)>r(pk) && pk!= pp+8) { // An to pioni einai ena rank pio mprosta kai den empodizetai apo to fprintf(fp,"y"); } else if (r(pp) == r(pk) && r(pp) == 2 && pk!= pp+8 && pk!= pp+16) fprintf(fp,"y"); } else fprintf(fp, "N"); fprintf (fp,","); { // An einai sto idio rank // alla to pioni exei 14
Το συγκεκριμένο χαρακτηριστικό (attribute) ήταν σε μεγάλο βαθμό κατάλληλο, πράγμα που φαίνεται από το γεγονός ότι όταν είχε την τιμή YES, τότε πάντα νικούσε ο λευκός. Επίσης, και οι αλγόριθμοι επιλογής χαρακτηριστικών (Attribute Selection) το συμπεριλάμβαναν στα καλύτερα, όπου ήταν σταθερά δεύτερο (π.χ. στο gain ratio feature evaluator). 3) wpcanbecaptured (Numeric attribute) Το χαρακτηριστικό wpcanbecaptured μοιάζει με το πρώτο (distancetothefrontsquare). Η διαφορά είναι ότι στο συγκεκριμένο συγκρίνονται οι αποστάσεις των δύο βασιλιάδων σε σχέση με το ίδιο το πιόνι, γιατί μας ενδιαφέρει αν μπορεί να φαγωθεί, οπότε και το αποτέλεσμα του αγώνα θα είναι ισοπαλία. Πρέπει να τονιστεί, σε αυτό το σημείο, ότι το χαρακτηριστικό wpcanbecaptured δεν μπορεί να αποφανθεί εγγυημένα αν θα «φαγωθεί» το πιόνι ή όχι. Για αυτό το λόγο και το όρισα ως αριθμητικό χαρακτηριστικό. Ο υπολογιστής θα πάρει το νούμερο και θα μπορέσει να το αξιοποιήσει με τον καλύτερο τρόπο. Αν είχε τεθεί ένα κατώφλι, π.χ. το πιόνι «τρώγεται» αν η διαφορά είναι μεγαλύτερη του αριθμού ένα, τότε ο υπολογιστής θα έπαιρνε λιγότερη πληροφορία. Τώρα, αν κοιτάξει κανείς το δέντρο, που δημιουργείται από το data mining, υπάρχουν και ενδιάμεσες περιπτώσεις, συνολικά το 0, -2 και -1, άρα ο υπολογιστής μπορεί να εξάγει περισσότερη πληροφορία από ένα nominal attribute που θα είχε μόνο YES και NO. Ο λόγος για τον οποίον το εν λόγω χαρακτηριστικό δεν μπορεί να καθορίσει το αν «τρώγεται» το πιόνι ή όχι είναι ότι φτιάχτηκε από άνθρωπο με περιορισμένη γνώση. Απλώς συγκρίνονται δύο αποστάσεις. Στην πραγματικότητα, δυστυχώς, είναι μακράν πιο πολύπλοκο και αφορά διάφορα σκακιστικές λεπτομέρεις που δεν μοντελοποιούνται σε αυτό το επίπεδο. Εικόνα 3.4. Το χαρακτηριστικό wpcanbecaptured. Εκτός αυτών, περιλαμβάνεται και μια λεπτομέρεια σχετικά με τη μέτρηση της απόστασης, η οποία φαίνεται στον κώδικα. Πιο συγκεκριμένα, υπάρχουν δύο συναρτήσεις απόστασης, η dist(pos1,pos2) και η dist2(pos1,pos2). Ο λόγος είναι ότι ο μαύρος βασιλιάς, επειδή δεν μπορεί να πάει στο τετράγωνο το πάνω διαγώνιο του πιονιού, κάποιες φορές αναγκάζεται να διανύσει κατά ένα τετραγωνάκι μεγαλύτερη απόσταση από αυτή που δίνει η κανονική συνάρτηση distance. Για αυτό, κρίθηκε απαραίτητη η περιγραφή της τελευταίας περίπτωσης με τη συνάρτηση dist2(pos1,pos2). Ο κώδικας που χρησιμοποιήθηκε είναι ο εξής: 15
// Attribute 4: wpcanbecaptured \\ attribute3 = dist(pk,pp)-dist2(pk,pp); attribute3 = min (attribute3, dist(pk,pp + 8) - dist2(pk, pp + 8)) ; attribute3 = min (attribute3, dist(pk,pp + 16) - dist2(pk, pp + 16)); fprintf (fp,"%d", attribute3); fprintf (fp,","); Στο παράρτημα Β μπορεί κανείς να δει αυτές τις δύο συναρτήσεις απόστασης. 4) wponfileaorh (Nominal attribute) Στο συγκεκριμένο φινάλε, το αν το πιόνι βρίσκεται στις ακριανές στήλες της σκακιέρας (file A ή file H) παίζει ρόλο, δυσκολεύοντας αρκετά την κατάσταση για τον λευκό. Ο κώδικας για το υπό μελέτη χαρακτηριστικό είναι ο ακόλουθος: // Attribute 6: wponfileaorh \\ if (iswponfileaorh((int)pp)) fprintf (fp, "Y"); else fprintf (fp,"n"); fprintf(fp,","); // Eksetazw th 8esh tou pioniou, pos[1], afou to kanw prwta int. και η συνάρτηση για να δουλέψει αυτό είναι: int iswponfileaorh (int position){ if (f(position) == 1 f(position) == 8) return (1); // 1 for TRUE, as if it was boolean. else return (0); } 5) racetimeenough (Nominal attribute) Το χαρακτηριστικό racetimeenough δείχνει αν το πιόνι μπορεί να γίνει βασίλισσα πριν το προλάβει ο αντίπαλος βασιλιάς, ο οποίος κινείται εναντίον του. Αναφερόμαστε στην περίπτωση κατά την οποία το λευκό πιόνι δε βρίσκεται αναγκαστικά μπροστά από το μαύρο βασιλιά, όπως στην περίπτωση του wpahaidintherace, αλλά συμβαίνει να μπορεί να γίνει βασίλισσα πριν ο τελευταίος το προλάβει, γιατί τα χωρίζει ικανή απόσταση. Με το παρακάτω σχήμα η έννοια του χαρακτηριστικού racetimeenough θα καταστεί σαφέστερη: 16
Εικόνα 3.5. Το χαρακτηριστικό racetimeenough. Ο κώδικας που χρησιμοποιήθηκε είναι ο εξής: // Attribute 7: racetimeenough \\ vasilia. leukos elegxous. // Einai attribute pou deixnei an to leuko pioni mporei na ftasei to rank 8 prin fagw8ei apo ton mauro // Skeftomaste omws kai to ekshs: einai dikaio na sumperilaboume kai thn paromoia periptwsh kata thn opoia o // vasilias empodizei kata 1 mono kinhsh to pioni. Ara to skeftomaste kai auto me tous katallhlous int flag_thereiskingahaid = 0, squareahaid = pp +8 /* initialization */, lastranksquare; while (squareahaid <= 63) { if (squareahaid == pk) flag_thereiskingahaid = 1; squareahaid += 8; // dnladn an einai mprosta o vasilias. } lastranksquare = squareahaid - 8; // Now, squareahaid will have the last value, which is not valid for the test of the while loop... if (flag_thereiskingahaid == 0) if (dist(pp,lastranksquare)-dist(pk,lastranksquare)< -1) fprintf(fp, "Y"); else fprintf(fp, "N"); else take the king off the if (dist(pp,lastranksquare)-dist(pk,lastranksquare)< -2) else fprintf(fp,","); fprintf(fp, "Y"); fprintf(fp, "N"); // Because it takes another movement to // white pawn's way. 6) opposition Στη συνέχεια, προσετέθη και ένα χαρακτηριστικό, το οποίο εξετάζει αν ο λευκός βασιλιάς έχει την opposition. Πρόκειται για ένα θέμα λίγο εξειδικευμένο, αλλά ιδιαίτερα σημαντικό για το συγκεκριμένο φινάλε. Εκφράζει, όπως είναι γνωστό από τη σκακιστική θεωρία, την τοποθέτηση των δύο βασιλιάδων μεταξύ τους, η οποία δίνει το πλεονέκτημα σε έναν από τους δύο να μπορεί να εισχωρεί στην περιοχή του αντιπάλου, παρά τη θέληση του αμυνομένου. Ο κώδικας για αυτό το χαρακτηριστικό (αναφερόμαστε εδώ στην direct opposition) είναι ο εξής: // Attribute 2: Has got the OPPOSITION or can get hold of it \\ if (f(pk) == f(pk) && (r(pk) - r(pk) -1 == 1)) /*squares in between the kings for the direct opposition*/ if (sparemove(pk, pp) == 0) /* to take next move the opposition*/ opp = 0; // this is the rule. The code should be correct. else opp = 1; if (!opp) else fprintf(fp,"n"); fprintf(fp,"y"); fprintf(fp,","); τώρα: και η συνάρτηση για να είναι ολοκληρωμένο το παραπάνω τμήμα κώδικα, παρατίθεται αμέσως int sparemove (int p1, int p2) { if (r(p1)-r(p2) >= 2) return (1); else return (0); } Είναι φανερό ότι εξετάζεται μόνο η περίπτωση της direct opposition για τον μαύρο. Αν ο λευκός έχει κάποια κίνηση να κάνει, ούτως ώστε να σπαταλήσει μία κίνηση και να μπορέσει αργότερα να πάρει την opposition (sparemove(pk, pp) == 0), τότε θεωρείται ότι την opposition την έχει ο λευκός. 17
Αποτελέσματα Τα αποτελέσματα της εφαρμογής data mining, όταν χρησιμοποιούνται μόνο χαρακτηριστικά (attributes) που προκύπτουν από την ανθρώπινη εμπειρία, φαίνονται στη συνέχεια: === Run information === Scheme: weka.classifiers.trees.j48 -C 0.25 -M 2 Relation: ffordataminingkpk_ws55_proseg1-weka.filters.unsupervised.attribute.remove-r3-6 Instances: 163328 Attributes: 7 gettingthefrontofpawn opposition wahaidintherace wpcanbecaptured wponfileaorh racetimeenough Winning side Test mode: 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree ------------------ wahaidintherace = Y: w (76410.0) wahaidintherace = N gettingthefrontofpawn = NEAR wpcanbecaptured <= 0 racetimeenough = N wponfileaorh = Y wpcanbecaptured <= -2: w (5003.0/1570.0) wpcanbecaptured > -2: d (2489.0/1033.0) wponfileaorh = N: w (29614.0/3762.0) racetimeenough = Y: w (9662.0) wpcanbecaptured > 0 racetimeenough = N: d (6097.0/1643.0) racetimeenough = Y: w (738.0) gettingthefrontofpawn = FAR racetimeenough = N wpcanbecaptured <= 0 wpcanbecaptured <= -1 opposition = N: d (1878.0/72.0) opposition = Y: w (24.0) wpcanbecaptured > -1: d (7274.0/2166.0) wpcanbecaptured > 0: d (22279.0/2067.0) racetimeenough = Y: w (1860.0) Number of Leaves : 12 Size of the tree : 23 Time taken to build model: 1.98 seconds Correctly Classified Instances 150970 92.4336 % Incorrectly Classified Instances 12358 7.5664 % Kappa statistic 0.7924 Mean absolute error 0.1187 Root mean squared error 0.2438 Relative absolute error 33.016 % Root relative squared error 57.5083 % Coverage of cases (0.95 level) 99.9743 % Mean rel. region size (0.95 level) 72.5506 % Total Number of Instances 163328 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure ROC Area Class 0.944 0.141 0.956 0.944 0.95 0.964 w 0.859 0.056 0.826 0.859 0.842 0.964 d Weighted Avg. 0.924 0.121 0.926 0.924 0.925 0.964 === Confusion Matrix === a b <-- classified as 118005 6955 a = w 5403 32965 b = d 18
Εδώ θα γίνει ένα σχόλιο, το οποίο θα καταστεί πιο κατανοητό στη συνέχεια: Το δέντρο είναι πολύ μικρό και ευσύνοπτο. Διαβάζεται πολύ εύκολα από τον άνθρωπο και ανταποκρίνεται πραγματικά στην εμπειρία του. Αυτό οφείλεται στο ότι τα χαρακτηριστικά (attributes) που χρησιμοποιεί είναι κατανοητά από ένα γνώστη των σκακιστικών πραγμάτων. Πιο βαθιά, όμως, πρέπει να ειπωθεί ότι τα attributes φέρουν μεγάλη περιγραφική δύναμη της (σκακιστικής) καταστάσεως, ως φτιαγμένα από άνθρωπο και για αυτό και μεγάλη ακρίβεια επιτυγχάνουν και πολύ γρήγορα και άνετα, χωρίς μεγάλο δέντρο και «κόπο» από πλευράς υπολογιστή. Στη συνέχεια, θα συναντήσουμε πολύ μεγαλύτερα δέντρα, τα οποία θα είναι πρακτικά τεράστια και σίγουρα ακατανόητα από άνθρωπο σε «μακροσκοπική» κλίμακα (ας το πούμε έτσι. Δηλαδή κατανοητά θα είναι μόνο τοπικά ίσως.) Για να δοθεί ένα μέτρο σύγκρισης, θα μπορούσαμε να πούμε ότι τα δέντρα που θα ακολουθήσουν μετά θα είναι από δεκάδες μέχρι εκατοντάδες ή και χιλιάδες (σε πιο απαιτητικά φινάλε) φορές μεγαλύτερα. 3.1.2 Το φινάλε KPK wtm με «σκακιστικά» και «πρωτογενή» χαρακτηριστικά Σε αυτό το σημείο θα εισαχθούν και κάποια χαρακτηριστικά («πρωτογενή») που στηρίζονται σε απλή γεωμετρική επισκόπηση του παιχνιδιού. Για παράδειγμα, εξετάζεται η απόσταση κατά στήλες μεταξύ των δύο βασιλιάδων (filediffkk). Είναι φανερό ότι δεν υπάρχει κάποια ιδιαίτερη σκακιστική πληροφορία πίσω από μια τέτοια μεταβλητή, καθώς το σκάκι είναι πολύ πιο περίπλοκο παιχνίδι. Όμως, αυτή η ενέργεια στηρίζεται σε μια γενικότερη προσπάθεια αφενός για να επεκταθεί η μελέτη σε όλα τα φινάλε και αφετέρου για να εισαχθούμε καλύτερα στη λογική του data mining σε δεδομένα άγνωστα. Θα απαιτηθεί, δηλαδή, τώρα, σύμφωνα με την τελευταία παρατήρηση, να γίνει το κύριο έργο από τον υπολογιστή, χωρίς να σκέφτεται ο χρήστης πολύπλοκες σκακιστικές περιπτώσεις. Θα δούμε τα αποτελέσματα αυτής της προσέγγισης ευθύς αμέσως. OneR rules === Run information === Scheme: weka.classifiers.rules.oner -B 6 Relation: ffordatamining-weka.filters.allfilter Instances: 163328 Attributes: 11 gettingthefrontofpawn opposition filediffkk filediffkp rankdiffkk rankdiffkp wahaidintherace wpcanbecaptured wponfileaorh racetimeenough Winning side Test mode: 10-fold cross-validation === Classifier model (full training set) === gettingthefrontofpawn: NEAR -> w FAR -> d (133538/163328 instances correct) Time taken to build model: 2.01 seconds Correctly Classified Instances 133538 81.7606 % Incorrectly Classified Instances 29790 18.2394 % Kappa statistic 0.524 Mean absolute error 0.1824 Root mean squared error 0.4271 Relative absolute error 50.741 % Root relative squared error 100.7385 % Total Number of Instances 163328 === Detailed Accuracy By Class === 19
TP Rate FP Rate Precision Recall F-Measure ROC Area Class 0.852 0.293 0.904 0.852 0.877 0.779 w 0.707 0.148 0.594 0.707 0.646 0.779 d Weighted Avg. 0.818 0.259 0.831 0.818 0.823 0.779 === Confusion Matrix === a b <-- classified as 106412 18548 a = w 11242 27126 b = d Σχόλιο: Ο αλγόριθμος αυτός είναι πολύ απλός, καθώς λαμβάνει υπόψη ένα μόνο χαρακτηριστικό (attribute), αυτό μόνο του μπορεί να διαχωρίσει καλύτερα κάθε παιχνίδι ως προς την κλάση (ποιος νικάει). Φυσικά, το συγκεκριμένο attribute προκύπτει, εδώ, να είναι ένα από τα «σκακιστικά» που διαθέτει πιο μεγάλη διεισδυτικότητα από ένα «πρωτογενές» χαρακτηριστικό. Το attribute αυτό είναι, δηλαδή, μια μη γραμμική σύνθεση πιο απλών εννοιών, κατάλληλη για το θέμα μας, των σκακιστικών φινάλε. Τελικά, η ακρίβεια 81.8% περίπου είναι αρκετά ικανοποιητική, δεδομένου του χρησιμοποιηθέντος αλγορίθμου, ωστόσο θα παρατεθούν περιπτώσεις όπου χρησιμοποιήθηκαν και πιο ισχυροί αλγόριθμοι ευθύς αμέσως. J48 tree === Run information === Scheme: weka.classifiers.trees.j48 -C 0.25 -M 2 Relation: ffordataminingkpk_ws55_proseg1 Instances: 163328 Attributes: 11 gettingthefrontofpawn opposition filediffkk filediffkp rankdiffkk rankdiffkp wahaidintherace wpcanbecaptured wponfileaorh racetimeenough Winning side Test mode: 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree ------------------ wahaidintherace = Y: w (76410.0) wahaidintherace = N gettingthefrontofpawn = NEAR wpcanbecaptured <= 0 racetimeenough = N wponfileaorh = Y rankdiffkk <= -2 filediffkp <= -6 filediffkk <= -1: d (36.0) filediffkk > -1: w (84.0) filediffkp > -6 filediffkp <= 5 rankdiffkp <= -3 wpcanbecaptured <= -2: w (40.0) wpcanbecaptured > -2 rankdiffkp <= -4: w (8.0) rankdiffkp > -4 rankdiffkk <= -7: d (15.0/4.0) rankdiffkk > -7: w (96.0/40.0) rankdiffkp > -3 filediffkk <= -3 filediffkp <= 1 filediffkp <= -2: d (111.0) filediffkp > -2 rankdiffkp <= 2 filediffkk <= -4 opposition = N filediffkk <= -5 filediffkk <= -6: w (54.0) filediffkk > -6 filediffkp <= 0: d (36.0/15.0) filediffkp > 0: w (33.0) filediffkk > -5: d (90.0/27.0) opposition = Y: w (37.0/3.0) filediffkk > -4: d (117.0/22.0) rankdiffkp > 2: w (35.0/2.0) filediffkp > 1 20
filediffkp <= 2 filediffkk <= -4: w (63.0) filediffkk > -4 opposition = N: d (47.0/17.0) opposition = Y: w (10.0) rankdiffkk > 2 opposition = N: d (12.0) opposition = Y: w (3.0) wpcanbecaptured > 1: d (1338.0/12.0) rankdiffkp > 4: d (3106.0/8.0) racetimeenough = Y: w (1860.0) Number of Leaves : 462 Size of the tree : 923 Time taken to build model: 16.19 seconds Correctly Classified Instances 159570 97.6991 % Incorrectly Classified Instances 3758 2.3009 % Kappa statistic 0.9374 Mean absolute error 0.0349 Root mean squared error 0.1347 Relative absolute error 9.7027 % Root relative squared error 31.7769 % Coverage of cases (0.95 level) 99.6339 % Mean rel. region size (0.95 level) 55.7835 % Total Number of Instances 163328 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure ROC Area Class 0.975 0.016 0.995 0.975 0.985 0.994 w 0.984 0.025 0.923 0.984 0.953 0.994 d Weighted Avg. 0.977 0.018 0.978 0.977 0.977 0.994 === Confusion Matrix === a b <-- classified as 121833 3127 a = w 631 37737 b = d 3.1.3 Βελτιώσεις Προσέγγιση δεύτερη και πιο γενική: Σε αυτήν την προσέγγιση, χρησιμοποιούνται αποκλειστικά attributes «πρωτογενή», που δίνουν γεωμετρικές πληροφορίες της θέσης των κομματιών στη σκακιέρα. Συγχρόνως, θα αφαιρεθούν όλα τα «σκακιστικά» χαρακτηριστικά. Το αποτέλεσμα θα φανεί και θα αξιολογηθεί στη συνέχεια. === Run information === Scheme: weka.classifiers.trees.j48 -C 0.25 -M 2 Relation: ffordatamining00 Instances: 163328 Attributes: 7 filediffkk filediffkm filediffkm rankdiffkk rankdiffkm rankdiffkm Winning side Test mode: 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree ------------------ rankdiffkp <= -1: w (74772.0) rankdiffkp > -1 filediffkp <= -4 filediffkk <= 0 filediffkp <= -6: w (564.0) 21
filediffkp > -6 rankdiffkp <= -3 rankdiffkp <= -4: w (256.0) rankdiffkp > -4 filediffkp <= -5: w (84.0) filediffkp > -5 filediffkk > 1 rankdiffkp <= 3: w (80.0/36.0) rankdiffkp > 3: d (32.0/6.0) rankdiffkp > 4: d (380.0) filediffkp > 5: w (564.0) Number of Leaves : 259 Size of the tree : 517 Time taken to build model: 11.78 seconds Correctly Classified Instances 155998 95.5121 % Incorrectly Classified Instances 7330 4.4879 % Kappa statistic 0.8757 Mean absolute error 0.0671 Root mean squared error 0.1849 Relative absolute error 18.6638 % Root relative squared error 43.6253 % Coverage of cases (0.95 level) 99.2983 % Mean rel. region size (0.95 level) 58.6669 % Total Number of Instances 163328 Το αποτέλεσμα είναι μεν καλό (ή πολύ καλό), αλλά λίγο κατώτερο από ό,τι στην προηγούμενη περίπτωση. Κι όμως, θα δούμε στη συνέχεια ότι και αυτό θα αλλάξει, ώσπου θα φτάσουμε ακρίβειες μέχρι 99.9%! 3.1.4 Αποτέλεσμα-προεκτάσεις των πρωτογενών attributes Ένα μεγάλο πλεονέκτημα που προκύπτει από την αποκλειστική χρήση «πρωτογενών» χαρακτηριστικών είναι ότι μπορούν να διαπραγματευτούν συγχρόνως όλα τα φινάλε των τριών κομματιών. Ο λόγος είναι ότι, τώρα πια, δεν υπάρχει κώδικας εξειδικευμένος για την περίπτωση αποκλειστικά του φινάλε KPK (όπως π.χ. το χαρακτηριστικό racetimeenough, το οποίο μάλλον δεν έχει κανένα νόημα σε άλλα φινάλε). Ο κώδικας για όλα τα φινάλε τριών κομματιών φαίνεται στο Παράρτημα Β. Πλεονεκτήματα των πρωτογενών attributes: Γενικότητα στο χειρισμό των φινάλε 3ών κομματιών, το βάρος πέφτει στον υπολογιστή και δεν απαιτείται τόση προσπάθεια, πείρα και γνώση του φινάλε, πράγμα το οποίο δεν είναι καθόλου δεδομένο ότι υπάρχει. Και πραγματικά, η φιλοσοφία του data mining δεν είναι αναγκαστικά να προϋπάρχει γνώση, αλλά, ιδανικά, να την ανακαλύπτουμε μόνοι μας. Μειονεκτήματα των πρωτογενών attributes: Αυτά τα attributes τα οποία είναι πρωτογενή και δε φέρουν σκακιστική πληροφορία, δεν έχουν μεγάλη περιγραφική δύναμη για το σκοπό που τα θέλουμε. Μεγαλύτερα δέντρα, ώσπου να εξαχθεί και χρησιμοποιηθεί όλη η πληροφορία που αυτά φέρουν. Ειδικότερες πληροφορίες: Για να το αποδείξουμε αυτό θα συγκρίνουμε δύο περιπτώσεις μεταξύ τους: την περίπτωση κατά την οποία έχουμε αποκλειστικά πρωτογενή δεδομένα και αποκλειστικά σκακιστικά δεδομένα: Από τα παραπάνω παραδείγματα, λοιπόν, προκύπτουν τα εξής: Πρωτογενή δεδομένα: Size of tree: 517 Σκακιστικά δεδομένα: Size of tree: 23 (Περίπου το 4% του 517.) 22
Η διαφορά είναι τεράστια. Και αυτό γιατί για να εξαχθεί όλη η διαθέσιμη πληροφορία από τα απλά δεδομένα, χρειάζονται μεγάλο πλήθος ελέγχων, ενώ τα «σκακιστικά» χαρακτηριστικά δίνουν έτοιμη πληροφορία, έτοιμη για χρήση, δηλαδή για σκακιστικά συμπεράσματα. Τέλος, θα πούμε και κάτι ακόμα: Τα πρωτογενή attributes οδηγούν σε δημιουργία μεγάλων δέντρων και για έναν δεύτερο λόγο, ο οποίος είναι ο εξής απλός: ότι, δηλαδή, είναι εν πάσει περιπτώσει και ικανά να φέρουν μεγάλη πληροφορία για το ποιος νικάει. Αν δεν είχαν τόση πληροφορία, (γιατί πάντα κρύβονται κάποιες απτές πραγματικότητες πίσω από τις αλγεβρικές παραστάσεις), τότε και το δέντρο θα ήταν μικρότερο (όσο και να προσπαθούσε ο υπολογιστής δε θα μπορούσε να εξαγάγει το ίδιο ποσό πληροφορίας, γιατί δεν υπάρχει). Προς επίρρωσιν των ανωτέρων, παρατίθεται το παρακάτω παράδειγμα: === Run information === Scheme: weka.classifiers.trees.j48 -C 0.25 -M 2 Relation: ffordataminingkpk_ws55_proseg2-weka.filters.unsupervised.attribute.remove-r3,6- weka.filters.unsupervised.attribute.remove-r2 Instances: 163328 Attributes: 4 filediffkk rankdiffkk rankdiffkp Winning side Test mode: 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree ------------------ rankdiffkk <= -2 rankdiffkp <= -4 rankdiffkk <= -4 rankdiffkp <= -5 rankdiffkp <= -6: w (1872.0/176.0) rankdiffkp > -6 rankdiffkk <= -7: d (512.0/240.0) rankdiffkk > -7: w (2720.0/544.0) rankdiffkp > -5 rankdiffkk <= -6: d (1536.0/560.0) rankdiffkk > -6: w (2544.0/1072.0) rankdiffkk > -4: w (6144.0) rankdiffkp > -4 rankdiffkk <= -4 rankdiffkp <= -1 filediffkk <= -4 rankdiffkp <= -2 rankdiffkk <= -5 rankdiffkp > 4 filediffkk <= -4 rankdiffkp <= 5 filediffkk <= -6: w (136.0/58.0) filediffkk > -6: d (312.0/142.0) rankdiffkp > 5: d (240.0/90.0) filediffkk > -4 filediffkk <= 3: d (3008.0/726.0) filediffkk > 3 rankdiffkp <= 5 filediffkk <= 5: d (312.0/142.0) filediffkk > 5: w (136.0/58.0) rankdiffkp > 5: d (240.0/90.0) rankdiffkk > 4 rankdiffkp <= 4: w (6144.0) rankdiffkp > 4 rankdiffkk <= 5 rankdiffkp <= 5: w (896.0/320.0) rankdiffkp > 5: d (400.0/128.0) rankdiffkk > 5: w (2496.0) Number of Leaves : 68 Size of the tree : 135 Time taken to build model: 5.88 seconds Correctly Classified Instances 132040 80.8435 % Incorrectly Classified Instances 31288 19.1565 % Kappa statistic 0.3917 Mean absolute error 0.2574 Root mean squared error 0.3593 Relative absolute error 71.6041 % Root relative squared error 84.7501 % 23
Coverage of cases (0.95 level) 99.643 % Mean rel. region size (0.95 level) 91.0086 % Total Number of Instances 163328 Το δέντρο από 517 size έγινε 135 (74% μείωση!) και η ακρίβεια από 95.5% έγινε 80.8% (15% μείωση). Επίσης, στα μειονεκτήματα των πρωτογενών attributes πρέπει να συμπεριλάβουμε και το: Υπολογιστικό κόστος, το οποίο συνεπάγεται και παραπάνω χρόνο εκτέλεσης και μνήμη. Βελτιώσεις στα φινάλε τριών κομματιών: 3.1.5 Προσθήκη πληροφορίας για τη απόλυτη θέση των κομματιών Εδώ, κυρίως θα συμπεριλάβουμε πληροφορία για την απόλυτη θέση του λευκού βασιλιά, αλλά συγχρόνως εννοείται ότι περιλαμβάνεται εμμέσως και για τα άλλα κομμάτια, αφού τα κομμάτια συνδέονται μέσω της πληροφορίας για τη σχετική τους θέση (π.χ. filediffkk, κτλ). Αυτή είναι πραγματικά μια βελτίωση που θα κάνει τη διαφορά. Είναι απαραίτητη για το φινάλε KPK (και για τα άλλα φινάλε) για τον εξής λόγο: ως τώρα, με τα πρωτογενή attributes παρείχα στον υπολογιστή πληροφορία για τη σχετική θέση των κομματιών. (Θυμηθείται παρακαλώ τα filediffkk, όπου το Diff δηλώνει Difference, δηλαδή ΔΙΑΦΟΡΑ). Αφού μιλούμε για διαφορά μεταξύ των files (ή στον άξονα x θα μπορούσαμε να πούμε) και των ranks, είναι σίγουρο ότι δίνουμε τη σχετική θέση των κομματιών. Αν ξέρω το ένα, ξέρω, δηλαδή, και όλα τα άλλα. Αυτό είναι απαραίτητο. Είναι όμως απολύτως απαραίτητο αν θέλουμε να πετύχουμε το τέλειο, να μιλήσουμε και για τη σχετική θέση πάνω στη σκακιέρα. Γιατί; Είναι αυτονόητο. Άλλο είναι να είναι το πιόνι στην πάνω γωνία και άλλο στη μέση της σκακιέρας. Αλλά και το ίδιο το ματ, γίνεται (όταν έχουμε 3 κομμάτια) αναγκαστικά σε κάποια άκρη ή πλευρά της σκακιέρας. Άρα, για να μιλήσουμε με ακρίβεια για μια θέση πρέπει να λάβουμε υπ όψη μας τη σχετική θέση στη σκακιέρα. Αλλιώς αναφερόμαστε στην περίπτωση άπειρης σκακιέρας. Παράδειγμα: === Run information === Scheme: weka.classifiers.trees.j48 -C 0.25 -M 2 Relation: ffordataminingkpk_ws55_proseg2_skakiera Instances: 163328 Attributes: 9 filediffkk filediffkp filediffkp rankdiffkk rankdiffkp rankdiffkp wkfile wkrank Winning side Test mode: 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree ------------------ rankdiffkp <= -1: w (74772.0) rankdiffkp > -1 filediffkp <= -4 filediffkk <= 0 filediffkp <= -6: w (564.0) filediffkp > -6 rankdiffkp <= -3 rankdiffkp <= -4: w (256.0) rankdiffkp > -4 wkrank <= 1 filediffkp <= -5: w (30.0) 24
filediffkp > -5: d (50.0) wkrank > 1: w (144.0) rankdiffkp > -3 wkrank <= 2 rankdiffkp <= 5 wkrank <= 1 rankdiffkp <= 0 rankdiffkk <= -2: d (16.0) rankdiffkk > -2: w (4.0) rankdiffkp > 0: d (160.0) wkrank > 1 filediffkp <= -5 rankdiffkp <= -2: w (30.0) rankdiffkp > -2: d (57.0/7.0) filediffkp > -5 rankdiffkp <= -1: d (103.0) rankdiffkp > -1 wkrank <= 7: d (104.0/4.0) wkrank > 7 rankdiffkp <= 3: w (12.0) rankdiffkp > 3 filediffkp <= 4: d (12.0) filediffkp > 4: w (4.0) rankdiffkp > 4: d (380.0) filediffkp > 5: w (564.0) Number of Leaves : 1116 Size of the tree : 2231 Time taken to build model: 17.64 seconds Correctly Classified Instances 162386 99.4232 % Incorrectly Classified Instances 942 0.5768 % Kappa statistic 0.984 Mean absolute error 0.0075 Root mean squared error 0.0688 Relative absolute error 2.0996 % Root relative squared error 16.2171 % Coverage of cases (0.95 level) 99.8439 % Mean rel. region size (0.95 level) 50.9582 % Total Number of Instances 163328 Η διαφορά είναι αρκετή. Πλησιάζουμε το 100%. Ακολουθεί ένα ακόμα τρέξιμο, που φτάνει σε παρόμοια και μεγαλύτερη ακρίβεια. === Run information === Scheme: weka.classifiers.trees.j48 -C 0.25 -M 2 Relation: ffordataminingkpk_ws55_proseg2_skakiera-weka.filters.unsupervised.attribute.addexpression-eabs(a1)- Nexpression-weka.filters.unsupervised.attribute.AddExpression-Eabs(a2)-Nexpression- weka.filters.unsupervised.attribute.addexpression-eabs(a3)-nexpression-weka.filters.unsupervised.attribute.addexpression- Eabs(a4)-Nexpression-weka.filters.unsupervised.attribute.AddExpression-Eabs(a5)-Nexpression- weka.filters.unsupervised.attribute.addexpression-eabs(a6)-nexpression-weka.filters.unsupervised.attribute.addexpression- Ea7-a1-NbKFile-weka.filters.unsupervised.attribute.AddExpression-Ea8-a4-NbKRank- weka.filters.unsupervised.attribute.addexpression-ea7-a2-npfile-weka.filters.unsupervised.attribute.addexpression-ea8-a5- NPRank Instances: 163328 Attributes: 19 filediffkk filediffkp filediffkp rankdiffkk rankdiffkp rankdiffkp wkfile wkrank Winning side abs(a1) abs(a2) abs(a3) abs(a4) abs(a5) abs(a6) bkfile bkrank PFile PRank Test mode: 10-fold cross-validation 25