{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"2.1 Feature Selection.ipynb","provenance":[],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"markdown","metadata":{"id":"nfFSCymzzW9Y"},"source":["# Επιλογή χαρακτηριστικών "]},{"cell_type":"markdown","metadata":{"id":"uyx0SboYssSp"},"source":["Το μέγεθος ενός συνόλου δεδομένων εξαρτάται από το πλήθος των χαρακτηριστικών του καθώς και από το σύνολο των δειγμάτων του. \n","\n","Συχνά, σε ένα σύνολο δεδομένων μεγάλων διαστάσεων, περιέχει κάποια εντελώς άσχετα και ασήμαντα χαρακτηριστικά. Έχει παρατηρηθεί ότι η συμβολή αυτών των χαρακτηριστικών είναι συχνά μικρότερη στην προγνωστική μοντελοποίηση σε σύγκριση με τα κρίσιμα χαρακτηριστικά. Μπορεί επίσης να έχουν μηδενική συνεισφορά. Αυτά τα χαρακτηριστικά μπορεί όμως να προκαλέσουν μια σειρά προβλημάτων τα οποία με τη σειρά τους εμποδίζουν τη διαδικασία της αποτελεσματικής πρόβλεψης-μοντελοποίησης.\n","\n","\n","\n","**Επιλογή χαρακτηριστικών.**\n","\n","Είναι η διαδικασία επιλογής των πιο σημαντικών/σχετικών χαρακτηριστικών από ένα σύνολο δεδομένων με σκοπό τη βελτίωση της απόδοσης ενός μοντέλου μηχανικής μάθησης.\n","Είναι μια σημαντική διαδικασία πριν από την εκπαίδευση του μοντέλου.\n","\n","\n","\n","**Κατανόηση της σημασίας της επιλογής χαρακτηριστικών**\n","\n","Ο στόχος της επιλογής χαρακτηριστικών είναι:\n"," \n","1. βελτίωση της απόδοσης των προβλέψεων,\n","2. παροχή ταχύτερων και οικονομικότερων προβλέψεων,\n","3. παροχή καλύτερης κατανόησης της υποκείμενης διαδικασίας που δημιούργησε τα δεδομένα.\n","\n","Άρα, η επιλογή σημαντικών/σχετικών χαρακτηριστικών από ένα σύνολο δεδομένων:\n","\n","* Επιτρέπει στον αλγόριθμο μηχανικής μάθησης να εκπαιδεύεται γρηγορότερα, \n","* Μειώνει την πολυπλοκότητα ενός μοντέλου και διευκολύνει την ερμηνεία, \n","* Βελτιώνει την ακρίβεια ενός μοντέλου εάν επιλεγεί το σωστό υποσύνολο,\n","* Μειώνει το Overfitting."]},{"cell_type":"markdown","metadata":{"id":"V09nvcA8s7gE"},"source":[" **Ποια είναι διαφορά μεταξύ μείωσης διαστάσεων και επιλογής χαρακτηριστικών;**\n","\n","Και οι δύο μέθοδοι τείνουν να μειώσουν τον αριθμό των χαρακτηριστικών στο σύνολο δεδομένων, αλλά μια μέθοδος μείωσης διαστάσεων το κάνει δημιουργώντας νέους συνδυασμούς χαρακτηριστικών (μερικές φορές γνωστές ως μετασχηματισμός χαρακτηριστικών), ενώ οι μέθοδοι επιλογής χαρακτηριστικών περιλαμβάνουν και εξαιρούν χαρακτηριστικά που υπάρχουν στα δεδομένα χωρίς να τα αλλάζουν.\n","\n"]},{"cell_type":"markdown","metadata":{"id":"U6_C29YW4GQD"},"source":["## Διαφορετικοί τύποι γενικών μεθόδων επιλογής χαρακτηριστικών\n","\n","* **Μέθοδοι φίλτρου (Filter methods)**\n","\n","* **Μέθοδοι περιτύλιξης (Wrapper methods)**\n","\n","* **Ενσωματωμένες μέθοδοι (Embedded methods)**\n"]},{"cell_type":"markdown","metadata":{"id":"RWtzqKwm5VqM"},"source":["### Μέθοδοι φίλτρου (Filter methods)"]},{"cell_type":"markdown","metadata":{"id":"sRgZb2_K5xbn"},"source":["Xρησιμοποιούν στατιστική προσέγγιση που αποδίδει κάποια βαθμολογία (score) σε κάθε χαρακτηριστικό. \n","\n","Επιπλέον, τα χαρακτηριστικά ταξινομούνται σύμφωνα με τη βαθμολογία τους και μπορούν να διατηρηθούν ή να αφαιρεθούν από τα δεδομένα. \n","\n","Οι μέθοδοι φίλτρου είναι πολύ γρήγορες αλλά ενδέχεται να υπολείπονται όσον αφορά την ακρίβεια σε σύγκριση με τις άλλες μεθόδους. \n","\n","\n","Οι μέθοδοι φίλτρου κατατάσσουν κάθε χαρακτηριστικό με βάση κάποια μετρική και στη συνέχεια επιλέγουν τα χαρακτηριστικά υψηλότερης κατάταξης (highest-ranking features).\n","Ορισμένες από τις μετρήσεις είναι: \n","* **Διακύμανση**(variance - αφαίρεση σταθερών και σχεδόν σταθερών χαρακτηριστικών) \n","* **$χ^2$** (chi-square - χρησιμοποιείται για ταξινόμηση, προσδιορίζει την εξάρτηση δύο μεταβλητών). \n","* **Συντελεστές συσχέτισης** (correlation coefficients - αφαιρεί διπλά χαρακτηριστικά) \n","* **Κέρδος πληροφοριών ή αμοιβαίες πληροφορίες** (Information gain or mutual information - αξιολόγηση της εξάρτησης της ανεξάρτητης μεταβλητής στην πρόβλεψη της μεταβλητής στόχου. Με άλλα λόγια, καθορίζει την ικανότητα των ανεξάρτητων χαρακτηριστικών να προβλέπουν τη μεταβλητή στόχου). \n","\n","\n","**Πλεονεκτήματα των μεθόδων φίλτρου**\n","\n","* Οι μέθοδοι φίλτρου είναι αγνωστικά μοντέλα \n","* Βασίζονται εξ ολοκλήρου στα χαρακτηριστικά του συνόλου δεδομένων \n","* Υπολογιστικά πολύ γρήγορες\n","* Βασίζονται σε διαφορετικές στατιστικές μεθόδους\n","\n","**Μειονεκτήματα των μεθόδων φίλτρου** \n","\n","* Η μέθοδος φίλτρου εξετάζει μεμονωμένα χαρακτηριστικά για τον προσδιορισμό της σχετικής σημασίας τoυς. Αλλά ένα χαρακτηριστικό μπορεί να μην είναι χρήσιμο από μόνο του, αλλά ίσως να αποτελεί σημαντικό παράγοντα επιρροής όταν συνδυάζεται με άλλα χαρακτηριστικά. \n","\n","**Φίλτρο κριτηρίων για την επιλογή των καλύτερων χαρακτηριστικών** \n","\n","* Επιλέξτε ανεξάρτητα χαρακτηριστικά με υψηλή συσχέτιση με τη μεταβλητή στόχου \n"," και με χαμηλή συσχέτιση με άλλες ανεξάρτητες μεταβλητές \n","* Υψηλότερο κέρδος πληροφοριών ή αμοιβαίες πληροφορίες της ανεξάρτητης μεταβλητής\n"]},{"cell_type":"markdown","metadata":{"id":"pfnHhwDL5kt5"},"source":["### Μέθοδοι περιτύλιξης (Wrapper methods)"]},{"cell_type":"markdown","metadata":{"id":"2tYZ44vZ5lFJ"},"source":["Είναι μέθοδοι εξαντλητικής αναζήτηση: αξιολογούν όλους τους πιθανούς συνδυασμούς των χαρακτηριστικών της εισόδου για να βρουν το υποσύνολο των χαρακτηριστικών της εισόδου που θα έδινε την καλύτερη ακρίβεια για ένα επιλεγμένο μοντέλο.\n","\n","Υπολογιστικά πολύ ακριβό όταν ο αριθμός των χαρακτηριστικών εισόδου μεγαλώνει.\n","\n","Υπάρχουν διάφοροι τρόποι υλοποίησης: \n","\n","* **Επιλογή προς τα μπροστά (Forward selection)**\n","\n","Οι μέθοδοι αυτοί ξεκινούν με ένα null σύνολο χαρακτηριστικών και στη συνέχεια προσθέτoyn ένα χαρακτηριστικό εισόδου κάθε φορά και αξιολογoύν την ακρίβεια του μοντέλου. Αυτή η διαδικασία συνεχίζεται μέχρι να φτάσουμε σε μια συγκεκριμένη ακρίβεια με έναν προκαθορισμένο αριθμό χαρακτηριστικών.\n","\n","* **Επιλογή προς τα πίσω (Backward selection)**\n","\n","Ξεκινούν με όλα τα χαρακτηριστικά και στη συνέχεια αφαιρούν ένα χαρακτηριστικό κάθε φορά και αξιολογούν την ακρίβεια του μοντέλου. Διατηρείται το σύνολο των χαρακτηριστικών που αποδίδει την καλύτερη ακρίβεια στο σύνολο δεδομένων δοκιμής. \n","\n","\n","* **Συνδυασμός επιλογής προς τα εμπρός και απομάκρυνσης προς τα πίσω (Combination of forward selection and backward elimination)**\n","\n","Οι μέθοδοι σταδιακής επιλογής προς τα εμπρός και προς τα πίσω μπορούν να συνδυαστούν έτσι ώστε, σε κάθε βήμα, η διαδικασία να επιλέγει το καλύτερο χαρακτηριστικό και να αφαιρεί το χειρότερο από τα υπόλοιπα χαρακτηριστικά. \n","\n","\n","* **Αναδρομική εξάλειψη χαρακτηριστικών (Recursive Feature Εlimination)**\n","\n","Η αναδρομική εξάλειψη χαρακτηριστικών εκτελεί μια άπληστη αναζήτηση για να βρει το υποσύνολο χαρακτηριστικών με την καλύτερη απόδοση. Δημιουργεί επαναληπτικά μοντέλα και καθορίζει την καλύτερη ή τη χειρότερη απόδοση σε κάθε επανάληψη. \n","\n","Στη χειρότερη περίπτωση, εάν ένα σύνολο δεδομένων περιέχει N αριθμό χαρακτηριστικών, το RFE θα κάνει μια άπληστη αναζήτηση για συνδυασμούς λειτουργιών 2N.\n","\n","\n","**Πλεονεκτήματα** \n","\n","Τα μοντέλα διαθέτουν εξαρτήσεις μεταξύ των χαρακτηριστικών εισόδου. Επιλέγεται το μοντέλο με την υψηλότερη ακρίβεια με βάση το υποσύνολο των χαρακτηριστικών. \n","\n","**Μειονεκτήματα**\n","\n","* Υπολογιστικά πολύ ακριβό καθώς η εκπαίδευση πραγματοποιείται σε καθέναν από τους συνδυασμούς του σετ χαρακτηριστικών εισόδου.\n","* Όχι αγνωστικό μοντέλο "]},{"cell_type":"markdown","metadata":{"id":"hND2u9fd5le5"},"source":["### Ενσωματωμένες μέθοδοι (Embedded methods)"]},{"cell_type":"markdown","metadata":{"id":"N3M_3OoN5yt2"},"source":["Οι ενσωματωμένες μέθοδοι είναι επαναληπτικές μέθοδοι και εξάγουν προσεκτικά τα χαρακτηριστικά που συμβάλλουν περισσότερο στην εκπαίδευση για μια συγκεκριμένη επανάληψη. \n","\n","Οι μέθοδοι κανονικοποίησης είναι οι συνηθέστερα χρησιμοποιούμενες ενσωματωμένες μέθοδοι που εισάγοντας πρόσθετους περιορισμούς στη βελτιστοποίηση ενός αλγόριθμου πρόβλεψης (όπως ένας αλγόριθμος παλινδρόμησης) οδηγούν το μοντέλο προς χαμηλότερη πολυπλοκότητα (λιγότεροι συντελεστές). \n","Οι ενσωματωμένες μέθοδοι χρησιμοποιούν τις ιδιότητες των μεθόδων επιλογής χαρακτηριστικών φίλτρου και περιτυλίγματος. \n","\n","Παραδείγματα τέτοιων μεθόδων είναι L1 Regularization (LASSO), Elastic Net, L2 Regularization (Ridge Regression) κ.λπ."]},{"cell_type":"markdown","metadata":{"id":"i-m-eNoBqEd8"},"source":["### Kανονικοποίηση\n","\n","Η κανονικοποίηση είναι μια τεχνική προσπαθεί να μειώσει την πολυπλοκότητα του μοντέλου τιμωρώντας το συνάρτηση απώλειας(loss function).\n","\n","Η συνάρτηση απώλειας είναι το άθροισμα της τετραγωνικής διαφοράς μεταξύ της πραγματικής τιμής και της προβλεπόμενης τιμής"]},{"cell_type":"markdown","metadata":{"id":"sHVWU7tWqEaz"},"source":["Η συνάρτηση απώλειας για γραμμική παρεμβολή με 4 μεταβλητές εισόδου είναι:\n","\n","\n","$L(x,y)=\\sum_{i=1}^{n}{(y_i-f(x_i))^2}$\n","\n","όπου \n","\n","$f(x_i)=h_wx=w_0+w_1χ_1+w_2χ_2^2+w_3χ^3+w_4χ^4+w_5χ^5$"]},{"cell_type":"markdown","metadata":{"id":"-cUxXWl_qEX0"},"source":["Καθώς ο βαθμός των χαρακτηριστικών εισόδου αυξάνει, το μοντέλο γίνεται πολύπλοκο. \n","\n","Η κανονικοποίηση λειτουργεί με την υπόθεση ότι τα μικρότερα βάρη δημιουργούν απλούστερο μοντέλο και έτσι βοηθούν στην αποφυγή της υπερεκπαίδευσης.\n","\n","Όταν τιμωρούμε τα βάρη $w_4$ και $w_5$ και τα κάνουμε πολύ μικρά, πολύ κοντά στο μηδέν τότε οι όροι γίνονται αμελητέοι και οδηγούμαστε σε απλοποίηση του μοντέλου."]},{"cell_type":"markdown","metadata":{"id":"b6b_0DpDqESD"},"source":["**Τι γίνεται όμως αν οι μεταβλητές εισόδου επηρεάζουν την έξοδο;**\n","\n","Για να διασφαλίσουμε ότι λαμβάνουμε υπόψη όλες τις μεταβλητές εισόδου, τιμωρούμε όλα τα βάρη κάνοντάς τα μικρά. Αυτό κάνει επίσης το μοντέλο απλούστερο και λιγότερο επιρρεπές σε υπερεκπαίδευση.\n","\n","Για αυτό προσθέτουμε τον όρο κανονικοποίησης στο άθροισμα των τετραγώνων διαφορών μεταξύ της πραγματικής και της προβλεπόμενης τιμής. Ο όρος τακτοποίησης διατηρεί τα βάρη μικρά κάνοντας το μοντέλο απλούστερο και αποφεύγοντας την υπερεκπαίδευση. \n","\n","Το **λ** είναι η παράμετρος του όρου ποινής ή κανονικοποίησης που καθορίζει πόσο θα τιμωρήσει τα βάρη. \n","\n","* Όταν το λ είναι μηδέν τότε ο όρος κανονικοποίησης γίνεται μηδέν (αρχική συνάρτηση απώλεια).\n","\n","* Όταν το λ είναι μεγάλο, τότε τιμωρούμε τα βάρη και πλησιάζουν το μηδέν.Έτσι λαμβάνουμε ένα πολύ απλό μοντέλο που έχει υψηλή μεροληψία (bias) ή δεν είναι κατάλληλο ($h_wx=w_0$)."]},{"cell_type":"markdown","metadata":{"id":"jLl90ETSqEJd"},"source":["$L(x,y)=\\sum_{i=1}^{n}{(y_i-f(x_i))^2}+λ\\sum_{i=1}^{n}{w_i^2}$"]},{"cell_type":"markdown","metadata":{"id":"aIKT-MYCv3tD"},"source":["Ποια είναι η σωστή τιμή για το **λ**\n","\n","Πρέπει να βρούμε μια βέλτιστη τιμή λ ώστε το σφάλμα γενίκευσης να είναι μικρό. \n","Μια απλή προσέγγιση θα ήταν να δοκιμάσουμε διαφορετικές τιμές λ σε ένα υποσύνολο δεδομένων, να κατανοήσουμε τη μεταβλητότητα της συνάρτησης απώλειας και στη συνέχεια να τη χρησιμοποιήσετε σε ολόκληρο το σύνολο δεδομένων."]},{"cell_type":"markdown","metadata":{"id":"H8sN5602wghN"},"source":["### Κανονικοποίηση L1 και L2\n","\n","#### L1 Regularization ή Lasso ή L1 norm\n","\n","Η κανονικοποίηση L1 ουσιαστικά πραγματοποιεί επιλογή χαρακτηριστικών, εκχωρώντας στα \"ασήμαντα\" χαρακτηριστικά εισόδου μηδενικό βάρος και \"χρήσιμα\" χαρακτηριστικά μη μηδενικό βάρος. \n","\n","Στην κανονικοποίηση L1 τιμωρούμε την απόλυτη τιμή των βαρών. \n","\n","Το Lasso παράγει ένα μοντέλο που είναι απλό, ερμηνεύσιμο και περιέχει ένα υποσύνολο χαρακτηριστικών εισόδου\n","\n","\n","$L(x,y)=\\sum_{i=1}^{n}{(y_i-f(x_i))^2}+λ\\sum_{i=1}^{n}{|w_i|}$\n","\n","\n","\n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"gSr96dglz_kB"},"source":["#### L2 Regularization ή Ridge Regularization\n","\n","Στην κανονικοποίηση L2, ο όρος κανονικοποίησης είναι το άθροισμα του τετραγώνου όλων των βαρών των χαρακτηριστικών.\n","\n","Η κανονικοποίηση L2 αναγκάζει τα βάρη να είναι μικρά, αλλά δεν τα καθιστά μηδενικά και δεν είναι αραιή λύση. \n","\n","Το L2 δεν είναι ισχυρό για τις ακραίες τιμές (outliers)καθώς οι τετραγωνικοί όροι μεγενθύνουν τις διαφορές σφάλματος των ακραίων τιμών και ο όρος κανονικοποίησης προσπαθεί να το διορθώσει τιμωρώντας τα βάρη Η παλινδρόμηση Ridge αποδίδει καλύτερα όταν όλα τα χαρακτηριστικά εισόδου επηρεάζουν την έξοδο και όλα με βάρη έχουν περίπου ίσο μέγεθος\n","\n","$L(x,y)=\\sum_{i=1}^{n}{(y_i-f(x_i))^2}+λ\\sum_{i=1}^{n}{w_i^2}$"]},{"cell_type":"markdown","metadata":{"id":"H3l_SrHt0Qpo"},"source":[" \n","\n","| | L1 | L2 |\n","|------|------|------|\n","| Ποινές | άθροισμα της απόλυτης τιμής των βαρών | άθροισμα των τετραγωνικών βαρών|\n","|Λύσεις | αραιές και πολλαπλές λύσεις|μη αραιές και μία λύση sum of square weights |\n","|Επιλογή χαρακτηριστικών | ναι|όχι|\n","| Ακραίες τιμές | ισχυρό| ασθενές|\n","|Καλύτερη πρόβλεψη| |όταν η μεταβλητή εξόδου είναι συνάρτηση όλων των χαρακτηριστικών εισόδου, μαθαίνει περίπλοκα μοτίβα δεδομένων| \n","\n","Τόσο η κανονικοποίηση L1 όσο και η L2 έχουν τα δικά τους πλεονεκτήματα και αδυναμίες."]},{"cell_type":"markdown","metadata":{"id":"3ftkxecC0DdS"},"source":["\n","\n","#### Elastic net regularization \n","Είναι ένας συνδυασμός των κανονικοποιήσεων L1 και L2. "]},{"cell_type":"markdown","metadata":{"id":"0uqcIFNz5yxA"},"source":["## Παράδειγμα επιλογής χαρακτηριστικών"]},{"cell_type":"markdown","metadata":{"id":"10cEL7L45yzn"},"source":["Το dataset που θα χρησιμοποιήσουμε είναι το Pima Indian diabetes απο το [UCI Machine Learning Repository], το διασημότερο αποθετήριο datasets για Machine Learning.(http://archive.ics.uci.edu/ml/index.php).\n","\n","Το \"Pima Indians Diabetes data set (ή Pima)\" περιλαμβάνει 768 δείγματα από γυναίκες άνω των 21 με καταγωγή από τους ινδιάνους Pima (Pima people). \n","\n","\n","Με βάση 8 βιολογικά χαρακτηριστικά προσπαθούμε να αποφασίσουμε αν ένα άτομο είναι διαβητικό ή όχι. Αυτό είναι ένα δυαδικό πρόβλημα ταξινόμησης όπου όλα τα χαρακτηριστικά είναι αριθμητικά και έχουν διαφορετικές κλίμακες. Το pima dataset αποτελεί ένα καλό παράδειγμα για το πώς ένα σύνολο δεδομένων μπορεί να επωφεληθεί από την προεπεξεργασία.\n","\n","Τα αρχικά στάδια είναι όμοια για οποιαδήποτε μέθοδο προεπεξεργασίας και να χρησιμοποιήσουμε και είναι τα εξής:\n","\n","* \"Φορτώνουμε\" το σύνολο δεδομένων από μια διεύθυνση URL ή απευθείας διαβάστε το αν ανήκει στο toy datasets του scikit-learn.\n","* Εφαρμόζουμε ένα μετασχηματισμό προεπεξεργασίας στις μεταβλητές εισόδου.\n","*Συγκεντρώνουμε τα δεδομένα για να δείξουμε την αλλαγή.\n","*Διαχωρίζουμε το σύνολο δεδομένων στις μεταβλητές εισόδου και εξόδου για μηχανική μάθηση."]},{"cell_type":"code","metadata":{"trusted":true,"id":"uX6zjL5NBN4B","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604325065786,"user_tz":-120,"elapsed":1852,"user":{"displayName":"Katerina A","photoUrl":"","userId":"12077637925353215781"}},"outputId":"64a1e98d-3a77-433b-94ed-9a20ba0fff4b"},"source":["# Load CSV using Pandas from URL\n","\n","import pandas as pd\n","import scipy as sc\n","import numpy as np\n","from sklearn.preprocessing import MinMaxScaler\n","\n","url = \"https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv\"\n","\n","# Because thε CSV doesn't contain any header, we add column names using the description from the original dataset website\n"," # Number of times pregnant / Plasma glucose concentration a 2 hours in an oral glucose tolerance test\n"," # Diastolic blood pressure (mm Hg) / Triceps skin fold thickness (mm)\n"," # 2-Hour serum insulin (mu U/ml) / Body mass index (weight in kg/(height in m)^2)\n"," # Diabetes pedigree function / Age (years)\n","\n","names = ['NumberPreg', 'PlasGlucconce', 'BloodPres', 'SkinThick', 'TwoHourSerIns', 'BMI', 'DiPedFunc', 'Age', 'Class']\n","dataset = pd.read_csv(url, names=names)\n","\n","# Check the shape of the data: we have 768 rows and 9 columns:\n","# the first 8 columns are features while the last one\n","# is the supervised label (1 = has diabetes, 0 = no diabetes)\n","\n","print(dataset.shape)\n","array = dataset.values"],"execution_count":null,"outputs":[{"output_type":"stream","text":["(768, 9)\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"8bT5zrgJ5y2m"},"source":["Οπτικοποιούμε έναν πίνακα με τις πρώτες σειρές του συνόλου δεδομένων, με σκοπό την κατανόηση της μορφής των δεδομένων."]},{"cell_type":"code","metadata":{"id":"66TyXdN7kCwN","colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"status":"ok","timestamp":1604325071222,"user_tz":-120,"elapsed":1102,"user":{"displayName":"Katerina A","photoUrl":"","userId":"12077637925353215781"}},"outputId":"a00441dc-f8d5-4714-c837-4d94a1487add"},"source":["dataset.head()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
NumberPregPlasGlucconceBloodPresSkinThickTwoHourSerInsBMIDiPedFuncAgeClass
061487235033.60.627501
11856629026.60.351310
28183640023.30.672321
318966239428.10.167210
40137403516843.12.288331
\n","
"],"text/plain":[" NumberPreg PlasGlucconce BloodPres SkinThick ... BMI DiPedFunc Age Class\n","0 6 148 72 35 ... 33.6 0.627 50 1\n","1 1 85 66 29 ... 26.6 0.351 31 0\n","2 8 183 64 0 ... 23.3 0.672 32 1\n","3 1 89 66 23 ... 28.1 0.167 21 0\n","4 0 137 40 35 ... 43.1 2.288 33 1\n","\n","[5 rows x 9 columns]"]},"metadata":{"tags":[]},"execution_count":2}]},{"cell_type":"markdown","metadata":{"id":"hMfmg2KysONx"},"source":["Χωρίζουμε τον πίνακα σε στοιχεία εισόδου και εξόδου \n","X: Πίνακας Χαρακτηριστικών Y: Πίνακας Ετικετών"]},{"cell_type":"code","metadata":{"id":"yG6KBNaikW3l"},"source":["X = array[:,0:8]\n","Y = array[:,8]"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"9xrCTrzjwugq"},"source":["#### Μέθοδοι φίλτρου (Filter methods): Εφαρμογή Chi-Square "]},{"cell_type":"markdown","metadata":{"id":"T533Q2Ahs0uC"},"source":["Αρχικά, εφαρμόζουμε μια στατιστική δοκιμή Chi-Square για τα μη αρνητικά χαρακτηριστικά για να επιλέξουμε 4 από τα καλύτερα χαρακτηριστικά του συνόλου των δεδομένων. \n","\n","Η βιβλιοθήκη scikit-learn παρέχει την συνάρτηση `SelectKBest` που μπορεί να χρησιμοποιηθεί με μια σειρά διαφορετικών στατιστικών δοκιμών με σκοπό την επιλογή συγκεκριμένου αριθμού χαρακτηριστικών. Εδώ επιλέγουμε ως συνάρτηση την Chi-Square (score_func=chi2). \n","\n","Για περισσότερα δείτε για την [chi2 στην τεκμηρίωση scikit-learn](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.chi2.html#sklearn.feature_selection.chi2)"]},{"cell_type":"code","metadata":{"id":"GzR9B_O_kcMr"},"source":["# Import the necessary libraries first\n","from sklearn.feature_selection import SelectKBest\n","from sklearn.feature_selection import chi2"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"zCHVyHoDkfO0","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604325218440,"user_tz":-120,"elapsed":634,"user":{"displayName":"Katerina A","photoUrl":"","userId":"12077637925353215781"}},"outputId":"db5ae709-8909-4760-81df-3132c18e2579"},"source":["# Feature extraction\n","test = SelectKBest(score_func=chi2, k=4)\n","fit = test.fit(X, Y)\n","\n","# Summarize scores\n","np.set_printoptions(precision=3)\n","\n","print(names[0:8])\n","print(fit.scores_)\n","\n","features = fit.transform(X)\n","\n","# Summarize selected features\n","print(\"Εμφάνιση των 5 πρώτων τιμών του πίνακα των 4 επιλεγμένων χαρακτηριστικών\")\n","print(features[0:5,:])"],"execution_count":null,"outputs":[{"output_type":"stream","text":["['NumberPreg', 'PlasGlucconce', 'BloodPres', 'SkinThick', 'TwoHourSerIns', 'BMI', 'DiPedFunc', 'Age']\n","[ 111.52 1411.887 17.605 53.108 2175.565 127.669 5.393 181.304]\n","Εμφάνιση των 5 πρώτων τιμών του πίνακα των 4 επιλεγμένων χαρακτηριστικών\n","[[148. 0. 33.6 50. ]\n"," [ 85. 0. 26.6 31. ]\n"," [183. 0. 23.3 32. ]\n"," [ 89. 94. 28.1 21. ]\n"," [137. 168. 43.1 33. ]]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"CCSNq57nuI8a"},"source":["Οι βαθμολογίες των χαρακτηριστικών με την μεγαλύτερη τιμή προσδιορίζουν ποια είναι τα καλύτερα χαρακτηριστικά για την εκπαίδευση του μοντέλου. Αυτά σύμφωνα με την συνάρτηση Chi-Squared είναι τα εξής: 'PlasGlucconce' (1411.887), 'TwoHourSerIns'(2175.565), 'BMI' (127.669), 'Age'(181.304)."]},{"cell_type":"markdown","metadata":{"id":"GkGj9N6ZxinU"},"source":["### Μέθοδοι περιτύλιξης (Wrapper methods)"]},{"cell_type":"markdown","metadata":{"id":"GvNDxnQawn3r"},"source":["Στη συνέχεια, θα εφαρμόσετε το Recursive Feature Elimination που είναι μία μέθοδος περιτύλιξης.\n","\n","Το Recursive Feature Elimination (ή RFE) λειτουργεί αφαιρώντας αναδρομικά χαρακτηριστικά και δημιουργώντας ένα μοντέλο με αυτά τα χαρακτηριστικά που παραμένουν. Χρησιμοποιεί την ακρίβεια του μοντέλου για να προσδιορίσει ποια χαρακτηριστικά (και συνδυασμός χαρακτηριστικών) συμβάλλουν περισσότερο στην πρόβλεψη του χαρακτηριστικού στόχου. \n","\n","Δείτε για την [RFE στην τεκμηρίωση scikit-learn](https://https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html#sklearn.feature_selection.RFE)."]},{"cell_type":"code","metadata":{"id":"rcDjrvbvnf76"},"source":["# Import your necessary dependencies\n","from sklearn.feature_selection import RFE\n","from sklearn.linear_model import LogisticRegression"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"X9S9X-1Cyqz1"},"source":["Στη συνέχεια χρησιμοποιούμε το RFE με τον ταξινομητή Logistic Regression για να επιλέξετε τα 3 καλύτερα χαρακτηριστικά. Η επιλογή του αλγορίθμου δεν έχει σημασία όσο είναι συνεπής."]},{"cell_type":"code","metadata":{"id":"_1acfcerkfXL","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604325491241,"user_tz":-120,"elapsed":1052,"user":{"displayName":"Katerina A","photoUrl":"","userId":"12077637925353215781"}},"outputId":"cceda0d3-9fd9-448d-c7ae-57a3fef5c539"},"source":["# Feature extraction\n","model = LogisticRegression()\n","rfe = RFE(model, 3)\n","fit = rfe.fit(X, Y)\n","print(\"Num Features: %s\" % (fit.n_features_))\n","print(\"Selected Features: %s\" % (fit.support_))\n","print(\"Feature Ranking: %s\" % (fit.ranking_))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Num Features: 3\n","Selected Features: [ True False False False False True True False]\n","Feature Ranking: [1 2 4 5 6 1 1 3]\n"],"name":"stdout"},{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1):\n","STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n","\n","Increase the number of iterations (max_iter) or scale the data as shown in:\n"," https://scikit-learn.org/stable/modules/preprocessing.html\n","Please also refer to the documentation for alternative solver options:\n"," https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n"," extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n"],"name":"stderr"}]},{"cell_type":"markdown","metadata":{"id":"3wQncL-B1QCX"},"source":["Οι τιμές στο πίνακα feature Ranking δείχνουν τν κατάταξη των χαρατηριστικών. Οπότε τα 3 χαρακτηριστικά με τιμή \"1\" είναι τα πιο ισχυρά. Η RFE επέλεξε τα εξής χαρακτηριστικά ως τα πιο ισχυρά: NumberPreg,\tBMI,\tDiPedFunc."]},{"cell_type":"markdown","metadata":{"id":"mKlFZehcwsRh"},"source":["### Ενσωματωμένες μέθοδοι (Embedded methods)"]},{"cell_type":"markdown","metadata":{"id":"pnnvWQvIym_v"},"source":["Θα χρησιμοποιήσουμε ως ενσωματωμένη μέθοδο την παλινδρόμηση Ridge που είναι βασικά μια τεχνική κανονικοποίησης."]},{"cell_type":"code","metadata":{"id":"vhpKvwgPkfaM"},"source":["# First things first\n","from sklearn.linear_model import Ridge"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Vaz-2qZf3zLQ"},"source":[" Η παλιδρόμηση Ridge θα μας βοηθήσει για να προσδιορίσουμε τον συντελεστή $R^2$."]},{"cell_type":"code","metadata":{"id":"1YPZD_bCkfdM","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604325537368,"user_tz":-120,"elapsed":627,"user":{"displayName":"Katerina A","photoUrl":"","userId":"12077637925353215781"}},"outputId":"60836c10-c35e-4589-cd04-47e8a936a585"},"source":["ridge = Ridge(alpha=1.0)\n","ridge.fit(X,Y)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,\n"," normalize=False, random_state=None, solver='auto', tol=0.001)"]},"metadata":{"tags":[]},"execution_count":11}]},{"cell_type":"code","metadata":{"id":"K1bNUxd3kfgS"},"source":["# A helper method for pretty-printing the coefficients\n","def pretty_print_coefs(coefs, names = None, sort = False):\n"," if names == None:\n"," names = [\"X%s\" % x for x in range(len(coefs))]\n"," lst = zip(coefs, names)\n"," if sort:\n"," lst = sorted(lst, key = lambda x:-np.abs(x[0]))\n"," return \" + \".join(\"%s * %s\" % (round(coef, 3), name)\n"," for coef, name in lst)\n"," "],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"w-MT8x9kqG3T","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604325657667,"user_tz":-120,"elapsed":1074,"user":{"displayName":"Katerina A","photoUrl":"","userId":"12077637925353215781"}},"outputId":"8a0294dc-484b-4698-f55a-2e75b4ba114c"},"source":["print (\"Ridge model:\", pretty_print_coefs(ridge.coef_))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Ridge model: 0.021 * X0 + 0.006 * X1 + -0.002 * X2 + 0.0 * X3 + -0.0 * X4 + 0.013 * X5 + 0.145 * X6 + 0.003 * X7\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"0Hu6ESQj4agU"},"source":["Kατά την εφαρμογή της παλινδρόμησης Ridge χρησιμοποιούμε L2-κανονικοποίηση:\n","τα συσχετισμένα χαρακτηριστικά τείνουν να λαμβάνουν παρόμοιους συντελεστές ενώ τα χαρακτηριστικά με αρνητικούς συντελεστές δεν συνεισφέρουν τόσο πολύ.\n","\n","Σε ένα πιο περίπλοκο σενάριο με πολλά χαρακτηριστικά η L2 κανονικοποίηση θα βοηθήσει στη διαδικασία λήψης αποφάσεων επιλογής χαρακτηριστικών. "]},{"cell_type":"markdown","metadata":{"id":"oePoCEmj5ru0"},"source":["Η επιλογή χαρακτηριστικών είναι ουσιαστικά ένα μέρος της προεπεξεργασίας δεδομένων που θεωρείται ότι είναι το πιο χρονοβόρο μέρος κάθε διαδικασίας μηχανικής μάθησης. "]}]}