Προς το περιεχόμενο

Programming & Data-Science


dr_frozenarm

Προτεινόμενες αναρτήσεις

Αναρωτιεμαι πόσοι εδώ μέσα ασχολούνται με προγραμματισμό και data-science? 

Σκεφτόμουν μήπως καθόμουν και ετοιμάζα κανά introductory guide για αρχάριους που να ενδιαφέρονται σχετικά με το data-science/ML . Ολα τα προγραμμάτα είναι open-source οπότε θα ήταν έυκολο να γίνει.

Οπότε η ερώτηση μου ειναι πόσοι ήδη ασχολούνται με κάτι σχετικό και πόσοι ενδιαφέρονται γενικά για ένα τέτοιο θέμα? 

  • Like 17
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ενδιαφέρον θέμα. Προσωπικά ψάχνω πως θα κάνω train ένα μοντέλο στο tensorflow για face recognition. Αν έχεις γνώσεις στο αντικείμενο είναι καλοδεχούμενες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, fisfirikos είπε

Ενδιαφέρον θέμα. Προσωπικά ψάχνω πως θα κάνω train ένα μοντέλο στο tensorflow για face recognition. Αν έχεις γνώσεις στο αντικείμενο είναι καλοδεχούμενες.

To tensorflow ναι το χρησιμοποιω αλλά για face-recognition που ενδιαφέρεσε πρέπει πρώτα να κατανοήσεις το standard fully connected feed forward networks πριν προχωρήσεις σε Convolutional Neural Networks (CNN) που χρειάζεται. Επιπλέον πρέπει να έχεις πρόσβαση σε GPU and Cuda για να τα τρέξεις αυτά. 

Εγώ σκεφτόμουν αρχικά κάτι σε πιο βασικό "εισαγωγικό" σε Python3-based και σταδιακά αν υπάρχει ενδιαφέρον να περάσουμε και σε πιο περίπλοκα οπως είναι τo Deep-Learning.

Καλώς θα ξεκινήσω να ετοιμάζω το υλικο και βλέπω πως παει γιατί με τη δουλεια δεν μου μένει και πολύς χρόνος.

Thanks for the feedback.

 

Επεξ/σία από dr_frozenarm
  • Like 4
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Μέρος 1

 

1.1 Τι είναι η επιστήμη των δεδομένων (data-science) ?

Η Επιστήμη των Δεδομένων (Data-Science) είναι ένα από τους ταχύτερα αναπτυσσόμενος κλάδους της επιστήμης και συνδυάζει αρκετούς προυπάρχοντες επιστημονικούς τομείς, κυρίως αλλά όχι αποκλειστικά αυτούς της πληροφορικής και των μαθηματικών.[1] Μάλιστα ψηφίστηκε ως το πιο σέξι επάγγελμα του 21ου αιώνα σύμφωνα με το Harvard Business Review.[2] Αναμένεται να παραμένει ταχύτατα αναπτυσσόμενος κλάδος προσφέροντας καλά αμειβόμενες θέσεις εργασίες και στα επόμενα χρόνια.[3]

 Με την έκρηξη του όγκου διαθέσιμων δεδομένων στον διαδίκτυο, στη βιοΐατρική, στη φυσική, οικονομικών, καθώς και σε άλλους τομείς οδήγησε στη ανάγκη ανάπτυξης εργαλείων, αλγόριθμων καθώς και συστημάτων για αποθήκευση, ανάλυση, απεικόνιση και εντέλει εξόρυξη πολύτιμης γνώσης. Η γνώση αυτή  μπορεί κατόπιν να χρησιμοποιηθεί για βελτιωθούν υπάρχουσες μέθοδοι, να κατανοήσουμε καλύτερα το περιβάλλον μας είτε για να γίνει καλύτερη αξιοποίησή των πεπερασμένων πόρων.

1.2 Έκρηξη του όγκου διαθέσιμων δεδομένων.

Ας δούμε πρώτα μερικά χειροπιαστά παραδείγματα όπου είχαμε πραγματική έκρηξη όγκου δεδομένων τα τελευταία 10-20 χρόνια για να αντιληφθούμε την έκταση του θέματος. Καθώς ο επιστημονικός χώρος είναι ο τομέας που δραστηριοποιόυμαι και γνωρίζω αρκετά παραδείγματα θα αναφερθώ σε συγκεκριμένα παραδείγματα από αυτόν.

O European Bioinformatics Institute(ΕΒΙ) είναι ο μεγαλύτερος Ευρωπαϊκός οργανισμός βιοπλήροφρικής που ασχολείται με την ανάπτυξη νέων τεχνολογιών για αλληλούχιση, αποθήκευση καθώς και αναζήτηση πληροφοριών που έχουν σχέση με αλληλουχίες και λειτουργίες γονίδιων και πρωτεϊνών σε οργανισμούς.[4] Επίσης περιλαμβάνει βάσεις δεδομένων που σχετίζονται με την έκφραση γονιδίων, χημικής βιολογίας (chemical-biology), λυμένες κρυσταλλικές δομές πρωτεϊνών (Protein Data-bank), βιβλιογραφικές αναφορές και πολλές άλλες.[5] Για να ανταπεξέλθει στον αυξανόμενο όγκο δεδομένων που ανεβαίνουν από πανεπιστήμια και ερευνητικούς οργανισμούς προχώρησε σε αύξηση των συστημάτων αποθήκευσης το 2009 από 10 Pepabytes σε 75 PΒ το 2015, εικόνα 1.[6] Ο ρυθμός αύξησης των δεδομένων αναμένεται να συνεχίσει να αυξάνεται με παρόμοιο και ταχύτερο ρυθμό και στο μέλλον.

image.png.77d973265841e7ae14399c8bd64f31dc.png

Εικόνα 1. Αύξηση όγκου δεδομένων 2009-2015 στη Ευρωπαϊκό Οργανισμό Βιοπληροφορικής (EBM-EBI). Σε λιγότερα από δέκα χρόνια ο αποθηκευτικός χώρος που στεγάζει βάσης DNA, πρωτεϊνών και χημικών μορίων αυξήθηκε για να ανταπεξέλθει στα δεδομένα που ανεβαίνουν από λιγότερα από 10 PetaBytes σε περισσότερα από 75 PB. [5]

 

Ένα άλλος ευρωπαϊκός οργανισμός με εξωφρενικό ρυθμό αύξησης όγκου δεδομένων είναι αυτός του European Organization for Nuclear Research (CERN).[7] Οποίος μόνο κατά τον μήνα του Οκτωβρίου του 2017 συνέλεξε δεδομένα μεγέθους 12.3 Petabytes από τη λειτουργία του Μεγάλου Επιταχυντή Αδρονίων (Συγκρουόμενων Δεσμών Αδρονίων) (Large Hadron Collider LHC).[8,9] Πιο πρόσφατα επιτεύχθηκε η για πρώτη φορά φωτογράφιση (η καλύτερα απεικόνιση) μιας μαύρης τρύπας από τους αστρονόμους της Event Horizon Telescope (EHT) όπου και συλλέχθηκαν συνολικά 5 PetaBytes δεδομένων.[10,11,12] Βλέπουμε ότι με την ραγδαία ανάπτυξη υπολογιστικών συστημάτων και της επιστημονικής εξέλιξης έχουμε μια άνευ προηγούμενου αύξηση του όγκου των διαθέσιμων δεδομένων.

Αν πάμε τώρα και δούμε την αύξηση του όγκου δεδομένων που υπάρχουν στο internet εδώ τα νούμερα πραγματικά ζαλίζουν.[13] Υπολογίζεται ότι η χρήση του YouTube αυξήθηκε με τους χρήστες να ανεβάζουν βίντεο 400 ωρών κάθε λεπτό κατά τα έτη 2014-2016. Ενώ το 2019 οι χρήστες παρακολουθούν 4,333,560 βίντεο κάθε λεπτό. Πάνω από 100 εκατομμύρια φωτογραφίες ανεβαίνουν στο Instagram σε καθημερινή βάση.[14] Τελευταίο παράδειγμα που θα αναφέρουμε εδώ είναι αυτό του γνωστού σε όλους μας Google Earth του οποίου οι δορυφορικές φωτογραφίες καταλαμβάνουν περισσότερα από 20 Petabytes.[15,16]

1.3 Τι ακριβώς περιλαμβάνει η Επιστήμη των Δεδομένων?

Όπως προαναφέρθηκε ο χώρος συνδυάζει αρκετούς τομείς, οι οποίοι προϋπήρχαν αλλά πλέον έχουν τεθεί κάτω από την ομπρέλα της Επιστήμης των Δεδομένων (Data-Science). Οι τομείς που συνδυάζονται είναι αυτοί της στατιστικής (statistics), ανάλυσης δεδομένων (data-analytics), μηχανικής μάθησης (machine learning) καθώς και άλλων συγγενών μεθόδων, όπως είναι η επιστήμη της υπολογιστών (computer science) και θεωρία πληροφορίας (Information theory), εικόνα 2 [17,18,19]. Ο στόχος της Επιστήμης των Δεδομένων είναι αυτός της συλλογής, οργάνωσης και ανάλυσης δεδομένων με απώτερο στόχο της εξαγωγής χρήσιμης γνώσης (knowledge extraction). Καλώς ορισμός υπάρχει στην Ελληνική σελίδα της Wikipedia για όσους ενδιαφέρονται να μάθουν περισσότερα .[20]

 

image.png.e6e0eef223e7c369f8fb3f544091fe94.png

Εικόνα 2. Διάγραμμα που δείχνει τους τομείς που συνδυάζονται και σχηματίζουν αυτόν της επιστήμης των Δεδομένων (Data-Science).[19]

 

1.4 Τι χρειάζομαι για να ασχοληθώ με την Επιστήμη των Επιστημών?

Τυπικά κάποιος που ενδιαφέρεται να ασχοληθεί χρειάζεται να έχει καλές βάσεις/γνώσεις μαθηματικών, στατιστικής καθώς και μερική γνώση προγραμματισμού καθώς τα περισσότερα εργαλεία που χρησιμοποιούνται είναι command line (CL), αν και φυσικά υπάρχουν εργαλεία που προσφέρουν γραφικό περιβάλλον εργασίας.

1.5 Αξίζει να ασχοληθεί κάποιος με την Επιστήμη των Επιστημών?

Κατά την άποψη μου ναι καθώς γιατί πέρα από ένα πολύ ενδιαφέρον επιστημονικό χώρο προσφέρει και (τουλάχιστον στο εξωτερικό) επαγγελματική απορρόφηση και γενικά υψηλό μισθό, ειδικά αν συνδυαστεί και με κάποιον domain-knowledge. Για να αναφέρω σύντομος πως έτυχε και ασχολήθηκα με τον χώρο, να πω ότι ξεκίνησα σαν βιολόγος με ενδιαφέρον για την βιοπληροφορική και τη πληροφορική γενικά. Μετά το πτυχίο βιολογίας, πραγματοποίησα μεταπτυχιακό στη βιοπληροφορική και Υπολογιστική Βιολογία όπου για πρώτη φορά ήρθα σε επαφή με τον χώρο της ανάλυσης δεδομένων και μηχανικής μάθησης και που με τράβηξε αρκετά. Εν συνέχεια αποφάσισα να συνεχίσω και να κάνω διδακτορικό στο χώρο της υπολογιστικής Χημείας (Χημειο-Πληροφορική/Chemical-Informatics, Chemoinformatics, ChemInformatics), όπου συνδύασα γνώσεις Χημικής-Βιολογίας (Chemical Biology), Πληροφορικής και Μαθηματικών. Αναφέρω την προσωπική μου πορεία κυρίως για όσους είναι φοιτητές και ψάχνονται με το τι θα ασχοληθούν όπως ψαχνόμουν εγώ τότε. Ο κλάδος της ανάλυσης δεδομένων πιστέυω ότι θα συνεχίσει να εξελίσσεται γρήγορα οπότε αξίζει να του ρίξετε μια ματιά. Αυτά δε θα πολυλογήσω άλλο επι του θέματος.

1.6 Διαθέσιμα εργαλεία  ?

Πλήθος εργαλείων υπάρχουν διαθέσιμα που μπορούμε να χρησιμοποιήσουμε για αναλύσουμε, επεξεργαστούμε και μοντελοποιησουμε δεδομένα. Θα έλεγα τα καλύτερα εργαλεία που υπάρχουν είναι open-source οπότε είναι πολύ εύκολο να τα κατεβάσουμε, να τα εγκαταστήσουμε, να τα χρησιμοποιήσουμε και γενικά να πειραματιστούμε με αυτά. Εδώ θα αναφέρω δυο κύριες κατηγορίες α) Εργαλεία που προσφέρουν γραφικό περιβάλλον εργασίας και β) Γλώσσες προγραμματισμού που απαιτούν να μάθεις προγραμματισμό. Θα αναφερθούμε πρώτα με συντομία σε εργαλεία που προσφέρουν γραφικό περιβάλλον εργασίας και μετά σε εργαλεία που είναι  γλώσσες προγραμματισμού.

Disclaimer: Θα αναφερθώ μόνο σε εργαλεία που έχω προσωπικά χρησιμοποιήσει και όχι σε οτιδήποτε υπάρχει εκεί έξω καθώς είμαι σίγουρος ότι θα παραλείψω πολλά από αυτά.

Α) Εργαλεία που προσφέρουν γραφικό περιβάλλον εργασίας:

Εδώ γνωρίζω τρία εργαλεία. Όλα τα εργαλεία είναι open-source, φιλικά και ευκολά προσβάσιμα σε αρχάριους χρήστες. Από αυτά τα εργαλεία ξεκίνησα και εγώ στα πρώτα μου βήματα.

  1. Weka 3: Machine Learning Software in Java (https://www.cs.waikato.ac.nz/ml/weka/)

To Weka είναι μια πλήρη βιβλιοθήκη για ανάλυση δεδομένων και μηχανικής μάθησης.

image.png.c5b5a4e930d829f8bd07be1af567d56e.png

 

  1. Orange Data Mining (Python-based) https://orange.biolab.si/

image.png.4243a434c42c425c4a1e65d5d33f8829.png

  1. Knime https://www.knime.com/ . Εδώ έχουμε να κάνουμε με μια πλατφόρμα που επιτρέπει την εύκολη σχεδίαση data-pipelines για ανάγνωση δεδομένων, ανάλυση, μοντελοποίηση καθώς και απεικόνισης δεδομένων.

image.png.caea8eee98246d3f226445b0b0705ee7.png

Β) Γλώσσες προγραμματισμού για ανάλυση δεδομένων:

Εδώ έχουμε ουσιαστικά γλώσσες προγραμματισμού που είτε προσφέρουν πανίσχυρες βιβλιοθήκες για να ανάλυση δεδομένων είτε έχουν γραφτεί ειδικά για αυτό το σκοπό. Αυτά τα εργαλεία είναι πανίσχυρα καθώς επιτρέπουν στο χρήστη να συνδεθεί με βάση δεδομένων, να διαβάσει διάφορα file formats και πραγματοποιήσει ουσιαστικά ότι επιθυμεί χωρίς περιορισμούς. Εδώ κατά την άποψη έχουμε δύο κύριες γλώσσες: την γλώσσα προγραμματισμού R  καθώς την γλώσσα προγραμματισμού Python.

  1. Statistical Programming language R (https://www.r-project.org/). Αποτελούσε για αρκετά χρόνια την κύρια πλατφόρμα που χρησιμοποιούσα σε καθημερινή βάση για να ανάλυση δεδομένων. Μόνο πρόσφατα μετακόμισα πλήρως στη Python.

Η γλώσσα προγραμματισμού R είναι πολύ διαδεδομένη στον ακαδημαϊκό χώρο και προσφέρει πλήθος από βιβλιοθήκες ειδικά γραμμένες για ανάλυση δεδομένων, αυτή τη στιγμή υπάρχουν πάνω από 15000 βιβλιοθήκες διαθέσιμες (Σεπτέμβριος 2018). Ακαδημαϊκές ομάδες που αναπτύσσουν καινούργιες τεχνικές ανάλυσης δεδομένων όταν δημοσιεύουν την εργασία τους μαζί με το άρθρο τους ανεβάζουν και το πακέτο (ή βιβλιοθήκη) για τη γλώσσα προγραμματισμού R ώστε να είναι εύκολα διαθέσιμη. Εδώ (https://cran.r-project.org/) μπορεί κάποιος να δει τη λίστα με τα διαθέσιμα πακέτα καθώς και την ημερομηνία που δημοσιοποιήθηκαν.  

Rstudio (https://rstudio.com/) προσφέρει ένα ισχυρό open-source ολοκληρωμένο περιβάλλον ανάπτυξης για τη γλώσσα προγραμματισμού R και έχει γίνει συνώνυμο για όσους χρησιμοποιούν R.  Μερικές από τις αγαπημένες μου βιβλιοθήκες εδώ περιλαμβάνουν τις: ggplot2 (https://ggplot2.tidyverse.org/) για απεικόνιση δεδομένων, από τις ομορφότερες βιβλιοθήκες που κυκλοφορούν εκεί έξω, γενικά η σουίτα tidyverse (https://www.tidyverse.org/) που προσφέρει μια συλλογή από ισχυρά εργαλεία για ανάλυση δεδομένων. Καθώς και η βιβλιοθήκη data.table ( https://cran.r-project.org/web/packages/data.table/data.table.pdf ) για όσους δουλεύουν με μεγάλα αρχεία (100GB +).

RStudio on Ubuntu 12.10

 

  1. Python programming language (https://www.python.org/). Η Python μια γενικού σκοπού (general-purpose) και υψηλού επιπέδου, γλώσσα προγραμματισμού αλλά τα τελευταία χρόνια με την υποστήριξη της κοινότητας έχει μεταμορφωθεί σε μια πανίσχυρη πλατφόρμα για την επιστήμη των δεδομένων. Η ύπαρξη πληθώρα βιβλιοθηκών , οι οποίες συχνά γράφονται στη C++ γλώσσα προγραμματισμού, την καθιστούν ένα από τα καλύτερα εργαλεία για ανάλυση δεδομένων.

Εδώ το Jupyter Notebook ( https://jupyter.org/ ) προσφέρει ένα άριστο open-source ισχυρό ολοκληρωμένο περιβάλλον ανάπτυξης για ανάλυση δεδομένων. Ενώ η ύπαρξη βιβλιοθηκών όπως i) Pandas (https://pandas.pydata.org/) , ii) Scipy (https://www.scipy.org/), Numpy (https://numpy.org/) , iii) Scikit-Learn (https://scikit-learn.org/stable/) και iv) Matplotlib ( https://matplotlib.org/ ) προσφέρουν οτιδήποτε μπορεί να χρειαστεί ένας επιστήμονας των δεδομένων για να επεξεργαστεί, προετοιμάσει και αναλύσει δεδομένα. Αξίζει να αναφερθεί ότι και τα εργαλεία για Νευρωνικά δίκτυά (Deep-Learning) που έχουν αναπτυχθεί από την Google (Tensforlow: https://www.tensorflow.org/) καθώς και Facebook (PyTorch: https://research.fb.com/downloads/pytorch/) έχουν γραφτεί για να είναι εύκολα προσβάσιμες από τη γλώσσα προγραμμισμού Python.

examples of jupyterlab workspaces in single document and multiple document workspaces

1.7 Λειτουργικά συστήματα (Operating Systems)?

              Τα εργαλεία που αναφέρθηκαν παραπάνω είναι διαθέσιμα σε όλες τις πλατφόρμες Windows, MacOS και Linux. To κατεξοχήν λειτουργικό που χρησιμοποιείται κατά την άποψη μου και προσωπική εμπειρία είναι το Linux ειδικά όταν μιλάμε για High Performance Computing (HPC) περιβάλλον. Οπότε από εδώ και στο εξής τα υπόλοιπα κομμάτια θα απευθύνεται για Linux OS και συγκεκριμένα Ubuntu.

Στα επόμενα μέρη θα αναφερθούμε συγκεκριμένα στη Python και Linux (Ubuntu) για να προετοιμάσουμε το περιβάλλον εργασίας μας. Θα αναφερθούμε πως θα εγκαταστήσουμε τις απαραίτητης βιβλιοθήκες και θα ξεκινήσουμε με τα πρώτα απλά παραδείγματα.

 

Αναφορές:

[1] https://en.wikipedia.org/wiki/Data_science

[2] Data Scientist: The Sexiest Job of the 21st Century .(2012) https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century?

[3] https://searchbusinessanalytics.techtarget.com/feature/Demand-for-data-scientists-is-booming-and-will-increase

[4] https://www.ebi.ac.uk/

[5] Cook, C. E., Bergman, M. T., Finn, R. D., Cochrane, G., Birney, E., & Apweiler, R. (2015). The European Bioinformatics Institute in 2016: data growth and integration. Nucleic acids research, 44(D1), D20-D26.

[6] https://www.ebi.ac.uk/services

[7] https://home.cern/

[8] https://home.cern/news/news/computing/breaking-data-records-bit-bit

[9]https://el.wikipedia.org/wiki/%CE%9C%CE%B5%CE%B3%CE%AC%CE%BB%CE%BF%CF%82_%CE%95%CF%80%CE%B9%CF%84%CE%B1%CF%87%CF%85%CE%BD%CF%84%CE%AE%CF%82_%CE%91%CE%B4%CF%81%CE%BF%CE%BD%CE%AF%CF%89%CE%BD

[10] https://www.theguardian.com/science/2019/apr/10/black-hole-picture-captured-for-first-time-in-space-breakthrough

[11] https://www.extremetech.com/extreme/289423-it-took-half-a-ton-of-hard-drives-to-store-eht-black-hole-image-data

[12] https://eventhorizontelescope.org/

[13] https://blog.microfocus.com/how-much-data-is-created-on-the-internet-each-day/

[14] https://www.omnicoreagency.com/instagram-statistics/

[15] https://mashable.com/2012/08/22/google-maps-facts/

[16] https://digital.hbs.edu/platform-digit/submission/google-maps-the-most-expansive-data-machine/

[17] https://en.wikipedia.org/wiki/Data_science

[18] https://en.wikipedia.org/wiki/Information_theory

[19] https://towardsdatascience.com/introduction-to-statistics-e9d72d818745

[20] https://el.wikipedia.org/wiki/%CE%95%CF%80%CE%B9%CF%83%CF%84%CE%AE%CE%BC%CE%B7_%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CF%89%CE%BD

[21] https://en.wikipedia.org/wiki/RStudio#/media/File:Rstudio.png

 

Υ.Γ.1 Έχω αρκετά χρόνια να γράψω κείμενο σε Ελληνικά οπότε αν βρείτε γραμματικά και συντακτικά λάθη ενημερώστε με και θα τα διορθώσω.

Υ.Γ.2. Γνωρίζω την ορολογία στα Αγγλικά και δυσκολεύομαι να βρω την αντίστοιχη στα Ελληνικά. Οπότε και εδώ αν βρείτε κάτι λάθος ενημερώστε με και θα διορθωθεί.

 

 

 

 

 

 

 

 

 

 

Επεξ/σία από dr_frozenarm
  • Like 18
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Μέρος 2

Προχωράμε στη προετοιμασία του περιβάλλοντος εργασίας. Όπως αναφερθήκαμε στο μέρος 1 θα χρησιμοποιήσουμε τη γλώσσα προγραμματισμού Python και συγκεκριμένα την έκδοση 3.6 στο λειτουργικό linux και συγκεκριμένα Ubuntu.

Βήμα 1.

Πρώτα θα πρέπει να βεβαιωθούμε ότι έχουμε την Python3 εγκαταστημένη στο λειτουργικό μας, εικόνα 1.

image.png.f73a1db9a6739519fe4bf115636bd151.png

Εικόνα 1. Δοκιμάζουμε ότι η Python3 είναι διαθέσιμη στο λειτουργικό μας.

 

Βήμα 2.

Για να εγκαταστήσουμε τις απαραίτητες βιβλιοθήκες θα χρησιμοποιήσουμε τον Python package manager pip https://pip.pypa.io/en/stable/ .Εικόνα 2.

image.png.5c62cd01c98b2e95e0e155a7fd7aadba.png

Εικόνα 2. Εγκαθιστούμε τον Python3 package manager pip3.

image.png.fba39d5b3c832f8800fbb9b6ac3baf0a.png

Εικόνα 3. Κάνουμε upgrade για να βεβαιωθούμε ότι τρέχουμε την τελευταία έκδοση του pip3.

Βήμα 3.

Εγκατάσταση βιβλιοθηκών μέσω pip3 install. Τώρα προχωράμε στην εγκατάσταση των βιβλιοθηκών που θα χρησιμοποιήσουμε για ανάλυση δεδομένων.

  1. Pandas. https://pandas.pydata.org/
pip3 install pandas
  1. Scipy. https://www.scipy.org/
pip3 install scipy
  1. Numpy. https://numpy.org/
pip3 install numpy
  1. Sklearn. https://scikit-learn.org/stable/
pip3 install sklearn
  1. Jupyter Notebook. https://jupyter.readthedocs.io/en/latest/index.html
pip3 install jupyter
  1. Matplotlib. https://matplotlib.org/
pip3 install matplotlib

 

Βήμα 4.

Τσεκάρουμε ότι όλες οι βιβλιοθήκες έχουν εγκατασταθεί και είναι διαθέσιμες στο λειτουργικό μας, εικόνα 4. Αν δεν έχουμε κανένα μήνυμα σφάλματος είμαι έτοιμοι.

image.png.32a2050ea2563f5e63030bca56e0f1fb.png

Εικόνα 4.

Βήμα 5. Ξεκινάμε το Jupyter Notebook. Οδηγίες μπορούμε να βρούμε εδώ: https://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/execute.html

image.png.3889ed84785f3b5cfce2fd89908cf28e.png

Εικόνα 5. Ξεκινάμε το jupyter notebook.

image.png.5ed133cf3552b1c2bc2eb745b08ee6e2.png

Εικόνα 6. Jupyter notebook

 

Βήμα 6. Δοκιμαστικά φορτώνουμε ένα dataset το λεγόμενο "Boston housing dataset" από το sklearn και το περνάμε σε pandas dataframe, εικόνα 7.

image.png.3ad8088c8cc706be28a14ee60b3ac02f.png

Εικόνα 7. Καινούργιο jupyter notebook για Python3 και φωρτούμε δοκιμαστικά το boston dataset.

Μόλις ετοιμάσαμε το περιβάλλον εργασίας μας και είμαστε έτοιμοι να αναλύσουμε δεδομένα. Στο επόμενο μέρος θα μιλήσουμε για το boston dataset και θα ξεκινήσουμε τα πρώτα μας βήματα ανάλυσης δεδομένων αυτο του dataset.

Πηγή "boston-housing dataset": https://www.kaggle.com/c/boston-housing

 

Επεξ/σία από dr_frozenarm
  • Like 14
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μέρος 3

Στο μέρος 3ο θα μιλήσουμε για το dataset ‘Boston Housing’ και θα κάνουμε μια πρώτη ανάλυση των δεδομένων για να τα κατανοήσουμε καλύτερα πριν προχωρήσουμε στη μοντελοποίηση τους.

Ο σκοπός αυτού του dataset είναι να κατανοηθεί τι είναι αυτό που επηρεάζει την αξία των σπιτιών σε προάστια του Boston. Τελικός σκοπός είναι να αναπτύξουμε ένα μοντέλο που με βάση τα χαρακτηριστικά των σπιτιών θα προβλέπει όσο καλύτερα (πιο κοντά στη πραγματική τιμή) γίνεται της αξίας των σπιτιών. Κάθε σπίτι περιλαμβάνει αρκετά μετρήσιμα χαρακτηριστικά όπως η εγκληματικότητα της περιοχής, αριθμός δωμάτιών, ηλικία του σπιτιού κτλ. Αυτά τα χαρακτηριστικά ονομάζονται features ή descriptors.

Πηγή : https://www.kaggle.com/c/boston-housing/overview/description

Ας δούμε τώρα τι σημαίνει και τι μετράει το κάθε feature.

To medv είναι η μεταβλητή που θέλουμε να μάθουμε να προβλέπουμε.

Το ‘Boston dataset’ αποτελείται συνολικά από 506 δείγματα και 14 features.

Τα χαρακτηριστικά (features) περιγράφουν:

crim

Εγκληματικότητα ανα πόλη.

zn

Την αναλογία των οικιστικών εκτάσεων ως προς το συνολικό αριθμό διαθέσιμων εκτάσεων ανά 25,000 sq.ft

indus

Αναλογία των μη λιανικού εμπορίου περιοχών ανά πόλη.

chas
Charles River dummy variable (= 1 if tract bounds river; 0 otherwise).

Charles River μη ρεαλιστική μεταβλητής (= 1 if tract bounds river; 0 otherwise).

nox

Συγκέντρωση νιτρικών οξειδίων (σωματίδια ανά 10 εκατομμύριά).  

rm

Μέσος αριθμός δωματίων ανά κατοικία.

Age

Αναλογία των κατοικιών που κατασκευαστήκαν πριν το 1940.

dis

Σταθμισμένη μέση απόσταση από πέντε κέντρα ανεύρεσης εργασίας.

rad
Δείκτη προσβασιμότητας σε κεντρικού αυτοκινητόδρομους.

tax
Φόρο ακίνητης περιουσίας πλήρους αξίας ανά $ 10.000.

ptratio

Αναλογία μαθητών-δασκάλων ανά πόλη.

black
1000(Bk - 0.63)^2 όπου Bk είναι η αναλογία των μαύρων ανά πόλη.

lstat
Χαμηλή οικονομική κατάσταση του πληθυσμού (ποσοστό).

medv
μέση αξία των κατοικιών που κατέχονται από ιδιοκτήτες σε $1000s. Οι τιμές είναι από τη δεκαετία των ’80 νομίζω. Σπίτια σε προάστια του Boston κοστίζουν $500k+ σήμερα.

Όπως αναφερθήκαμε στο μέρος 2ο εγκαταστήσαμε μια σειρά από βιβλιοθήκες που θα μας επιτρέψουν να αναλύσουμε τα δεδομένα προσφέροντας μια σειρά από έτοιμες μεθόδους (functions) για ανάλυση δεδομένων. Αν πάλι τους λείπει κάτι μπορούμε πολύ ευκολά να γράψουμε μια δικής μας μέθοδο (function), εδώ βρίσκεται και το βασικό πλεονέκτημα μιας γλώσσας προγραμματισμού όπως είναι η R ή η Python.

Πάμε να δούμε στη πράξη τώρα:

To pandas προσφέρει μια πληθώρα από έτοιμες μεθόδους που επιτρέπουν εύκολή και γρήγορη ανάλυση δεδομένων.

Πρώτα θα μετανομάσουμε το όνομα της μεταβλητής ‘target’ σε ‘medv’

boston_dataset=datasets.load_boston()

df_boston = pd.DataFrame(boston_dataset.data,columns=boston_dataset.feature_names)

df_boston['medv'] = pd.Series(boston_dataset.target)

df_boston.head()

Και τώρα θα αναλύσουμε τα δείγματα

  1. Τσεκάρουμε πόσα δείγματα έχουμε συνολικά καθώς και τον αριθμό των μεταβλητών

image.png.4b54e9830eb0fce7f978d046608b7aeb.png

image.png.05d2d86b8271f0743ffb33d06b06a1b3.png

  1. Επίσης μπορούμε ευκολά να τσεκάρουμε τα στατιστικά της κάθε μεταβλητής και να τα παρουσιάσουμε γραφικά χρησιμοποιώντας θηκόγραμμα (boxplots).

 

image.png.d236963f5de085d34a16940cf8703375.png

Όπως βλέπουμε μπορούμε να δούμε τις μέσες τιμές των μεταβλητών, τις τυπικές αποκλίσεις, τις μέγιστες και ελάχιστες τιμές καθώς και τα τεταρτημόρια.

Ας δούμε πρώτα την ηλικία των σπιτιών, μεταβλητή AGE: βλέπουμε πως η μέση ηλικία των σπιτιών είναι 68.57 ± 28.15 χρόνια, με το πιο πρόσφατο τα 2.9 έτη και το πιο παλιό 100 ετών. Το 50% των κατοικιών έχει ηλικία τα 77.5 έτη ή λιγότερο.

image.png.1d1c1855b16073358ebb27a6c1a63028.png

Θηκόγραμμα (boxplot) της ηλικίας των σπιτιών.

 

image.png.0c1de67b8775fc7cbea8a09d0847e35b.png

Θηκόγραμμα (boxplot) της αξίας των σπιτιών. Εδώ έχουμε μέση τιμή 22.53±9.19 (σε $1000s), με το πιο φτηνό να έχει 5 και το πιο ακριβό 50 με το 75% των σπιτιών να έχουν τιμής 25 και κάτω. Αυτή είναι η μεταβλητή (target value) που θέλουμε να μάθουμε να προβλέπουμε με βάση τις υπόλοιπες μεταβλητές (features).

 

Κάτι αλλό που μπορούμε να εξετάσουμε είναι η συσχέτιση μεταξύ των ανεξάρτητων μεταβλητών καθώς και της μεταβλητής που θέλουμε να μάθουμε. Η συσχέτιση μπορεί να υπολογιστεί από  συντελεστής συσχέτισης συνδιακύμανσης Pearson.

image.png.c7184d4d54f25da7c33a968db55b2147.png

Ο συντελεστής παίρνει τιμές από -1 εως +1. (±)1 σημαίνει τέλεια θετική ή αρνητική συσχέτιση μεταξύ δύο μεταβλητών ενώ 0 σημαίνει παντελής έλλειψη συσχέτισης.

(Πηγή: https://el.wikipedia.org/wiki/%CE%A3%CF%85%CF%83%CF%87%CE%AD%CF%84%CE%B9%CF%83%CE%B7_%CE%BA%CE%B1%CE%B9_%CE%B5%CE%BE%CE%AC%CF%81%CF%84%CE%B7%CF%83%CE%B7)

Ας υπολογίσουμε και εξετάσουμε τις συσχετίσεις μεταξύ των μεταβλητών και της Αξία των σπιτιών.

image.png.43776d9e03720027dcb42b13deb44979.png 

Βλέπουμε ότι η αξία των σπιτιών έχει υψηλό τιμής συσχέτισης με τις μεταβλητές LSTAT (-0.74), RM (0.7), PTRATIO (-0.5) και INDUS (-0.48). Ενώ η τιμές συσχέτισης με CHAS (0.18) και DIS (0.24) είναι χαμηλές. Τώρα ας εξετάσουμε με γράφημα μερικές από τις συσχετίσεις.

 

image.png.d6900dbd44ac8ab745e672f97c8cec5d.png

Γράφημα που απεικονίζει τη σχέση της αξία των σπιτιών (medv) με σχέση με το lstat (% lower status of the population) που βρήκαμε ότι έχουν δυνατή αρνητική συσχέτιση μεταξύ τους (-0.74) προηγουμένως. Η σχέση αυτή δείχνει ότι οι εύποροι συνήθως κατοικούν σε πιο ακριβά σπίτια (who would expect it right??)  

 

image.png.c5ae71b8c0e4132dd044368042e3b8f3.png

Γράφημα που δείχνει τη συσχέτιση της αξίας των σπιτιών με τον αριθμό των δωματίων, που προηγούμενος βρήκαμε να είναι RM (0.7). Εδώ βλέπουμε ότι όσο περισσότερα δωμάτια έχει ένα σπίτι τόσο πιο ακριβό τείνει να είναι.

 

 

image.png.553576f9b4401d3b6e41be7eac89b528.png

Γράφημα που δείχνει τη συσχέτιση της αξίας των σπιτιών με την σταθμισμένη μέση απόσταση από πέντε κέντρα ανεύρεσης εργασίας, που προηγούμενος βρήκαμε να είναι DIS (0.25). Εδώ βλέπουμε το αντίθετο, δηλαδή ότι η σταθμισμένη μέση απόσταση από πέντε κέντρα ανεύρεσης εργασίας δεν είναι ιδιαίτερα ενδεικτική της αξίας των σπιτιών και δε βοηθάει και πολύ στην πρόβλεψη της τιμής τους.

 

Σε αυτό το μέρος εξετάσαμε με απλά στατιστικά τις τιμές των μεταβλητών καθώς και τις τιμές συσχέτισης συνδιακύμανσης Pearson της αξίας των σπιτιών με τις άλλες μεταβλητές και βρήκαμε ότι αξία των σπιτιών συσχετίζεται με τις τιμές των μεταβλητων LSTAT (-0.74), RM (0.7), PTRATIO (-0.5) και INDUS (-0.48).

Στο επόμενο μέρος θα αναπτύξουμε μοντέλα μηχανικής μάθησης που θα προβλέπουν τις τιμές των σπιτιων.

  • Like 15
  • Thanks 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θα περιμένω τα λίγο πιο προχωρημένα κομμάτια, παράδειγμα feature engineering, που με ενδιαφέρει.

Επίσης ενδιαφέρον θα είχε να πιάναμε ένα πρόβλημα με κάποια δεδομένα και να το λύναμε όλοι μαζί και να βρούμε λύση. Να μη δουλεύουμε μόνο με Τιτανικούς και Βοστώνες.

Καλή συνέχεια.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@dr_frozenarm

Θα πρότεινα, εάν σου είναι εύκολο φυσικά, να τα ανεβάζεις και σαν PDFs γιατί είναι καλύτερα στο διάβασμα για κάποιον που ενδιαφέρετε.

-----------

Πέρα από αυτό, επειδή σκέφτομαι να ασχοληθώ λίγο με το Data Science, ίσως μου χρησιμέψει σε κάποια φάση ποτέ δεν ξέρεις,  βλέποντας το μέρος 3, μιλάμε ουσιαστικά για "απλό" plotting με fancy name? Δλδ κάποιος που ασχολήθηκε με "Scientific data analysis", και προφανώς Excel, Origin, γραφικές, fitting κατανομών/καμπύλων, στατιστικά, chi2 κλπ κλπ, μπορούμε να πούμε ότι έχει μια γερή βάση σε αυτά? Τουλάχιστο για μια αρχή στο "επάγγελμα" ? 

Thnx

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 λεπτό πριν, Whargoul είπε

@dr_frozenarm

Θα πρότεινα, εάν σου είναι εύκολο φυσικά, να τα ανεβάζεις και σαν PDFs γιατί είναι καλύτερα στο διάβασμα για κάποιον που ενδιαφέρετε.

-----------

Πέρα από αυτό, επειδή σκέφτομαι να ασχοληθώ λίγο με το Data Science, ίσως μου χρησιμέψει σε κάποια φάση ποτέ δεν ξέρεις,  βλέποντας το μέρος 3, μιλάμε ουσιαστικά για "απλό" plotting με fancy name? Δλδ κάποιος που ασχολήθηκε με "Scientific data analysis", και προφανώς Excel, Origin, γραφικές, fitting κατανομών/καμπύλων, στατιστικά, chi2 κλπ κλπ, μπορούμε να πούμε ότι έχει μια γερή βάση σε αυτά? Τουλάχιστο για μια αρχή στο "επάγγελμα" ? 

Thnx

 

Θα προσπαθήσω αν βρω χρόνο αλλά μάλλον θα αργήσει να φτίαξω pdf.

Σίγουρα αμα γνωρίζεις στατιστική/μαθηματικά βοηθάει πολύ. Ρίξε βάση στο προγραμματισμό είτε σε Python είτε σε R θα βοηθήσει πολύ καθώς δε θα περιορίζεσαι από το κάθε excel τύπου προγράμματα

Είπα να ξεκινήσω με απλά βασικά πραγματάκια και σιγα σιγα να το παω σε πιο βαθιά για να μπορούν να το παρακαλουθήσουν οι περισσότεροι. 

Ενα πράγμα που δε φαίνεται αλλά η μισή ή και περισσότερη δουλειά ενός data-scientist είναι να συγκεντρώσει και να καθαρίσει τα δεδομένα (data massaging), καθώς ποτέ δεν έρχονται τακτοποιημένα. Οπότε περνάμε πολλές ώρες προσπαθώντας να τα συμμαζέψουμε, να τα καθαρίσουμε και να βγάλουμε μια άκρη του τι παίζει που περιλαμβάνει πολλά plotting, correlation analysis κλπ κλπ. Όταν είναι έτοιμα είναι σχετικά εύκολο να πετάξεις 2-3 αλγοριθμους για classification/regression/clustering. 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

18 ώρες πριν, dr_frozenarm είπε

Θα προσπαθήσω αν βρω χρόνο αλλά μάλλον θα αργήσει να φτίαξω pdf.

Σίγουρα αμα γνωρίζεις στατιστική/μαθηματικά βοηθάει πολύ. Ρίξε βάση στο προγραμματισμό είτε σε Python είτε σε R θα βοηθήσει πολύ καθώς δε θα περιορίζεσαι από το κάθε excel τύπου προγράμματα

Είπα να ξεκινήσω με απλά βασικά πραγματάκια και σιγα σιγα να το παω σε πιο βαθιά για να μπορούν να το παρακαλουθήσουν οι περισσότεροι. 

Ενα πράγμα που δε φαίνεται αλλά η μισή ή και περισσότερη δουλειά ενός data-scientist είναι να συγκεντρώσει και να καθαρίσει τα δεδομένα (data massaging), καθώς ποτέ δεν έρχονται τακτοποιημένα. Οπότε περνάμε πολλές ώρες προσπαθώντας να τα συμμαζέψουμε, να τα καθαρίσουμε και να βγάλουμε μια άκρη του τι παίζει που περιλαμβάνει πολλά plotting, correlation analysis κλπ κλπ. Όταν είναι έτοιμα είναι σχετικά εύκολο να πετάξεις 2-3 αλγοριθμους για classification/regression/clustering. 

Επειδή τώρα τελευταία ξαναπιασα το θέμα του Machine Learning έχω την εντύπωση (λόγω Python και ευκολίας εφαρμογής των πολυ ποίκιλων αλγορίθμων) ότι αυτό το Data Massaging ίσως να είναι και αυτό που κάνει την διαφορά...έχω δει σημαντικές διαφορές ανάλογα με την "εφαρμογη" των δεδομένων για το training.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Μια προσπάθεια να το κάνω pdf. Κάπου μου τα χαλάει το latex 🙁

data_science meros 1 .pdf

data_science_1.pdf

Επεξ/σία από k33theod
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

'Οσον αφορά εργαλεία

 βολικές ειδικά για αρχάριους, είναι και οι κλήσεις python σε περιβάλλον SQlServer (2017,2019),

αφού πασάρεις εύκολα data από sql και  παιρνεις πίσω τα αποτελέσματα.

   Βέβαια λείπουν τα γραφήματα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Μέρος 4ο

 

Στο 4ο μέτρο θα μιλήσουμε για τα βήματα που ακολουθούνται για να αναπτύξουμε μοντέλα που προβλέπουν την αξία των σπιτιών (target feature) με βάση τα χαρακτηριστικά (features) που εξετάσαμε στο προηγούμενο μέρος. Θα χρησιμοποιήσουμε 3 δημοφιλής αλγόριθμους για classification/regression.

Το 4ο μέρος είναι αρκετά κομμάτια που πρέπει να συζητήσουμε και θα είναι αρκετά μακρύ οπότε bear with me.

Στη περίπτωση μας έχουμε να κάνουμε με συνεχόμενες τιμές (αξίας των σπιτιών) οπότε θα χρησιμοποιήσουμε regression. Το regression ανήκει στο supervised-learning, επειδή έχουμε και τα χαρακτηριστικά (features) και τις τιμές που θέλουμε να μάθουμε (target-values). Το άλλο είδος μάθησης είναι το λεγόμενο unsupervised όταν έχουμε τα χαρακτηριστικά αλλά δεν έχουμε τις τιμές που θέλουμε να μάθουμε, τότε εφαρμόζουμε clustering.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.1 Οι τρεις αλγόριθμοι που θα χρησιμοποιήσουμε σε αυτό το μέρος είναι:

α) k-Nearest Neighbor (k-NN) (κ-κοντινότεροι γείτονες) πηγή https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm .

Σε γενικές τιμές ο αλγόριθμος αυτός προβλέπει τις τιμές νέων παραδειγμάτων με βάση του κ-κοντινότερους γείτονες με βάση κάποια μορφή απόστασης, π.χ. ευκλείδεια απόσταση (Euclidean distance: https://en.wikipedia.org/wiki/Euclidean_distance) ή Manhattan distance (https://en.wikipedia.org/wiki/Taxicab_geometry). Συνήθως η default distance που χρησιμοποιείται είναι η Euclidean distance. Ο λόγος που λέγεται k-κοντινότεροι γείτονες είναι ότι βρίσκει τους k (π.χ. 3 ή 5 ή 7) κοντινότερους γείτονες με βάση τη μορφή απόστασης (distance metric) και είτε κατατάσσει το νέο άγνωστο παράδειγμα (δηλαδή παράδειγμα που δεν έχουμε τη ζητούμενη τιμή και έχουμε μόνο τα χαρακτηριστικά που το περιγράφουν) με ψήφο πλειοψηφίας στη περίπτωση που έχουμε  classification (π.χ. άρρωστος ιστός ή υγιείς ιστός)  είτε όπως στη περίπτωση μας που προσπαθούμε να προβλέψουμε συνεχόμενη τιμή προβλέπει την καινούργια τιμή υπολογίζοντας τη μέση τιμή με βάση τις τιμές των κ-κοντινότερων γειτόνων, π.χ. αν έχουμε 3-NN με τιμές 3, 6, 5 η τιμή που θα προβλέψει θα είναι 4.7 . Εδώ θα αναφέρουμε ότι η παράμετρος κ θα πρέπει να βελτιστοποιηθεί, δηλαδή θα πρέπει να δοκιμάσουμε αρκετές τιμές και να βρούμε ποια τιμή δίνει τα καλύτερα αποτελέσματα για τα παραδείγματα που έχουμε.

                                                                    image.png.2318c627b4face517e16ad3c2c55acdc.png

Παράδειγμα από κ-ΝN classification. Ένα καινούργιο παράδειγμα που δεν έχει label (δεν ξέρουμε δηλαδή από πριν αν ανήκει στη κλάση Τρίγωνο ή Τετράγωνο). Βλέπουμε ότι οι τρεις κοντινότεροι γείτονες είναι δύο τρίγωνα και ένα τετράγωνο, οπότε αν έχουμε 3-ΝΝ με ψήφους έχουμε τρίγωνα (2) έναντι ενός τετραγώνου οπότε το κατατάσσουμε στη κλάση τρίγωνα. Αν όμως χρησιμοποιήσουμε 5-ΝΝ έχουμε 3 τετράγωνα και 2 τρίγωνα οπότε θα το κατατάσσαμε στα τετράγωνα. Όπως βλέπουμε θα πρέπει να δοκιμάσουμε αρκετές τιμές από την παράμετρο k μέχρι να βρούμε εκείνη την τιμή που θα μας δώσει την καλύτερη απόδοση σε κάποιο test-set συνολικά.  

Πηγή: https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm

 

 

 

 

β) Random Forest (τυχαίο δάσος ?!? δεν ξέρω αν μεταφράζεται σωστά) πηγή https://en.wikipedia.org/wiki/Random_forest .

O αλγόριθμος αυτός ανήκει στους αλγόριθμους που αναφέρονται ως ensemble learning (https://en.wikipedia.org/wiki/Ensemble_learning) εδώ η γενικότερη ιδέα είναι ότι αντί να προσπαθούμε να αναπτύξουμε έναν “ισχυρό αλγόριθμο” αναπτύσσουμε αρκετούς “βασικούς αλγόριθμους” (base models) και μετά τους συνδυάζουμε μαζί με την ελπίδα ότι αυτοί συνδυαστικά θα κάνουν καλύτερη δουλειά. «Ensembles combine multiple hypotheses to form a (hopefully) better hypothesis».

Ο Random Forest είναι από τους πιο αγαπημένους μου αλγόριθμους για αρκετούς λόγους και τυπικά είναι ο πρώτος αλγόριθμος που χρησιμοποιώ όταν μοντελοποιώ ένα καινούργιο dataset. Οι λόγοι είναι i) δεν υποφέρει από over-fitting https://en.wikipedia.org/wiki/Overfitting όπως άλλοι αλγόριθμοι

ii) είναι parallelized καθώς τα base models (trees) μπορούν τρέξουν σε πολλαπλούς πυρήνες και μόνο στο τέλος συνδυάζονται, oπότε όσο περισσότερους πυρήνες έχεις τόσο πιο γρήγορα γίνεται το training/evaluation και μπορείς να δοκιμάσεις πολλούς συνδυασμούς παραμέτρων (hyper-parameters) όπως είναι ο αριθμός των δέντρων, π.χ. 10-30-50-100.

iii) μπορεί επίσης να χρησιμοποιηθεί για να κάνουμε feature selection καθώς είναι ικανός να υπολογίζει τη συνεισφορά των individual χαρακτηριστικών (features) στο learning task. Πολλές φορές έχουμε dataset με δεκάδες, εκατοντάδες είτε και χιλιάδες features με πολλά από αυτά να μην έχουν ιδιαίτερη συνεισφορά, αρκετές φορές αυτό μπορεί να έχει αρνητικές συνέπειες στο μοντέλο οπότε πολλές φορές θέλουμε να διαλέξουμε και να κρατήσουμε μόνο εκείνα τα χαρακτηριστικά (features) που συνεισφέρουν στο learning task.

 

                                          image.png.e90212c0e6967d0b266f180ee9c43ec1.png

Παράδειγμα πως λειτουργεί ο Random Forest. Πολλαπλά δέντρα (trees) εκπαιδεύονται και κατόπιν συνδυάζονται για να προβλέψουν την κλάση (class) που ανήκει ένα καινούργιο παράδειγμα (instance).

Πηγή: https://medium.com/@williamkoehrsen/random-forest-simple-explanation-377895a60d2d

 

γ) Support Vector Machines (δεν ξέρω αν μεταφράζεται στα Ελληνικά) πηγή https://en.wikipedia.org/wiki/Support-vector_machine . Ο αλγόριθμος είναι αρκετά πολύπλοκος μαθηματικά για να τον περιγράψω εδώ και θέλει αρκετό διάβασμα για να γίνει κατανοητός. Συνιστώ αυτές τις πηγές για όσους ενδιαφέρονται (είναι στα αγγλικά όλες).

1) http://web.mit.edu/6.034/wwwbob/svm-notes-long-08.pdf

2) https://medium.com/machine-learning-101/chapter-2-svm-support-vector-machine-theory-f0812effc72

 

                                                                image.png.1b399613d2b1206b1064a9cb48cdb1e1.png

Σε πολύ γενικές γραμμές ο SVM προσπαθεί να μάθει τη συνάρτηση (hyperplane) σε ν-διαστάσεις που να επιτυγχάνει τον καλύτερο διαχωρισμό μεταξύ των training-instances. Π.χ. τα H1, H2, H3 είναι τρια πιθανά hyperplanes , το hyperplane που μεγιστοποιεί την απόσταση από τις δύο κλάσεις δίνει την καλύτερη λύση, εδώ είναι η H3. Πηγή: https://en.wikipedia.org/wiki/Support-vector_machine

 

Γενικά οι αλγόριθμοι μηχανικής μάθησης προσπαθούν να μάθουν τη συνάρτηση που αντιστοιχεί τα χαρακτηριστικά (features Χ) με την target value Υ και να ελαχιστοποιεί κάποια συνάρτηση λάθους (error function). Θα μιλήσουμε σε λίγο για το πως να μετράμε/αξιολογούμε το πόσο καλά προβλέπουν οι αλγόριθμοι τις τιμές σε σύγκριση με τις πραγματικές (measured values).

4.2 Πως αναπτύσσουμε και αξιολογούμε μοντέλα.

                Περνάμε τώρα στα βήματα που τυπικά ακολουθούνται για ανάπτυξη και αξιολόγηση μοντέλων. Το αρχικό σύνολο των δεδομένων τυπικά χωρίζεται σε training και validation sets, το training set θα χρησιμοποιηθεί για την εκπαίδευση των μοντέλων ενώ το validation για την αξιολόγηση της απόδοσης (performance evaluation) του τελικού μοντέλου. Τυπικά το validation set γίνεται με random sampling 20-30% και το οποίο κρατείται εκτός του training/testing. Το training set κατόπιν χωρίζεται σε πολλαπλά training/testing folds και χρησιμοποιείται για hyperparameter tuning του κάθε αλγόριθμου, π.χ. στο k-NN προσπαθούμε να βρούμε τη τιμή του k που μας δίνει τα καλύτερα statistics. Εδώ έχουμε αρκετούς τρόπους για να χωρίσουμε το training set σε μικρότερα training/testing sets. Μια προτεινόμενη τεχνική είναι το 5-fold Cross Validation (5FCV). Εδώ το training set χωρίζεται σε 5 τυχαία υποσύνολα και κατόπιν το πρώτο σετ χρησιμοποιείται για testing και τα 4 υπόλοιπα για training, δηλαδή χρησιμοποιούμε τα 4/5 των δεδομένων για να εκπαιδεύσουμε το μοντέλο και το 1/5 για το αξιολογήσουμε. Κατόπιν ακολουθείται η ίδια διαδικασία για τα υπόλοιπα 4 διαδοχικά. Κανένα σετ δεν πρέπει να βρίσκεται ποτέ και στο training και στο  testing set για να μην έχουμε λεγόμενο overfitting. Το τελικό model validation θα πραγματοποιηθεί με τη χρήση του validation set το οποίο αφαιρέσαμε στο πρώτο βήμα της διαδικασίας και το οποίο το μοντέλο δεν έχει ξαναδεί κατά το training step.

 

image.thumb.png.51e8e818873cff501b99cc87b4bb6073.png

 

                H αξιολόγηση των μοντέλων πραγματοποιείται με performance metrics. Υπάρχουν αρκετά για regression/classification, εδώ θα μιλήσουμε για regression. Στο regression όπως αναφέραμε προσπαθούμε να προβλέψουμε κάποια συνεχόμενη τιμή, π.χ. την αξία των σπιτιών. Οπότε θέλουμε να δούμε ποιος αλγόριθμος και με ποιες παραμέτρους επιτυγχάνει τιμές (predicted values) που είναι όσο πιο κοντά στις μετρήσιμες τιμές (measured values) που έχουμε στα διαθέσιμα δεδομένα μας. Θέλουμε στο τέλος δηλαδή να έχουμε ένα μοντέλο που προβλέπει με το μικρότερο δυνατόν λάθος τιμές από τις πραγματικές τιμές.  

Για performance metric θα χρησιμοποιήσουμε το Root Mean Square Error (RMSE).  Υπάρχουν αρκετά άλλα metric που μπορούν να χρησιμοποιηθούν (πηγή: https://scikit-learn.org/stable/modules/model_evaluation.html)

 

 image.png.8a30ee2e2fe40ebdbad666b932b84097.png

Ας περάσουμε τώρα στη πράξη:

Βήμα 1. Είδαμε στο προηγούμενο μέρος ότι το dataset μας έχει 13 χαρακτηριστικά (features) και 506 συνολικά δείγματα (instances). Επίσης εξετάσαμε τις μέσες τιμές και τις τυπικές αποκλίσεις. Παρατηρήσαμε ότι τα features που έχουμε έχουν πολύ διαφορετικές τιμές, π.χ. το feature TAX παίρνει τιμές από 187 και μέγιστη 711 ενώ το feature  ΝΟΧ παίρνει από 0.554 και μέγιστη 0.871 οπότε βλέπουμε ότι αυτά τα δύο feature βρίσκονται σε πολύ διαφορετικές κλίμακες τιμών. Εδώ το πρόβλημα που μπορεί να προκύψει είναι να μπερδέψει μερικούς αλγόριθμους, π.χ. όπως ο k-NN που μετράει την απόσταση των instances σε Euclidean distance με αποτέλεσμα το feature TAX να έχει μεγαλύτερη επίδραση από το NOΧ ανεξαρτήτως αν είναι informative feature ή όχι. Πηγή: https://en.wikipedia.org/wiki/Feature_scaling kai https://scikit-learn.org/stable/auto_examples/preprocessing/plot_scaling_importance.html.  Οπότε το πρώτο πράγμα που θα κάνουμε θα είναι να κάνουμε scaling των τιμών των features εκτός της τιμής που θέλουμε να μάθουμε (target value).

image.png.bf6b313a4adf712179706c0bc21815e6.png

 

Επιλέγουμε πρώτα τα features που θα κάνουμε normalize.

 

 

 

Μετατρέπουμε το pandas data frame σε arrays στο πρώτο σκέλος και στο δεύτερο σκέλος αξιοποιούμε τη συνάρτηση preprocessing από το sklearn (https://scikit-learn.org/stable/modules/preprocessing.html). Εδώ χρησιμοποιήσαμε τη μέθοδο min_max_scaler για να κάνουμε normalize τα features με βάση την παρακάτω συνάρτηση.

                                                     image.png.116d8f44b26bcd90ac9b94e68539c0ce.png

 

image.png.9180d73023450fb656f761b873f3fbde.png

Βλέπουμε ότι όλες οι τιμές τώρα βρίσκονται στην ίδια κλίμακα και παίρνουν τιμές από 0 μέχρι 1.

Τώρα ξαναφτιάχνουμε το αρχικό μας data-frame προσθέτοντας τις τιμές που θέλουμε να προβλέψουμε ‘medv’.

image.png.30c2893cb39336afc0231c5054c5af96.png

 

Όπως αναφέραμε θα αφαιρέσουμε ένα τυχαίο σύνολο 20% για να τα χρησιμοποιήσουμε ως validation set για να αξιολογήσουμε το τελικό μοντέλο. Το υπόλοιπο 80% θα χρησιμοποιηθεί ως training/testing να αναπτύξουμε το μοντέλα.

image.png.8b3054f2a17978cf29dcfab66ab6e102.png

To validation set μας αποτελείται τώρα από 101 instances και θα το χρησιμοποιήσουμε μόνο στο τελικό βήμα.

 

Ας δούμε τώρα το training set. Βλέπουμε ότι έχουμε συνολικά 405 instances.

image.png.72ce5381e1ba8ae755af25017040d7bc.png

 

 

 

 

Τώρα θα χωρίσουμε το training set σε 5-ίσα μέρη

image.png.7b06e607e6989f64568a9ba4f7635caa.png

Τώρα θα φτιάξουμε τα 5 train-test folds

image.png.376d8599a28a5a878c3552b44d418dc2.png

Για το fold-1 έχουμε 324 training και 81 testing instances. Εξίσου για τα υπόλοιπα 4.

image.png.6d8c1c2b3ed44ff812299b059af29bab.png

Τώρα έχουμε τα 5 folds έτοιμα. Πάμε τώρα στου αλγόριθμους:

Πρώτα θα δούμε τον k-NN

image.png.f27842135282c514a9e6863d21ea12b1.png

Βλέπουμε ότι για το πρώτο fold είχαμε RMSE=4.9 χρησιμοποιώντας την τιμή 3 για k.

image.png.309136750bcd549884ddd284954dbf57.png

Για το 2ο fold είχαμε RMSE_2  = 4.36.

Για να δούμε τα αποτελέσματα για τα 5-Folds συνολικά

image.png.b73b10cf3e282f22074034f55d5c179e.png

Άρα βλέπουμε ότι στο 5-Fold Cross Validation o kNN με k=3 πέτυχε RMSE mean= 4.635473 std= 0.263047.

Για να δούμε τι αποτελέσματα θα πάρουμε αν χρησιμοποιήσουμε αν βάλουμε για k=5.

                      image.png.375983801f779915cf0bea30b06b8c3e.png

Βλέπουμε ότι τα αποτελέσματα χειροτέρεψαν καθώς το σφαλμα RMSE ήταν 5.110509

 

Για να εφαρμόσουμε τον k-ΝΝ με k=3 στο validation set και να δούμε τι τελική απόδοση έχουμε.

 

image.png.939a05674741e1992d0a76ce34f4d50d.png

Βλέπουμε το με τον αλγόριθμο kNN με κ=3 πετύχαμε RMSE = 3.96 στο Validation set μασ. Αυτό που παρατηρούμε είναι ότι οι τιμές της αξίας των σπιτιών είναι underpredicted δηλαδή το μοντέλο μας τις προβλέπει χαμηλότερες από ότι είναι οι πραγματικές.

 

 

 

Τώρα δοκιμάζουμε το Random Forest, θα αφήσουμε όλες τις παραμέτρους default και θα δοκιμάσουμε μόνο τον αριθμό των estimators 10 kai 100.

image.png.49d28e6b060d28d7511e1b1cf2ec7ef2.png

Εδώ δοκιμάσαμε με number of estimators 10 και είχαμε τα αποτελέσματα RMSE για τα 5-folds.

                               image.png.389bcc984d5dacd8445c28ac08af4957.png

 

image.png.14024bee23e695436a5e868a06f140b0.png

Αποτελέσματα που πέτυχε ο Random Forest με number of estimators n=10 στο Validation set. Εδώ είχαμε RMSE=3.49 σαφώς καλύτερη τιμή από ότι πέτυχε ο kNN me k=3 που είχαμε RMSE = 3.96 .

image.png.4d450a0a2d6f5ca6665d8afb8e08211d.png

Αποτελέσματα που πέτυχε ο Random Forest με number of estimators n=100 στο Validation set. Εδώ είχαμε RMSE=2.96 σαφώς καλύτερη τιμή από ότι είχαμε προηγούμενος.

image.png.a469e6c02ec768ecb3f474fab7240398.png

Αποτελέσματα που πέτυχε ο Random Forest με number of estimators n=500 στο Validation set. Εδώ είχαμε RMSE=2.93 βλέπουμε ότι το αποτέλεσμα βελτιώθηκε ελάχιστα και ότι μάλλον πιάσαμε ταβάνι.

Στο επόμενο θα δειξούμε τι αποτελέσματα μπορούμε να πετύχουμε με τον Support Vector Machines σε αυτό το dataset. 

 

Επεξ/σία από dr_frozenarm
  • Like 7
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...