Επιστήμη δεδομένων με Python: 8 τρόποι για να κάνετε γραμμική παλινδρόμηση και να μετρήσετε την ταχύτητά τους

Σε αυτό το άρθρο, συζητάμε 8 τρόπους εκτέλεσης απλής γραμμικής παλινδρόμησης χρησιμοποιώντας κώδικα / πακέτα Python. Παρακολουθούμε τα πλεονεκτήματα και τα μειονεκτήματά τους και δείχνουμε το σχετικό υπολογιστικό μέτρο πολυπλοκότητάς τους.

Για πολλούς επιστήμονες δεδομένων, η γραμμική παλινδρόμηση είναι το σημείο εκκίνησης πολλών έργων στατιστικής μοντελοποίησης και προγνωστικής ανάλυσης. Η σημασία της τοποθέτησης (με ακρίβεια και ταχύτητα) ενός γραμμικού μοντέλου σε ένα μεγάλο σύνολο δεδομένων δεν μπορεί να υπερεκτιμηθεί. Όπως επισημαίνεται σε αυτό το άρθρο, ο όρος « LINEAR » στο μοντέλο γραμμικής παλινδρόμησης αναφέρεται στους συντελεστές και όχι στον βαθμό των χαρακτηριστικών.

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

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

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

Λόγω της ευρείας δημοτικότητας της βιβλιοθήκης μηχανικής μάθησης scikit-learning, μια κοινή προσέγγιση είναι συχνά να καλέσετε την κλάση Linear Model από αυτήν τη βιβλιοθήκη και να ταιριάξετε τα δεδομένα. Αν και αυτό μπορεί να προσφέρει πρόσθετα πλεονεκτήματα από την εφαρμογή άλλων χαρακτηριστικών αγωγών της μηχανικής μάθησης (π.χ. κανονικοποίηση δεδομένων, κανονικοποίηση συντελεστή μοντέλου, τροφοδοσία του γραμμικού μοντέλου σε άλλο μεταγενέστερο μοντέλο), αυτή δεν είναι συχνά η ταχύτερη ή καθαρότερη μέθοδος όταν ένας αναλυτής δεδομένων χρειάζεται μόνο μια γρήγορη και εύκολος τρόπος προσδιορισμού των συντελεστών παλινδρόμησης (και ορισμένων βασικών σχετικών στατιστικών).

Υπάρχουν ταχύτερες και καθαρότερες μέθοδοι. Αλλά όλα αυτά ενδέχεται να μην προσφέρουν την ίδια ποσότητα πληροφοριών ή ευελιξία μοντελοποίησης.

Διαβάστε παρακάτω.

Ολόκληρος ο κωδικός πλάκας λέβητα για διάφορες μεθόδους γραμμικής παλινδρόμησης είναι διαθέσιμος εδώ στο αποθετήριο GitHub. Τα περισσότερα από αυτά βασίζονται στο πακέτο SciPy.

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

Επιτρέψτε μου να συζητήσω για κάθε μέθοδο εν συντομία,

Μέθοδος: Scipy.polyfit () ή numpy.polyfit ()

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

Μέθοδος: Stats.linregress ()

Πρόκειται για μια εξαιρετικά εξειδικευμένη λειτουργία γραμμικής παλινδρόμησης που διατίθεται στη μονάδα στατιστικών στοιχείων του Scipy. Είναι αρκετά περιορισμένη στην ευελιξία της καθώς βελτιστοποιείται για τον υπολογισμό μιας γραμμικής παλινδρόμησης ελάχιστων τετραγώνων μόνο για δύο σύνολα μετρήσεων. Έτσι, δεν μπορείτε να ταιριάξετε ένα γενικευμένο γραμμικό μοντέλο ή παλινδρόμηση πολλαπλών παραλλαγών χρησιμοποιώντας αυτό. Όμως, λόγω της εξειδικευμένης φύσης του, είναι μια από τις ταχύτερες μεθόδους όσον αφορά την απλή γραμμική παλινδρόμηση. Εκτός από τον προσαρμοσμένο συντελεστή και όρο αναχαίτισης, επιστρέφει επίσης βασικά στατιστικά στοιχεία όπως συντελεστή R2 και τυπικό σφάλμα.

Μέθοδος: Optimize.curve_fit ()

Αυτό είναι στην ίδια γραμμή με τη μέθοδο Polyfit, αλλά γενικότερα στη φύση. Αυτή η ισχυρή λειτουργία από τη μονάδα scipy.optimize μπορεί να χωρέσει οποιαδήποτε συνάρτηση που ορίζεται από το χρήστη σε ένα σύνολο δεδομένων κάνοντας ελαχιστοποίηση τετραγώνων

Για απλή γραμμική παλινδρόμηση, μπορεί κανείς να γράψει μια γραμμική συνάρτηση mx + c και να καλέσει αυτόν τον εκτιμητή. Εννοείται ότι λειτουργεί και για παλινδρόμηση πολλαπλών παραλλαγών. Επιστρέφει μια σειρά παραμέτρων συνάρτησης για τις οποίες το ελάχιστο τετράγωνο μέτρο ελαχιστοποιείται και η σχετική μήτρα συνδιακύμανσης.

Μέθοδος: numpy.linalg.lstsq

Αυτή είναι η θεμελιώδης μέθοδος υπολογισμού λύσης ελάχιστου τετραγώνου σε ένα γραμμικό σύστημα εξίσωσης με παραγοντοποίηση μήτρας. Προέρχεται από την εύχρηστη γραμμική άλγεβρα ενότητα του πακέτου numpy. Κάτω από την κουκούλα, επιλύει την εξίσωση ax = b υπολογίζοντας ένα διάνυσμα x που ελαχιστοποιεί το Euclidean 2-norm || b - τσεκούρι || ² .

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

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

Μέθοδος: Statsmodels.OLS ()

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

Για γραμμική παλινδρόμηση, μπορεί κανείς να χρησιμοποιήσει τη συνάρτηση OLS ή Ordinary-Least-Square από αυτό το πακέτο και να λάβει τις πλήρεις στατιστικές πληροφορίες σχετικά με τη διαδικασία εκτίμησης.

Ένα μικρό κόλπο που πρέπει να θυμάστε είναι ότι πρέπει να προσθέσετε μια σταθερά χειροκίνητα στα δεδομένα x για τον υπολογισμό της αναχαίτισης, διαφορετικά από προεπιλογή θα αναφέρει μόνο τον συντελεστή. Ακολουθεί το στιγμιότυπο της συνολικής περίληψης αποτελεσμάτων του μοντέλου OLS. Είναι τόσο πλούσιο όσο οποιαδήποτε λειτουργική στατιστική γλώσσα όπως η R ή η Julia.

Μέθοδος: Αναλυτική λύση χρησιμοποιώντας αντίστροφη μέθοδο μήτρας

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

Αναλυτική παραγωγή και συζήτηση σχετικά με αυτήν τη λύση συζητούνται εδώ.

Κάποιος έχει δύο επιλογές εδώ:

(α) χρησιμοποιώντας απλό πολλαπλασιαστικό αντίστροφο πίνακα.

(β) υπολογισμός του Moore-Penrose γενικευμένου ψευδο-αντίστροφου πίνακα x-data ακολουθούμενο από λήψη προϊόντος τελείας με τα δεδομένα y. Επειδή αυτή η 2η διαδικασία περιλαμβάνει αποσύνθεση μοναδικής τιμής (SVD), είναι πιο αργή, αλλά μπορεί να λειτουργήσει για καλά ρυθμισμένο σύνολο δεδομένων.

Μέθοδος: sklearn.linear_model.LinearRegression ()

Αυτή είναι η πεμπτουσία μέθοδος που χρησιμοποιείται από την πλειοψηφία των μηχανικών μηχανικής μάθησης και των επιστημόνων δεδομένων. Φυσικά, για το πρόβλημα του πραγματικού κόσμου, πιθανότατα δεν χρησιμοποιείται ποτέ πολύ και αντικαθίσταται από αλγόριθμους εγκυμοσύνης και κανονικοποίησης όπως η παλινδρόμηση Lasso ή η παλινδρόμηση Ridge. Αλλά ο βασικός πυρήνας αυτών των προηγμένων λειτουργιών βρίσκεται σε αυτό το μοντέλο.

Μέτρηση της ταχύτητας και του χρόνου πολυπλοκότητας αυτών των μεθόδων

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

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

Εδώ είναι ο κωδικός πλάκας λέβητα για αυτό. Και εδώ είναι το αποτέλεσμα. Λόγω της απλότητάς τους, οι stats.linregress και οι απλές αντίστροφες μέθοδοι matrix είναι ταχύτερες, ακόμη και έως και 10 εκατομμύρια σημεία δεδομένων.

Περίληψη

Ως επιστήμονας δεδομένων, πρέπει πάντα να διερευνήσει πολλές επιλογές για την επίλυση της ίδιας εργασίας ανάλυσης ή μοντελοποίησης και να επιλέξει το καλύτερο για το συγκεκριμένο πρόβλημα.

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

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

Ο στόχος αυτού του άρθρου είναι κυρίως να συζητηθεί η σχετική ταχύτητα / υπολογιστική πολυπλοκότητα αυτών των μεθόδων. Δείξαμε το υπολογιστικό μέτρο πολυπλοκότητας καθενός από αυτά δοκιμάζοντας ένα σύνολο συνθετικών δεδομένων αυξανόμενου μεγέθους (έως 10 εκατομμύρια δείγματα). Παραδόξως, η απλή αναλυτική λύση matrix λειτουργεί πολύ γρήγορα σε σύγκριση με το ευρέως χρησιμοποιούμενο Linear Model της scikit-learn.

Εάν έχετε οποιεσδήποτε ερωτήσεις ή ιδέες για κοινή χρήση, επικοινωνήστε με τον συγγραφέα στο tirthajyoti [AT] gmail.com . Επίσης, μπορείτε να ελέγξετε τα αποθετήρια GitHub του συντάκτη για άλλα αποσπάσματα κώδικα διασκέδασης σε Python, R ή MATLAB και πόρους μηχανικής μάθησης. Εάν είστε, όπως εγώ, παθιασμένοι με τη μηχανική εκμάθηση / την επιστήμη δεδομένων / τους ημιαγωγούς, μη διστάσετε να με προσθέσετε στο LinkedIn ή να με ακολουθήσετε στο Twitter.