Προγραμματισμός

Επανεξέταση: Το Scikit-learning λάμπει για απλούστερη μηχανική εκμάθηση

Το Scikits είναι επιστημονικές εργαλειοθήκες που βασίζονται σε Python και κατασκευάζονται γύρω από το SciPy, τη βιβλιοθήκη Python για επιστημονικούς υπολογιστές. Το Scikit-learn είναι ένα έργο ανοιχτού κώδικα που επικεντρώνεται στη μηχανική μάθηση: ταξινόμηση, παλινδρόμηση, ομαδοποίηση, μείωση διαστάσεων, επιλογή μοντέλου και προεπεξεργασία. Πρόκειται για ένα αρκετά συντηρητικό έργο που είναι πολύ προσεκτικό για την αποφυγή ερπυσμού πεδίου και την απόρριψη μη αποδεδειγμένων αλγορίθμων, για λόγους συντηρησιμότητας και περιορισμένων πόρων προγραμματιστή. Από την άλλη πλευρά, έχει μια πολύ ωραία επιλογή συμπαγών αλγορίθμων και χρησιμοποιεί το Cython (το μεταγλωττιστή Python-to-C) για λειτουργίες που πρέπει να είναι γρήγορες, όπως οι εσωτερικοί βρόχοι.

Μεταξύ των περιοχών που κάνει το Scikit-Learn δεν Η κάλυψη είναι η βαθιά μάθηση, η ενίσχυση της μάθησης, τα γραφικά μοντέλα και η πρόβλεψη ακολουθίας. Ορίζεται ως εντός και για το Python, επομένως δεν διαθέτει API για άλλες γλώσσες. Το Scikit-learn δεν υποστηρίζει το PyPy, το γρήγορο just-in-time σύνταξη της εφαρμογής Python, επειδή οι εξαρτήσεις του NumPy και SciPy δεν υποστηρίζουν πλήρως το PyPy.

Το Scikit-learn δεν υποστηρίζει επιτάχυνση GPU για πολλούς λόγους που σχετίζονται με την πολυπλοκότητα και τις εξαρτήσεις του μηχανήματος που θα εισαγάγει. Και πάλι, εκτός από τα νευρωνικά δίκτυα, το Scikit-learning έχει λίγη ανάγκη για επιτάχυνση GPU.

Λειτουργίες Scikit-Learn

Όπως ανέφερα, το Scikit-learn έχει μια καλή επιλογή αλγορίθμων για ταξινόμηση, παλινδρόμηση, ομαδοποίηση, μείωση διαστάσεων, επιλογή μοντέλου και προεπεξεργασία. Στην περιοχή ταξινόμησης, που αφορά τον προσδιορισμό της κατηγορίας στην οποία ανήκει ένα αντικείμενο και ονομάζεται εποπτευόμενη μάθηση, εφαρμόζει μηχανές φορέα υποστήριξης (SVM), πλησιέστερους γείτονες, λογιστική παλινδρόμηση, τυχαίο δάσος, δέντρα αποφάσεων και ούτω καθεξής, έως ένα νευρωνικό δίκτυο πολλαπλών επιπέδων perceptron (MLP).

Ωστόσο, η εφαρμογή του MLP της Scikit-learn δεν προορίζεται ρητά για εφαρμογές μεγάλης κλίμακας. Για εφαρμογές μεγάλης κλίμακας, βασισμένες σε GPU και για βαθιά μάθηση, κοιτάξτε τα πολλά σχετικά έργα του Scikit-learning, τα οποία περιλαμβάνουν πλαίσια βαθύ νευρωνικών δικτύων φιλικών προς Python, όπως το Keras και το Theano.

Για παλινδρόμηση, που αφορά την πρόβλεψη ενός χαρακτηριστικού συνεχούς αξίας που σχετίζεται με ένα αντικείμενο (όπως η τιμή ενός αποθέματος), το Scikit-learn έχει υποστήριξη παλινδρόμησης φορέα (SVR), παλινδρόμηση κορυφής, Lasso, Elastic Net, παλινδρόμηση ελάχιστης γωνίας ), Bayesian παλινδρόμηση, διάφορα είδη ισχυρής παλινδρόμησης και ούτω καθεξής. Αυτή είναι στην πραγματικότητα μια μεγαλύτερη επιλογή αλγορίθμων παλινδρόμησης από ό, τι θα ήθελαν οι περισσότεροι αναλυτές, αλλά υπάρχουν καλές περιπτώσεις χρήσης για κάθε μία που έχει συμπεριληφθεί.

Για την ομαδοποίηση, μια μη επιτηρούμενη τεχνική μάθησης στην οποία παρόμοια αντικείμενα ομαδοποιούνται αυτόματα σε σύνολα, το Scikit-learning έχει k-μέσα, φασματική ομαδοποίηση, μέση μετατόπιση, ιεραρχική ομαδοποίηση, DBSCAN και μερικούς άλλους αλγόριθμους. Και πάλι, έχει συμπεριληφθεί το φάσμα των συντηρητικών αλγορίθμων.

Η μείωση διαστάσεων αφορά τη μείωση του αριθμού των τυχαίων μεταβλητών που πρέπει να ληφθούν υπόψη, χρησιμοποιώντας τεχνικές αποσύνθεσης όπως ανάλυση βασικών συστατικών (PCA) και μη αρνητική παραγοντοποίηση μήτρας (NMF) ή τεχνικές επιλογής χαρακτηριστικών. Η επιλογή μοντέλου αφορά τη σύγκριση, την επικύρωση και την επιλογή παραμέτρων και μοντέλων και χρησιμοποιεί αλγόριθμους όπως αναζήτηση πλέγματος, εγκάρσια επικύρωση και συναρτήσεις μέτρησης. Και για τους δύο τομείς, το Scikit-learning περιλαμβάνει όλους τους καλά αποδεδειγμένους αλγόριθμους και μεθόδους, σε εύκολα προσβάσιμα API.

Η προεπεξεργασία, η οποία περιλαμβάνει εξαγωγή χαρακτηριστικών και ομαλοποίηση, είναι ένα από τα πρώτα και πιο σημαντικά μέρη της διαδικασίας μηχανικής μάθησης. Η κανονικοποίηση μετατρέπει τις δυνατότητες σε νέες μεταβλητές, συχνά με μηδενική μέση τιμή και διακύμανση μονάδας, αλλά μερικές φορές να βρίσκεται μεταξύ μιας δεδομένης ελάχιστης και μέγιστης τιμής, συχνά 0 και 1. Η εξαγωγή χαρακτηριστικών μετατρέπει κείμενο ή εικόνες σε αριθμούς που μπορούν να χρησιμοποιηθούν για μηχανική εκμάθηση. Και πάλι, το Scikit-learn σερβίρει όλα τα νόστιμα κλασικά πιάτα που θα περίμενε κανείς σε αυτό το smorgasbord. Είστε ελεύθεροι να συλλέξετε ό, τι σας αρέσει.

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

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

Εγκατάσταση και εκτέλεση του Scikit-learn

Η εγκατάσταση του Scikit-Learn μπορεί να ήταν η ευκολότερη εγκατάσταση πλαισίου μηχανικής μάθησης ποτέ. Εφόσον είχα ήδη εγκαταστήσει όλες τις προϋποθέσεις και αρκετά ενημερωμένες (Python, Numpy και Scipy), χρειάστηκε μια εντολή:

$ sudo pip install -U scikit-learn

Εντάξει, μου πήρε δύο εντολές, γιατί την πρώτη φορά που ξέχασα sudo.

Αυτό με έκανε Scikit-Learn 0.18.1. Για καλό μέτρο, έλεγξα επίσης το αποθετήριο GitHub, εγκατέστησα το πλαίσιο δοκιμής μύτης και δημιούργησα την έκδοση ανάπτυξης του Scikit-learn from source, η οποία ήταν τόσο απλή όσο η αλλαγή στη ρίζα του αποθετηρίου και η πληκτρολόγηση φτιαχνω, κανω. Χρειάστηκε λίγος χρόνος για να μεταγλωττίσετε το Python, να δημιουργήσετε και να συντάξετε όλα τα αρχεία C, να συνδέσετε τη συναρμολόγηση και να εκτελέσετε όλες τις δοκιμές, αλλά δεν χρειάστηκε καμία παρέμβαση.

Η εκτέλεση του πρώτου παραδείγματος Scikit-Learn ήταν επίσης πολύ εύκολη. Από τη σελίδα γενικών παραδειγμάτων, έκανα κλικ στο παράδειγμα για να σχεδιάσω διασταυρούμενες επικυρώσεις, να διαβάσω το σημειωματάριο, να κατεβάσω τον πηγαίο κώδικα Python και το σημειωματάριο Jupyter και να τα τρέξω. Η πηγή του Python παρατήρησε για λίγα δευτερόλεπτα, δημιούργησε ορισμένα προειδοποιητικά μηνύματα και έβαλε ένα γράφημα. Το σημειωματάριο Jupyter έκανε ουσιαστικά το ίδιο πράγμα όταν το έτρεξα διαδραστικά, όπως μπορείτε να δείτε στο παρακάτω σχήμα.

Το Scikit-Learn κερδίζει τα υψηλότερα σημάδια για ευκολία ανάπτυξης μεταξύ όλων των πλαισίων μηχανικής μάθησης που έχω δοκιμάσει, κυρίως επειδή οι αλγόριθμοι λειτουργούν όπως διαφημίζονται και τεκμηριώνονται, τα API είναι συνεπή και καλά σχεδιασμένα και υπάρχουν λίγες "αναντιστοιχίες αντίστασης" μεταξύ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Είναι χαρά μου να δουλεύω με μια βιβλιοθήκη στην οποία οι λειτουργίες έχουν ολοκληρωθεί καλά και τα σφάλματα ξεπλύθηκαν καλά.

Μαθαίνοντας Scikit-Learn

Η τεκμηρίωση Scikit-Learn είναι καλή και τα παραδείγματα είναι πολλά - περίπου 200 συνολικά. Τα περισσότερα παραδείγματα περιλαμβάνουν τουλάχιστον ένα γράφημα που παράγεται από τα δεδομένα που αναλύθηκαν χρησιμοποιώντας το Matplotlib. Όλα αυτά συμβάλλουν στην ευκολία ανάπτυξης της βιβλιοθήκης και στην ευκολία της μάθησης.

Υπάρχει ένα μακρύ σεμινάριο, "Ένα σεμινάριο για τη στατιστική μάθηση για την επεξεργασία επιστημονικών δεδομένων", το οποίο έχει πέντε ενότητες και ένα παράρτημα σχετικά με την εύρεση βοήθειας. Το σεμινάριο είναι αρκετά καλό, τόσο για την κάλυψη των βασικών εννοιών όσο και για την εμφάνιση παραδειγμάτων χρησιμοποιώντας πραγματικά δεδομένα, κώδικα και γραφήματα. Καλεί επίσης παραδείγματα που σχετίζονται με το κείμενο - για παράδειγμα, τη σύγκριση τεσσάρων διαφορετικών ταξινομητών SVM που φαίνονται στο παρακάτω σχήμα.

Τα παραδείγματα που δούλεψα ήταν όλα αρκετά ξεκάθαρα στις ιστοσελίδες τους. Σε πολλές περιπτώσεις, όταν έκανα λήψη και έτρεξα τα παραδείγματα, θα έκαναν προειδοποιήσεις που δεν εμφανίζονται στην ιστοσελίδα, αλλά θα παρήγαγαν πάντα τα ίδια αποτελέσματα. Το πρώτο σχήμα παραπάνω, που δείχνει την έξοδο του φορητού υπολογιστή Jupyter για τη χάραξη διασταυρούμενων επικυρώσεων, είναι ένα καλό παράδειγμα.

Αποδίδω τις περισσότερες από τις προειδοποιήσεις σε ελαττώματα στο πλαίσιο της Apple vecLib και στην εξέλιξη στις βιβλιοθήκες Python. Μερικοί φαίνεται να είναι προειδοποιήσεις στο Python 2.7.10 που δεν υπήρχαν σε οποιαδήποτε έκδοση χρησιμοποιήθηκε για την ιστοσελίδα. Το παρακάτω σχήμα έχει μια τέτοια προειδοποίηση. η αντίστοιχη ιστοσελίδα δεν το κάνει.

Ως βιβλιοθήκη Python για μηχανική μάθηση, με σκόπιμα περιορισμένο πεδίο, το Scikit-learning είναι πολύ καλό. Έχει μια ευρεία ποικιλία καθιερωμένων αλγορίθμων, με ενσωματωμένα γραφικά. Είναι σχετικά εύκολο να εγκαταστήσετε, να μάθετε και να χρησιμοποιήσετε και έχει καλά παραδείγματα και σεμινάρια.

Από την άλλη πλευρά, το Scikit-learning δεν καλύπτει την εκμάθηση σε βάθος ή την εκμάθηση ενίσχυσης, η οποία αφήνει τα τρέχοντα σκληρά αλλά σημαντικά προβλήματα, όπως η ακριβής ταξινόμηση εικόνας και η αξιόπιστη ανάλυση γλώσσας σε πραγματικό χρόνο και μετάφραση. Επιπλέον, δεν περιλαμβάνει γραφικά μοντέλα ή προβλέψεις ακολουθιών, δεν μπορεί πραγματικά να χρησιμοποιηθεί από άλλες γλώσσες εκτός από το Python και δεν υποστηρίζει PyPy ή GPU.

Στο πιάσιμο, η απόδοση που επιτυγχάνει το Scikit-learning για μηχανική εκμάθηση εκτός από τα νευρωνικά δίκτυα είναι αρκετά καλή, ακόμη και χωρίς την επιτάχυνση των PyPy ή των GPU. Το Python είναι συχνά φερμουάρ από ό, τι οι άνθρωποι περιμένουν από έναν διερμηνέα και η χρήση του Cython για τη δημιουργία κώδικα C για εσωτερικούς βρόχους εξαλείφει τα περισσότερα από τα σημεία συμφόρησης στο Scikit-Learn.

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

Εάν είστε οπαδός της Python, το Scikit-learning μπορεί να είναι η καλύτερη επιλογή μεταξύ των βιβλιοθηκών απλής μηχανικής μάθησης. Εάν προτιμάτε το Scala, τότε το Spark ML μπορεί να είναι μια καλύτερη επιλογή. Και αν σας αρέσει να σχεδιάζετε τους αγωγούς εκμάθησής σας σχεδιάζοντας διαγράμματα και γράφοντας ένα περιστασιακό απόσπασμα Python ή R, τότε το Microsoft Cortana Analytics Suite - ειδικά το Azure Machine Learning Studio - μπορεί να ταιριάζει όμορφα στις προτιμήσεις σας.

---

Κόστος: Δωρεάν ανοιχτού κώδικα.Πλατφόρμα: Απαιτεί Python, NumPy, SciPy και Matplotlib. Διατίθενται εκδόσεις για MacOS, Linux και Windows.

Πίνακας βαθμολογίαςΜοντέλα και αλγόριθμοι (25%) Ευκολία ανάπτυξης (25%) Τεκμηρίωση (20%) Εκτέλεση (20%) Ευκολία ανάπτυξης (10%) Συνολική βαθμολογία (100%)
Scikit-Learn 0.18.199989 8.8
$config[zx-auto] not found$config[zx-overlay] not found