Η διαδικασία δημιουργίας, χρήσης και συντήρησης μοντέλων μηχανικής μάθησης και των δεδομένων που χρησιμοποιούν είναι πολύ διαφορετική από πολλές άλλες ροές εργασίας ανάπτυξης. Σε αυτό το μάθημα, θα απομυθοποιήσουμε τη διαδικασία και θα περιγράψουμε τις βασικές τεχνικές που πρέπει να γνωρίζετε. Θα:
Η διαδικασία δημιουργίας, χρήσης και συντήρησης μοντέλων μηχανικής μάθησης και των δεδομένων που χρησιμοποιούν είναι μια διαδικασία πολύ διαφορετική από πολλές άλλες ροές εργασίας ανάπτυξης. Σε αυτό το μάθημα, θα απομυθοποιήσουμε τη διαδικασία και θα περιγράψουμε τις βασικές τεχνικές που πρέπει να γνωρίζετε. Εσείς θα:
- Κατανοήσετε τις διαδικασίες που υποστηρίζουν τη μηχανική μάθηση σε υψηλό επίπεδο.
- Εξερευνήσετε βασικές έννοιες όπως "μοντέλα", "προβλέψεις" και "δεδομένα εκπαίδευσης".
- Κατανοήσετε τις διαδικασίες που στηρίζουν τη μηχανική μάθηση σε υψηλό επίπεδο.
- Εξερευνήσετε βασικές έννοιες όπως 'μοντέλα', 'προβλέψεις' και 'δεδομένα εκπαίδευσης'.
[](https://youtu.be/4NGM0U2ZSHU "ML για αρχάριους - Τεχνικές Μηχανικής Μάθησης")
> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα σύντομο βίντεο που επεξηγεί αυτό το μάθημα.
> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα σύντομο βίντεο που αναλύει αυτό το μάθημα.
## Εισαγωγή
Σε υψηλό επίπεδο, η τέχνη της δημιουργίας διαδικασιών μηχανικής μάθησης (ML) αποτελείται από μια σειρά βημάτων:
1. **Αποφασίστε την ερώτηση**. Οι περισσότερες διαδικασίες ML ξεκινούν με την υποβολή μιας ερώτησης που δεν μπορεί να απαντηθεί με ένα απλό πρόγραμμα συνθηκών ή μια μηχανή βασισμένη σε κανόνες. Αυτές οι ερωτήσεις συχνά περιστρέφονται γύρω από προβλέψεις βασισμένες σε μια συλλογή δεδομένων.
2. **Συλλέξτε και προετοιμάστε δεδομένα**. Για να μπορέσετε να απαντήσετε στην ερώτησή σας, χρειάζεστε δεδομένα. Η ποιότητα και, μερικές φορές, η ποσότητα των δεδομένων σας θα καθορίσει πόσο καλά μπορείτε να απαντήσετε στην αρχική σας ερώτηση. Η οπτικοποίηση των δεδομένων είναι μια σημαντική πτυχή αυτής της φάσης. Αυτή η φάση περιλαμβάνει επίσης τη διαίρεση των δεδομένων σε ομάδες εκπαίδευσης και δοκιμής για τη δημιουργία ενός μοντέλου.
3. **Επιλέξτε μέθοδο εκπαίδευσης**. Ανάλογα με την ερώτησή σας και τη φύση των δεδομένων σας, πρέπει να επιλέξετε πώς θέλετε να εκπαιδεύσετε ένα μοντέλο ώστε να αντικατοπτρίζει καλύτερα τα δεδομένα σας και να κάνει ακριβείς προβλέψεις. Αυτό είναι το μέρος της διαδικασίας ML που απαιτεί συγκεκριμένη εξειδίκευση και, συχνά, σημαντική ποσότητα πειραματισμού.
4. **Εκπαιδεύστε το μοντέλο**. Χρησιμοποιώντας τα δεδομένα εκπαίδευσης, θα χρησιμοποιήσετε διάφορους αλγόριθμους γιανα εκπαιδεύσετε ένα μοντέλο ώστε να αναγνωρίζει μοτίβα στα δεδομένα. Το μοντέλο μπορεί να χρησιμοποιεί εσωτερικά βάρη που μπορούν να προσαρμοστούν γιανα δώσουν προτεραιότητα σε ορισμένα μέρη των δεδομένων έναντι άλλων για τη δημιουργία ενός καλύτερου μοντέλου.
5. **Αξιολογήστε το μοντέλο**. Χρησιμοποιείτε δεδομένα που δεν έχουν ξαναχρησιμοποιηθεί (τα δεδομένα δοκιμής σας) από το συλλεγμένο σύνολο γιανα δείτε πώς αποδίδει το μοντέλο.
6. **Ρύθμιση παραμέτρων**. Με βάση την απόδοση του μοντέλου σας, μπορείτε να επαναλάβετε τη διαδικασία χρησιμοποιώντας διαφορετικές παραμέτρους ή μεταβλητές που ελέγχουν τη συμπεριφορά των αλγορίθμων που χρησιμοποιούνται για την εκπαίδευση του μοντέλου.
7. **Προβλέψτε**. Χρησιμοποιήστε νέες εισόδους γιανα δοκιμάσετε την ακρίβεια του μοντέλου σας.
1. **Αποφασίστε την ερώτηση**. Οι περισσότερες διαδικασίες ML ξεκινούν θέτοντας μια ερώτηση που δεν μπορεί να απαντηθεί από ένα απλό προγραμματιστικό όρο ή ένα κανόνισμένο σύστημα βασισμένο σε κανόνες. Αυτές οι ερωτήσεις συχνά περιστρέφονται γύρω από προβλέψεις βάσει μιας συλλογής δεδομένων.
2. **Συλλογή και προετοιμασία δεδομένων**. Για να μπορέσετε να απαντήσετε στην ερώτησή σας, χρειάζεστε δεδομένα. Η ποιότητα και, μερικές φορές, η ποσότητα των δεδομένων σας θα καθορίσει πόσο καλά μπορείτε να απαντήσετε την αρχική σας ερώτηση. Ο οπτικοποίηση των δεδομένων είναι μια σημαντική πτυχή αυτής της φάσης. Αυτή η φάση περιλαμβάνει επίσης το διαχωρισμό των δεδομένων σε ομάδα εκπαίδευσης και δοκιμής για τη δημιουργία ενός μοντέλου.
3. **Επιλέξτε μια μέθοδο εκπαίδευσης**. Ανάλογα με την ερώτησή σας και τη φύση των δεδομένων σας, πρέπει να επιλέξετε πώς θέλετε να εκπαιδεύσετε ένα μοντέλο ώστε να αντανακλά καλύτερα τα δεδομένα σας και να κάνει ακριβείς προβλέψεις σε αυτά. Αυτό είναι το μέρος της διαδικασίας ML που απαιτεί εξειδίκευση και, συχνά, σημαντικό πείραμα.
4. **Εκπαιδεύστε το μοντέλο**. Χρησιμοποιώντας τα δεδομένα εκπαίδευσής σας, θα χρησιμοποιήσετε διάφορους αλγορίθμους γιανα εκπαιδεύσετε ένα μοντέλο ώστε να αναγνωρίζει μοτίβα στα δεδομένα. Το μοντέλο μπορεί να χρησιμοποιεί εσωτερικά βάρη που μπορούν να προσαρμοστούν γιανα δώσουν προτεραιότητα σε συγκεκριμένα μέρη των δεδομένων γιανα δημιουργηθεί καλύτερο μοντέλο.
5. **Αξιολογήστε το μοντέλο**. Χρησιμοποιείτε δεδομένα που δεν έχουν ξαναδει (τα δεδομένα δοκιμής) από το συλλεγμένο σύνολο γιανα δείτε πώς αποδίδει το μοντέλο.
6. **Ρύθμιση παραμέτρων**. Βάσει της απόδοσης του μοντέλου σας, μπορείτε να επαναλάβετε τη διαδικασία χρησιμοποιώντας διαφορετικές παραμέτρους ή μεταβλητές που ελέγχουν τη συμπεριφορά των αλγορίθμων που χρησιμοποιούνται για την εκπαίδευση του μοντέλου.
7. **Προβλέψτε**. Χρησιμοποιήστε νέα δεδομένα γιανα ελέγξετε την ακρίβεια του μοντέλου σας.
## Ποια ερώτηση να θέσετε
Οι υπολογιστές είναι ιδιαίτερα ικανοί στο να ανακαλύπτουν κρυφά μοτίβα στα δεδομένα. Αυτή η χρησιμότητα είναι πολύ χρήσιμη για ερευνητές που έχουν ερωτήσεις σχετικά με έναν συγκεκριμένο τομέα που δεν μπορούν να απαντηθούν εύκολα με τη δημιουργία μιας μηχανής βασισμένης σε κανόνες. Δεδομένης μιας αναλογιστικής εργασίας, για παράδειγμα, ένας επιστήμονας δεδομένων μπορεί να κατασκευάσει χειροποίητους κανόνες γύρω από τη θνησιμότητα των καπνιστών έναντι των μη καπνιστών.
Οι υπολογιστές είναι ιδιαίτερα ικανοί στο να ανακαλύπτουν κρυφά μοτίβα στα δεδομένα. Αυτή η χρησιμότητα είναι πολύτιμη για ερευνητές που έχουν ερωτήματα σχετικά με ένα δεδομένο πεδίο που δεν μπορούν να απαντηθούν εύκολα δημιουργώντας έναν κανόνισμένο κανόνα βασισμένο σε συνθήκες. Για παράδειγμα, σε μια πράξη επαγγέλματος, ένας επιστήμονας δεδομένων μπορεί να κατασκευάσει χειροποίητους κανόνες για τη θνησιμότητα καπνιστών έναντι μη καπνιστών.
Όταν όμως εισάγονται πολλές άλλες μεταβλητές στην εξίσωση, ένα μοντέλο ML μπορεί να αποδειχθεί πιο αποτελεσματικό για την πρόβλεψη μελλοντικών ποσοστών θνησιμότητας βάσει ιστορικού υγείας. Ένα πιο ευχάριστο παράδειγμα μπορεί να είναι η πρόβλεψη καιρού για τον μήνα Απρίλιο σε μια συγκεκριμένη τοποθεσία βάσει δεδομένων που περιλαμβάνουν γεωγραφικό πλάτος, γεωγραφικό μήκος, κλιματική αλλαγή, εγγύτητα στη θάλασσα, μοτίβα του αεροχειμάρρου και άλλα.
Όταν όμως πολλά άλλα μεταβλητά στοιχεία λαμβάνονται υπόψη, ένα μοντέλο ML μπορεί να αποδειχθεί πιο αποτελεσματικό για την πρόβλεψη μελλοντικών ποσοστών θνησιμότητας βάσει παρελθοντικού ιστορικού υγείας. Ένα πιο χαρούμενο παράδειγμα μπορεί να είναι η πρόβλεψη καιρού για τον μήνα Απρίλιο σε μια συγκεκριμένη τοποθεσία βάσει δεδομένων που περιλαμβάνουν γεωγραφικό πλάτος, μήκος, αλλαγή κλίματος, γειτνίαση με τον ωκεανό, μοτίβα του ρεύματος τζετ και άλλα.
✅ Αυτή η [παρουσίαση](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) σχετικά με μοντέλα καιρού προσφέρει μια ιστορική προοπτική για τη χρήση της ML στην ανάλυση καιρού.
✅ Αυτή η [παρουσίαση διαφανειών](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) για τα μοντέλα καιρού προσφέρει μια ιστορική προοπτική για τη χρήση ML στην ανάλυση του καιρού.
## Εργασίες πριν την κατασκευή
## Προκαταρκτικές εργασίες
Πριν ξεκινήσετε ναδημιουργείτε το μοντέλο σας, υπάρχουν αρκετές εργασίες που πρέπει να ολοκληρώσετε. Για να δοκιμάσετε την ερώτησή σας και νασχηματίσετε μια υπόθεση βάσει των προβλέψεων ενός μοντέλου, πρέπει να εντοπίσετε και να διαμορφώσετε αρκετά στοιχεία.
Πριν ξεκινήσετε ναχτίζετε το μοντέλο σας, υπάρχουν αρκετές εργασίες που πρέπει να ολοκληρώσετε. Για να δοκιμάσετε την ερώτησή σας και ναδημιουργήσετε μια υπόθεση βάσει των προβλέψεων του μοντέλου, πρέπει να προσδιορίσετε και να διαμορφώσετε αρκετά στοιχεία.
### Δεδομένα
Για να μπορέσετε να απαντήσετε στην ερώτησή σας με οποιοδήποτε είδος βεβαιότητας, χρειάζεστε μια καλή ποσότητα δεδομένων του σωστού τύπου. Υπάρχουν δύο πράγματα που πρέπει να κάνετε σε αυτό το σημείο:
Για να μπορέσετε να απαντήσετε στην ερώτησή σας με κάποια βεβαιότητα, χρειάζεστε ικανοποιητική ποσότητα δεδομένων του σωστού τύπου. Υπάρχουν δύο πράγματα που πρέπει να κάνετε σε αυτό το σημείο:
- **Συλλογή δεδομένων**. Λαμβάνοντας υπόψη το προηγούμενο μάθημα σχετικά με τη δικαιοσύνη στην ανάλυση δεδομένων, συλλέξτε τα δεδομένα σας με προσοχή. Να είστε ενήμεροι για τις πηγές αυτών των δεδομένων, τυχόν εγγενείς προκαταλήψεις που μπορεί να έχουν και νατεκμηριώσετε την προέλευσή τους.
- **Προετοιμασία δεδομένων**. Υπάρχουν αρκετά βήματα στη διαδικασία προετοιμασίας δεδομένων. Ίσως χρειαστεί να συγκεντρώσετε δεδομένα και να τα κανονικοποιήσετε εάν προέρχονται από διαφορετικές πηγές. Μπορείτε να βελτιώσετε την ποιότητα και την ποσότητα των δεδομένων μέσω διάφορων μεθόδων, όπως η μετατροπή συμβολοσειρών σε αριθμούς (όπως κάνουμε στην [Ομαδοποίηση](../../5-Clustering/1-Visualize/README.md)). Ίσως επίσης να δημιουργήσετε νέα δεδομένα βάσει των αρχικών (όπως κάνουμε στην [Κατηγοριοποίηση](../../4-Classification/1-Introduction/README.md)). Μπορείτε να καθαρίσετε και να επεξεργαστείτε τα δεδομένα (όπως θα κάνουμε πριν το μάθημα [Web App](../../3-Web-App/README.md)). Τέλος, ίσως χρειαστεί να τα τυχαιοποιήσετε και να τα ανακατέψετε, ανάλογα με τις τεχνικές εκπαίδευσης που χρησιμοποιείτε.
- **Συλλογή δεδομένων**. Λαμβάνοντας υπόψη το προηγούμενο μάθημα για τη δικαιοσύνη στην ανάλυση δεδομένων, συλλέξτε τα δεδομένα σας με προσοχή. Να είστε ενήμεροι για τις πηγές των δεδομένων,για τυχόν εγγενείς προκαταλήψεις που μπορεί να έχουν και νακαταγράψετε την προέλευσή τους.
- **Προετοιμασία δεδομένων**. Υπάρχουν πολλά βήματα στη διαδικασία προετοιμασίας δεδομένων. Μπορεί να χρειαστεί να συγκεντρώσετε δεδομένα και να τα κανονικοποιήσετε αν προέρχονται από διάφορες πηγές. Μπορείτε να βελτιώσετε την ποιότητα και την ποσότητα των δεδομένων με διάφορες μεθόδους, όπως η μετατροπή συμβολοσειρών σε αριθμούς (όπως κάνουμε στο [Ομαδοποίηση](../../5-Clustering/1-Visualize/README.md)). Μπορεί επίσης να δημιουργήσετε νέα δεδομένα βασισμένα στα αρχικά (όπως κάνουμε στην [Κατηγοριοποίηση](../../4-Classification/1-Introduction/README.md)). Μπορείτε να καθαρίσετε και να επεξεργαστείτε τα δεδομένα (όπως θα κάνουμε πριν από το μάθημα [Web App](../../3-Web-App/README.md)). Τέλος, μπορεί να χρειαστεί να τα τυχαία ανακατέψετε, ανάλογα με τις τεχνικές εκπαίδευσής σας.
✅ Αφού συλλέξετε και επεξεργαστείτε τα δεδομένα σας, αφιερώστε λίγο χρόνο γιανα δείτε αν η μορφή τους θα σας επιτρέψει να απαντήσετε στην ερώτηση που θέσατε. Μπορεί να διαπιστώσετε ότι τα δεδομένα δεν θα αποδώσουν καλά στην εργασία που έχετε θέσει, όπως ανακαλύπτουμε στα μαθήματα [Ομαδοποίησης](../../5-Clustering/1-Visualize/README.md)!
✅ Αφού συλλέξετε και επεξεργαστείτε τα δεδομένα σας, κάντε μια παύση γιανα δείτε αν το σχήμα τους θα σας επιτρέψει να απαντήσετε στην ερώτηση που έχετε θέσει. Μπορεί να συμβεί να μην αποδώσουν καλά τα δεδομένα στην εργασία σας, όπως ανακαλύπτουμε στα μαθήματα [Ομαδοποίησης](../../5-Clustering/1-Visualize/README.md)!
### Χαρακτηριστικά και Στόχος
### Χαρακτηριστικά και στόχος
Ένα [χαρακτηριστικό](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) είναι μια μετρήσιμη ιδιότητα των δεδομένων σας. Σε πολλά σύνολα δεδομένων εκφράζεται ως επικεφαλίδα στήλης όπως 'ημερομηνία', 'μέγεθος' ή 'χρώμα'. Η μεταβλητή χαρακτηριστικού σας, συνήθως εκπροσωπείται ως `X` στον κώδικα, αντιπροσωπεύει τη μεταβλητή εισόδου που θα χρησιμοποιηθεί για την εκπαίδευση του μοντέλου.
Ένα [χαρακτηριστικό](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) είναι μια μετρήσιμη ιδιότητα των δεδομένων σας. Σε πολλά σύνολα δεδομένων εκφράζεται ως επικεφαλίδα στήλης όπως 'ημερομηνία', 'μέγεθος' ή 'χρώμα'. Η μεταβλητή χαρακτηριστικού, συνήθως αναπαριστώμενη ως `X` στον κώδικα, αντιπροσωπεύει τη μεταβλητή εισόδου που θα χρησιμοποιηθεί για την εκπαίδευση ενός μοντέλου.
Ο στόχος είναι αυτό που προσπαθείτε να προβλέψετε. Ο στόχος, συνήθως εκπροσωπείται ως `y` στον κώδικα, αντιπροσωπεύει την απάντηση στην ερώτηση που προσπαθείτε να θέσετε στα δεδομένα σας: τον Δεκέμβριο, ποιο **χρώμα** κολοκύθες θα είναι οι φθηνότερες; Στο Σαν Φρανσίσκο, ποιες γειτονιές θα έχουν την καλύτερη **τιμή** ακινήτων; Μερικές φορές ο στόχος αναφέρεται επίσης ως χαρακτηριστικό ετικέτας.
Ένας στόχος είναι κάτι που προσπαθείτε να προβλέψετε. Ο στόχος, συνήθως αναπαριστώμενος ως `y` στον κώδικα, αντιπροσωπεύει την απάντηση στην ερώτηση που θέτετε στα δεδομένα σας: τον Δεκέμβριο, ποια **χρώμα** κολοκύθες θα είναι φθηνότερες; στο Σαν Φρανσίσκο, ποια γειτονιά θα έχει την καλύτερη **τιμή** ακινήτων; Μερικές φορές ο στόχος αναφέρεται επίσης ως ετικέτα.
### Επιλογή μεταβλητής χαρακτηριστικού
### Επιλογή της μεταβλητής χαρακτηριστικού σας
🎓 **Επιλογή Χαρακτηριστικών και Εξαγωγή Χαρακτηριστικών** Πώς ξέρετε ποια μεταβλητή να επιλέξετε όταν δημιουργείτε ένα μοντέλο; Πιθανότατα θα περάσετε από μια διαδικασία επιλογής χαρακτηριστικών ή εξαγωγής χαρακτηριστικών γιαναεπιλέξετε τις σωστές μεταβλητές για το πιο αποδοτικό μοντέλο. Ωστόσο, δεν είναι το ίδιο πράγμα: "Η εξαγωγή χαρακτηριστικών δημιουργεί νέα χαρακτηριστικά από συναρτήσεις των αρχικών χαρακτηριστικών, ενώ η επιλογή χαρακτηριστικών επιστρέφει ένα υποσύνολο των χαρακτηριστικών." ([πηγή](https://wikipedia.org/wiki/Feature_selection))
🎓 **Επιλογή Χαρακτηριστικών και Εξαγωγή Χαρακτηριστικών** Πώς ξέρετε ποια μεταβλητή να επιλέξετε κατά την κατασκευή ενός μοντέλου; Πιθανώς θα περάσετε από μια διαδικασία επιλογής ή εξαγωγής χαρακτηριστικών γιαναδιαλέξετε τις σωστές μεταβλητές για το πιο αποδοτικό μοντέλο. Δεν είναι το ίδιο όμως: "Η εξαγωγή χαρακτηριστικών δημιουργεί νέα χαρακτηριστικά από συναρτήσεις των αρχικών χαρακτηριστικών, ενώ η επιλογή χαρακτηριστικών επιστρέφει ένα υποσύνολο των χαρακτηριστικών." ([πηγή](https://wikipedia.org/wiki/Feature_selection))
### Οπτικοποίηση των δεδομένων σας
### Οπτικοποιήστε τα δεδομένα σας
Μια σημαντική πτυχή του εργαλείου του επιστήμονα δεδομένων είναι η δύναμη να οπτικοποιεί δεδομένα χρησιμοποιώντας αρκετές εξαιρετικές βιβλιοθήκες όπως Seaborn ή MatPlotLib. Η αναπαράσταση των δεδομένων σας οπτικά μπορεί να σας επιτρέψει ναανακαλύψετε κρυφές συσχετίσεις που μπορείτε να αξιοποιήσετε. Οι οπτικοποιήσεις σας μπορεί επίσης να σας βοηθήσουν να ανακαλύψετε προκαταλήψεις ή μη ισορροπημένα δεδομένα (όπως ανακαλύπτουμε στην [Κατηγοριοποίηση](../../4-Classification/2-Classifiers-1/README.md)).
Μια σημαντική πτυχή των εργαλείων του επιστήμονα δεδομένων είναι η δυνατότητα οπτικοποίησης δεδομένων χρησιμοποιώντας αρκετές εξαιρετικές βιβλιοθήκες όπως Seaborn ή MatPlotLib. Ηοπτική αναπαράσταση των δεδομένων σας μπορεί να σας επιτρέψει νααποκαλύψετε κρυφές συσχετίσεις που μπορείτε να αξιοποιήσετε. Οι οπτικοποιήσεις σας μπορεί επίσης να σας βοηθήσουν να ανακαλύψετε προκατάληψη ή ανομοιόμορφα κατανεμημένα δεδομένα (όπως ανακαλύπτουμε στην [Κατηγοριοποίηση](../../4-Classification/2-Classifiers-1/README.md)).
### Διαχωρισμός του συνόλου δεδομένων σας
### Διαχωρίστε το σύνολο δεδομένων σας
Πριν από την εκπαίδευση, πρέπει να διαχωρίσετε το σύνολο δεδομένων σας σε δύο ή περισσότερα μέρη άνισης μεγέθους που εξακολουθούν να αντιπροσωπεύουν καλά τα δεδομένα.
Προτού την εκπαίδευση, πρέπει να διαχωρίσετε το σύνολο δεδομένων σας σε δύο ή περισσότερα μέρη άνισου μεγέθους που όμως θα αντιπροσωπεύουν καλά τα δεδομένα.
- **Εκπαίδευση**. Αυτό το μέρος του συνόλου δεδομένων προσαρμόζεται στο μοντέλο σας γιανα το εκπαιδεύσει. Αυτό το σύνολο αποτελεί την πλειοψηφία του αρχικού συνόλου δεδομένων.
- **Δοκιμή**. Ένα σύνολο δεδομένων δοκιμής είναι μια ανεξάρτητη ομάδα δεδομένων, συχνά συγκεντρωμένη από τα αρχικά δεδομένα, που χρησιμοποιείτε γιανα επιβεβαιώσετε την απόδοση του μοντέλου που δημιουργήθηκε.
- **Επικύρωση**. Ένα σύνολο επικύρωσης είναι μια μικρότερη ανεξάρτητη ομάδα παραδειγμάτων που χρησιμοποιείτε γιανα ρυθμίσετε τις υπερπαραμέτρους ή την αρχιτεκτονική του μοντέλουγιανα το βελτιώσετε. Ανάλογα με το μέγεθος των δεδομένων σας και την ερώτηση που θέτετε, μπορεί να μην χρειαστεί να δημιουργήσετε αυτό το τρίτο σύνολο (όπως σημειώνουμε στην [Πρόβλεψη Χρονοσειρών](../../7-TimeSeries/1-Introduction/README.md)).
- **Εκπαίδευση**. Αυτό το μέρος του συνόλου δεδομένων προσαρμόζεται στο μοντέλο σας γιανα το εκπαιδεύσει. Αυτό το σύνολο αποτελεί το μεγαλύτερο μέρος του αρχικού συνόλου.
- **Δοκιμή**. Ένα σύνολο δεδομένων δοκιμής είναι μια ανεξάρτητη ομάδα δεδομένων, συχνά συλλεγμένη από τα πρωτογενή δεδομένα, που χρησιμοποιείτε γιανα επιβεβαιώσετε την απόδοση του σχηματισμένου μοντέλου.
- **Επικύρωση**. Ένα σύνολο επικύρωσης είναι μια μικρότερη ανεξάρτητη ομάδα παραδειγμάτων που χρησιμοποιείτε γιανα ρυθμίσετε τις υπερπαραμέτρους ή την αρχιτεκτονική του μοντέλου, ώστε να βελτιώσετε το μοντέλο. Ανάλογα με το μέγεθος των δεδομένων σας και την ερώτηση που θέτετε, μπορεί να μη χρειαστεί να δημιουργήσετε αυτό το τρίτο σύνολο (όπως σημειώνουμε στην [Πρόβλεψη Χρονικής Σειράς](../../7-TimeSeries/1-Introduction/README.md)).
## Δημιουργία μοντέλου
Χρησιμοποιώντας τα δεδομένα εκπαίδευσης σας, ο στόχος σας είναι να δημιουργήσετε ένα μοντέλο, ή μια στατιστική αναπαράσταση των δεδομένων σας, χρησιμοποιώντας διάφορους αλγόριθμους γιανα το **εκπαιδεύσετε**. Η εκπαίδευση ενός μοντέλου το εκθέτει σε δεδομένα και του επιτρέπει να κάνει υποθέσεις σχετικά με αντιληπτά μοτίβα που ανακαλύπτει, επικυρώνει και αποδέχεται ή απορρίπτει.
Χρησιμοποιώντας τα δεδομένα εκπαίδευσής σας, σκοπός σας είναι να δημιουργήσετε ένα μοντέλο, ή μια στατιστική αναπαράσταση των δεδομένων σας, χρησιμοποιώντας διάφορους αλγορίθμους γιανα το **εκπαιδεύσετε**. Η εκπαίδευση ενός μοντέλου το εκθέτει σε δεδομένα και του επιτρέπει να κάνει υποθέσεις για αντιληπτά μοτίβα που ανακαλύπτει, επαληθεύει και αποδέχεται ή απορρίπτει.
### Αποφασίστε τη μέθοδο εκπαίδευσης
### Αποφασίστε για μια μέθοδο εκπαίδευσης
Ανάλογα με την ερώτησή σας και τη φύση των δεδομένων σας, θα επιλέξετε μια μέθοδο γιανα τα εκπαιδεύσετε. Εξετάζοντας την [τεκμηρίωση του Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - την οποία χρησιμοποιούμε σε αυτό το μάθημα - μπορείτε να εξερευνήσετε πολλούς τρόπους γιανα εκπαιδεύσετε ένα μοντέλο. Ανάλογα με την εμπειρία σας, μπορεί να χρειαστεί να δοκιμάσετε αρκετές διαφορετικές μεθόδους γιαναδημιουργήσετε το καλύτερο μοντέλο. Είναι πιθανόνα περάσετε από μια διαδικασία όπου οι επιστήμονες δεδομένων αξιολογούν την απόδοση ενός μοντέλου τροφοδοτώντας το με δεδομένα που δεν έχει δει, ελέγχοντας για ακρίβεια, προκαταλήψεις και άλλα ζητήματα που υποβαθμίζουν την ποιότητα, και επιλέγοντας την πιο κατάλληλη μέθοδο εκπαίδευσης για την εργασία.
Ανάλογα με την ερώτησή σας και τη φύση των δεδομένων σας, θα επιλέξετε μια μέθοδο γιατην εκπαίδευση. Περιηγούμενοι στην [τεκμηρίωση του Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - που χρησιμοποιούμε σε αυτό το μάθημα - μπορείτε να εξερευνήσετε πολλούς τρόπους εκπαίδευσης μοντέλου. Ανάλογα με την εμπειρία σας, ίσως χρειαστεί να δοκιμάσετε αρκετές διαφορετικές μεθόδους γιαναχτίσετε το καλύτερο μοντέλο. Πιθανόννα περάσετε από μια διαδικασία όπου οι επιστήμονες δεδομένων αξιολογούν τις επιδόσεις ενός μοντέλου παρέχοντάς του αθέατα δεδομένα, ελέγχοντας την ακρίβεια, την προκατάληψη και άλλα ζητήματα που υποβαθμίζουν την ποιότητα, και επιλέγοντας την καταλληλότερη μέθοδο εκπαίδευσης για την εκάστοτε εργασία.
### Εκπαίδευση μοντέλου
### Εκπαιδεύστε το μοντέλο
Με τα δεδομένα εκπαίδευσης σας, είστε έτοιμοι να τα "προσαρμόσετε"γιανα δημιουργήσετε ένα μοντέλο. Θα παρατηρήσετε ότι σε πολλές βιβλιοθήκες ML θα βρείτε τον κώδικα 'model.fit' - είναι αυτή τη στιγμή που στέλνετε τη μεταβλητή χαρακτηριστικού σας ως πίνακα τιμών (συνήθως 'X') και μια μεταβλητή στόχου (συνήθως 'y').
Οπλισμένοι με τα δεδομένα εκπαίδευσής σας, είστε έτοιμοι να τα 'προσαρμόσετε'γιανα δημιουργήσετε ένα μοντέλο. Θα παρατηρήσετε ότι σε πολλές βιβλιοθήκες ML υπάρχει η μέθοδος 'model.fit' - είναι η στιγμή που στέλνετε τη μεταβλητή χαρακτηριστικού σας ως πίνακα τιμών (συνήθως 'X') και τη μεταβλητή στόχου (συνήθως 'y').
### Αξιολόγηση του μοντέλου
### Αξιολογήστε το μοντέλο
Μόλις ολοκληρωθεί η διαδικασία εκπαίδευσης (μπορεί να χρειαστούν πολλές επαναλήψεις ή "εποχές" γιανα εκπαιδευτεί ένα μεγάλο μοντέλο), θα μπορείτενα αξιολογήσετε την ποιότητα του μοντέλου χρησιμοποιώντας δεδομένα δοκιμής γιανα μετρήσετε την απόδοσή του. Αυτά τα δεδομένα είναι ένα υποσύνολο των αρχικών δεδομένων που το μοντέλο δεν έχει αναλύσει προηγουμένως. Μπορείτε να εκτυπώσετε έναν πίνακα μετρικών σχετικά με την ποιότητα του μοντέλου σας.
Μόλις ολοκληρωθεί η διαδικασία εκπαίδευσης (μπορεί να χρειαστούν πολλές επαναλήψεις ή 'epochs' για την εκπαίδευση ενός μεγάλου μοντέλου), θα είστε σε θέσηνα αξιολογήσετε την ποιότητα του μοντέλου χρησιμοποιώντας δεδομένα δοκιμής γιανα μετρήσετε τις επιδόσεις του. Αυτά τα δεδομένα είναι ένα υποσύνολο των αρχικών που το μοντέλο δεν έχει αναλύσει προηγουμένως. Μπορείτε να εκτυπώσετε έναν πίνακα με στατιστικά για την ποιότητα του μοντέλου σας.
🎓 **Προσαρμογή μοντέλου**
Στο πλαίσιο της μηχανικής μάθησης, η προσαρμογή μοντέλου αναφέρεται στην ακρίβεια της υποκείμενης λειτουργίας του μοντέλου καθώς προσπαθεί να αναλύσει δεδομένα με τα οποία δεν είναι εξοικειωμένο.
Στο πλαίσιο της μηχανικής μάθησης, η προσαρμογή μοντέλου αναφέρεται στην ακρίβεια της υποκείμενης συνάρτησης του μοντέλου καθώς επιχειρεί να αναλύσει δεδομένα με τα οποία δεν είναι εξοικειωμένο.
🎓 **Υποπροσαρμογή** και **υπερπροσαρμογή** είναι κοινά προβλήματα που υποβαθμίζουν την ποιότητα του μοντέλου, καθώς το μοντέλο προσαρμόζεται είτε όχι αρκετά καλά είτε υπερβολικά καλά. Αυτό προκαλεί το μοντέλο να κάνει προβλέψεις είτε πολύ στενά ευθυγραμμισμένες είτε πολύ χαλαρά ευθυγραμμισμένες με τα δεδομένα εκπαίδευσης του. Ένα υπερπροσαρμοσμένο μοντέλο προβλέπει τα δεδομένα εκπαίδευσης πολύ καλά επειδή έχει μάθει τις λεπτομέρειες και τον θόρυβο των δεδομένων υπερβολικά καλά. Ένα υποπροσαρμοσμένο μοντέλο δεν είναι ακριβές καθώς δεν μπορεί να αναλύσει με ακρίβεια ούτε τα δεδομένα εκπαίδευσης ούτε τα δεδομένα που δεν έχει "δει".
🎓 Τα**υποπροσαρμοσμένα** και **υπερπροσαρμοσμένα** μοντέλα είναι συνηθισμένα προβλήματα που υποβαθμίζουν την ποιότητα του μοντέλου, καθώς το μοντέλο προσαρμόζεται είτε όχι αρκετά καλά είτε υπερβολικά καλά. Αυτό προκαλεί στο μοντέλο να κάνει προβλέψεις που είναι είτε πολύ στενά είτε πολύ χαλαρά ευθυγραμμισμένες με τα δεδομένα εκπαίδευσης. Ένα υπερπροσαρμοσμένο μοντέλο προβλέπει πολύ καλά τα δεδομένα εκπαίδευσης επειδή έχει μάθει πολύ καλά τις λεπτομέρειες και τον θόρυβο των δεδομένων. Ένα υποπροσαρμοσμένο μοντέλο δεν είναι ακριβές αφού δεν μπορεί ούτε να αναλύσει με ακρίβεια τα δεδομένα εκπαίδευσης ούτε τα δεδομένα που δεν έχει δει ακόμα.
> Γραφικό από την [Jen Looper](https://twitter.com/jenlooper)
## Ρύθμιση παραμέτρων
Μόλις ολοκληρωθεί η αρχική εκπαίδευση, παρατηρήστε την ποιότητα του μοντέλου και σκεφτείτε να το βελτιώσετε τροποποιώντας τις "υπερπαραμέτρους" του. Διαβάστε περισσότερα για τη διαδικασία [στην τεκμηρίωση](https://
Μόλις ολοκληρωθεί η αρχική εκπαίδευση, παρατηρήστε την ποιότητα του μοντέλου και σκεφτείτε να το βελτιώσετε τροποποιώντας τις 'υπερπαραμέτρους' του. Διαβάστε περισσότερα για τη διαδικασία [στην τεκμηρίωση](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Πρόβλεψη
Αυτή είναι η στιγμή που μπορείτε να χρησιμοποιήσετε εντελώς νέα δεδομένα γιανα ελέγξετε την ακρίβεια του μοντέλου σας. Σε ένα 'εφαρμοσμένο' περιβάλλον ML, όπου κατασκευάζετε διαδικτυακά υποστρώματα γιανα χρησιμοποιήσετε το μοντέλο σε παραγωγή, αυτή η διαδικασία μπορεί να περιλαμβάνει τη συλλογή εισόδου χρήστη (π.χ. πάτημα κουμπιού) για την ορισμό μιας μεταβλητής και την αποστολή της στο μοντέλο για συμπεράσματα ή αξιολόγηση.
Σε αυτά τα μαθήματα θα ανακαλύψετε πώς να χρησιμοποιείτε αυτά τα βήματα γιανα προετοιμάσετε, δημιουργήσετε, δοκιμάσετε, αξιολογήσετε και προβλέψετε - όλες τις ενέργειες ενός επιστήμονα δεδομένων και πολλά άλλα, καθώς προχωράτε στην πορεία σας γιανα γίνετε μηχανικός ML «full stack».
---
## 🚀Πρόκληση
Σχεδιάστε ένα διάγραμμα ροής που να απεικονίζει τα βήματα ενός επαγγελματία ML. Πού βλέπετε τον εαυτό σας αυτή τη στιγμή στη διαδικασία; Πού προβλέπετε ότι θα βρείτε δυσκολία; Τι σας φαίνεται εύκολο;
## [Μετά το μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/)
## Ανασκόπηση & Αυτοδιδασκαλία
Αναζητήστε στο διαδίκτυο συνεντεύξεις με επιστήμονες δεδομένων που μιλούν για την καθημερινή τους δουλειά. Εδώ είναι [μία](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Ανάθεση
[Συνεντεύξτε έναν επιστήμονα δεδομένων](assignment.md)
---
**Αποποίηση ευθύνης**:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Αποποίηση ευθυνών**:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το αρχικό έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αξιόπιστη πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
# Δημιουργία μοντέλου παλινδρόμησης χρησιμοποιώντας το Scikit-learn: παλινδρόμηση με τέσσερις τρόπους
# Κατασκευή μοντέλου παλινδρόμησης με χρήση Scikit-learn: τέσσερις τρόποι παλινδρόμησης
## Σημείωση για αρχάριους
Η γραμμική παλινδρόμηση χρησιμοποιείται όταν θέλουμε να προβλέψουμε μια **αριθμητική τιμή** (για παράδειγμα, την τιμή ενός σπιτιού, τη θερμοκρασία ή τις πωλήσεις).
Λειτουργεί βρίσκοντας μια ευθεία γραμμή που αντιπροσωπεύει καλύτερα τη σχέση μεταξύ των εισροών και της εξόδου.
Η γραμμική παλινδρόμηση χρησιμοποιείται όταν θέλουμε να προβλέψουμε μια **ποσοτική τιμή** (για παράδειγμα, τιμή σπιτιού, θερμοκρασία ή πωλήσεις).
Λειτουργεί βρίσκοντας μια ευθεία γραμμή που αναπαριστά καλύτερα τη σχέση μεταξύ των εισαγόμενων χαρακτηριστικών και της εξόδου.
Σε αυτό το μάθημα, εστιάζουμε στην κατανόηση της έννοιας πριν εξερευνήσουμε πιο προχωρημένες τεχνικές παλινδρόμησης.
> ### [Αυτό το μάθημα είναι διαθέσιμο και σε R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Εισαγωγή
### Εισαγωγή
Μέχρι τώρα έχετε εξερευνήσει τι είναι η παλινδρόμηση με δείγματα δεδομένων που συλλέχθηκαν από το σύνολο δεδομένων τιμών κολοκύθας που θα χρησιμοποιήσουμε σε όλο αυτό το μάθημα. Έχετε επίσης το οπτικοποιήσει χρησιμοποιώντας το Matplotlib.
Μέχρι στιγμής έχετε εξερευνήσει τι είναι η παλινδρόμηση με δείγμα δεδομένων από το σύνολο δεδομένων τιμών κολοκύθας που θα χρησιμοποιήσουμε σε όλο το μάθημα. Επίσης, το έχετε απεικονίσει χρησιμοποιώντας τη Matplotlib.
Τώρα είστε έτοιμοι να εμβαθύνετε στην παλινδρόμηση για Μηχανική Μάθηση. Ενώ η οπτικοποίηση σας επιτρέπει να κατανοήσετε τα δεδομένα, η πραγματική δύναμη της Μηχανικής Μάθησης προέρχεται από _την εκπαίδευση μοντέλων_. Τα μοντέλα εκπαιδεύονται σε ιστορικά δεδομένα γιανα συλλάβουν αυτόματα τις εξαρτήσεις των δεδομένων και σας επιτρέπουν να προβλέπετε αποτελέσματα για νέα δεδομένα που το μοντέλο δεν έχει ξαναδεί.
Τώρα είστε έτοιμοι να εμβαθύνετε στην παλινδρόμηση για Μηχανική Μάθηση. Ενώ η οπτικοποίηση σας επιτρέπει να κατανοήσετε τα δεδομένα, η πραγματική δύναμη της Μηχανικής Μάθησης προέρχεται από την _εκπαίδευση μοντέλων_. Τα μοντέλα εκπαιδεύονται σε ιστορικά δεδομένα γιανα συλλάβουν αυτόματα τις εξαρτήσεις δεδομένων, και σας επιτρέπουν να προβλέπετε αποτελέσματα για νέα δεδομένα, που το μοντέλο δεν έχει δει ποτέ πριν.
Σε αυτό το μάθημα, θα μάθετε περισσότερα για δύο τύπους παλινδρόμησης: _βασική γραμμική παλινδρόμηση_ και _πολυωνυμική παλινδρόμηση_, μαζί με κάποια από τα μαθηματικά που υποστηρίζουν αυτές τις τεχνικές. Αυτά τα μοντέλα θα μας επιτρέψουν να προβλέψουμε τις τιμές της κολοκύθας ανάλογα με διάφορα εισερχόμενα δεδομένα.
Σε αυτό το μάθημα, θα μάθετε περισσότερα για δύο τύπους παλινδρόμησης: _βασική γραμμική παλινδρόμηση_ και _πολυωνυμική παλινδρόμηση_, μαζί με μερικά από τα μαθηματικά που βασίζουν αυτές τις τεχνικές. Αυτά τα μοντέλα θα μας επιτρέψουν να προβλέψουμε τις τιμές της κολοκύθας ανάλογα με διαφορετικά εισαγόμενα δεδομένα.
[](https://youtu.be/CRxFT8oTDMg "Μηχανική Μάθηση για αρχάριους - Κατανόηση της γραμμικής παλινδρόμησης")
[](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 Κάντε κλικ στην εικόνα παραπάνω γιαένα σύντομο βίντεο επισκόπησης της γραμμικής παλινδρόμησης.
> 🎥 Κάντε κλικ στην εικόνα παραπάνω γιαμια σύντομη επισκόπηση της γραμμικής παλινδρόμησης.
> Καθ' όλη τη διάρκεια αυτού του προγράμματος σπουδών, υποθέτουμε ελάχιστες γνώσεις μαθηματικών και προσπαθούμε να το κάνουμε προσιτό σε φοιτητές από άλλα πεδία, οπότε δώστε προσοχή σε σημειώσεις, 🧮 υπομνήσεις, διαγράμματα και άλλα εργαλεία μάθησης γιανα βοηθήσουν στην κατανόηση.
> Σε όλη τη διδακτέα ύλη υποθέτουμε ελάχιστη γνώση μαθηματικών και προσπαθούμε να την κάνουμε προσιτή για φοιτητές από άλλους τομείς, αναζητώντας σημειώσεις, 🧮 υπενθυμίσεις, διαγράμματα και άλλα εργαλεία μάθησης γιανα βοηθήσουμε στην κατανόηση.
### Προαπαιτούμενα
Πρέπει να είστε πλέον εξοικειωμένοι με τη δομή των δεδομένων κολοκύθας που εξετάζουμε. Μπορείτε να τα βρείτε προφορτωμένα και προ-καθαρισμένα στο αρχείο _notebook.ipynb_ αυτού του μαθήματος. Στο αρχείο, η τιμή της κολοκύθας εμφανίζεται ανά μπούσελ σε νέο πλαίσιο δεδομένων. Βεβαιωθείτε ότι μπορείτε να εκτελέσετε αυτά τα notebooks σε πυρήνες στο Visual Studio Code.
Πρέπει να είστε πλέον εξοικειωμένοι με τη δομή των δεδομένων κολοκύθας που εξετάζουμε. Μπορείτε να τα βρείτε προφορτωμένα και προ-καθαρισμένα στο αρχείο _notebook.ipynb_ αυτού του μαθήματος. Στο αρχείο, η τιμή της κολοκύθας εμφανίζεται ανά μπουσέλ. Φροντίστε να μπορείτε να τρέχετε αυτά τα notebook σε kernels στο Visual Studio Code.
### Προετοιμασία
Ως υπενθύμιση, φορτώνετε αυτά τα δεδομένα γιανα κάνετε ερωτήσεις σχετικά με αυτά.
Ως υπενθύμιση, φορτώνετε αυτά τα δεδομένα ώστε να μπορείτε να κάνετε ερωτήσεις γι' αυτά.
- Ποια είναι η καλύτερη στιγμή γιανα αγοράσετε κολοκύθες;
- Ποια τιμή μπορώ να περιμένω για μια συσκευασία μικρών κολοκυθών;
- Πρέπει να τις αγοράσω σε καλάθια μισού μπούσελ ή σε κουτί 1 1/9 μπούσελ;
Ας συνεχίσουμε ναερευνούμε αυτά τα δεδομένα.
- Πότε είναι η καλύτερη εποχή γιανα αγοράσω κολοκύθες;
- Τι τιμή να περιμένω για μια συσκευασία από μικρές κολοκύθες;
- Πρέπει να τις αγοράσω σε καλάθια μισού μπουσέλ ή σε κουτί 1 1/9 μπουσέλ;
Ας συνεχίσουμε ναανακαλύπτουμε αυτά τα δεδομένα.
Στο προηγούμενο μάθημα, δημιουργήσατε ένα Pandas data frame και το συμπληρώσατε με μέρος του αρχικού συνόλου δεδομένων, τυποποιώντας την τιμή ανά μπούσελ. Με αυτόν τον τρόπο, όμως, μαζέψατε μόνο περίπου 400 σημεία δεδομένων και μόνο για τους φθινοπωρινούς μήνες.
Στο προηγούμενο μάθημα, δημιουργήσατε ένα Pandas data frame και το γεμίσατε με μέρος του αρχικού συνόλου δεδομένων, τυποποιώντας τις τιμές ανά μπουσέλ. Κάνοντας αυτό, ωστόσο, μαζέψατε περίπου 400 δεδομένα μόνο για τους φθινοπωρινούς μήνες.
Ρίξτε μια ματιά στα δεδομένα που έχουμε προφορτώσει στο συνοδευτικό notebook αυτού του μαθήματος. Τα δεδομένα είναι προφορτωμένα και αρχικό scatterplot σχεδιάζεται γιανα δείξει δεδομένα μήνα. Ίσως να πάρουμε λίγες περισσότερες λεπτομέρειες για τη φύση των δεδομένων καθαρίζοντάς τα περισσότερο.
Ρίξτε μια ματιά στα δεδομένα που προφορτώσαμε στο συνοδευτικό notebook αυτού του μαθήματος. Τα δεδομένα είναι προφορτωμένα και ένα αρχικό scatterplot σχεδιάστηκε γιανα δείξει τα δεδομένα ανά μήνα. Ίσως μπορέσουμε να πάρουμε περισσότερες λεπτομέρειες για τη φύση των δεδομένων καθαρίζοντάς τα περαιτέρω.
## Μια γραμμική γραμμή παλινδρόμησης
## Μια γραμμή γραμμικής παλινδρόμησης
Όπως μάθατε στο Μάθημα 1, ο στόχος μιας άσκησης γραμμικής παλινδρόμησης είναι ναμπορέσετε να σχεδιάσετε μια γραμμή γιανα:
Όπως μάθατε στο Μάθημα 1, ο στόχος μιας άσκησης γραμμικής παλινδρόμησης είναι νασχεδιάσουμε μια γραμμή που:
- **Δείξετε τις σχέσεις μεταξύ μεταβλητών**. Δείξτε τη σχέση μεταξύ των μεταβλητών
- **Κάνετε προβλέψεις**. Κάνετε ακριβείς προβλέψεις για το που θα τοποθετηθεί ένα νέο σημείο δεδομένων σε σχέση με αυτή τη γραμμή.
- **Να δείχνει τις σχέσεις των μεταβλητών**. Να δείχνει τη σχέση μεταξύ των μεταβλητών
- **Να κάνει προβλέψεις**. Να κάνει ακριβείς προβλέψεις για το πού θα εμφανιστεί ένα νέο σημείο σε σχέση με αυτή τη γραμμή.
Είναι τυπικό της **Παλινδρόμησης Ελαχίστων Τετραγώνων** να σχεδιάζετε αυτού του τύπου τη γραμμή. Ο όρος "Ελαχίστων Τετραγώνων" αναφέρεται στη διαδικασία ελαχιστοποίησης του συνολικού σφάλματος στο μοντέλο μας. Για κάθε σημείο δεδομένων μετράμε την κατακόρυφη απόσταση (ονομάζεται υπόλοιπο) μεταξύ του πραγματικού σημείου και της γραμμής παλινδρόμησής μας.
Είναι σύνηθες στην **Παλινδρόμηση Ελαχίστων Τετραγώνων (Least-Squares Regression)** να σχεδιάζουμε αυτό το είδος γραμμής. Ο όρος "Ελαχίστων Τετραγώνων" αναφέρεται στη διαδικασία ελαχιστοποίησης του συνολικού σφάλματος στο μοντέλο μας. Για κάθε σημείο δεδομένων, μετράμε την κάθετη απόσταση (που καλείται υπολειπόμενο, residual) μεταξύ του πραγματικού σημείου και της γραμμής παλινδρόμησης.
Τετρώνουμε αυτές τις αποστάσεις για δύο βασικούς λόγους:
Τετραγωνίζουμε αυτές τις αποστάσεις για δύο βασικούς λόγους:
1. **Μέγεθος έναντι Κατεύθυνσης:** Θέλουμε ένα σφάλμα -5 να θεωρείται το ίδιο με ένα σφάλμα +5. Η τετραγωνική κάνει όλες τις τιμές θετικές.
1. **Μέγεθος αντί για Διεύθυνση:** Θέλουμε να αντιμετωπίσουμε το σφάλμα -5 το ίδιο με το σφάλμα +5. Με το τετράγωνο όλα τα μεγέθη γίνονται θετικά.
2. **Τιμωρία Ακραίων Τιμών:** Το τετράγωνο δίνει μεγαλύτερο βάρος στα μεγαλύτερα σφάλματα, αναγκάζοντας τη γραμμή να παραμείνει πιο κοντά σε σημεία που είναι μακριά.
2. **Τιμωρία των Απομακρυσμένων Τιμών:** Το τετράγωνο δίνει μεγαλύτερο βάρος στα μεγαλύτερα σφάλματα, αναγκάζοντας τη γραμμή να παραμένει πιο κοντά στα σημεία που απέχουν πολύ.
Στη συνέχεια, προσθέτουμε όλες αυτές τις τετραγωνισμένες τιμές. Οστόχος μας είναι να βρούμε τη συγκεκριμένη γραμμή όπου το τελικό άθροισμα είναι το ελάχιστο (η μικρότερη δυνατή τιμή)—εξού και το όνομα "Ελαχίστων Τετραγώνων".
Στη συνέχεια, προσθέτουμε όλα αυτά τα τετραγωνισμένα σφάλματα μαζί. Στόχος μας είναι να βρούμε τη συγκεκριμένη γραμμή όπου το τελικό άθροισμα είναι ελάχιστο (η μικρότερη δυνατή τιμή)—γι’ αυτό ονομάζεται "Ελαχίστων Τετραγώνων".
> **🧮 Δείξε μου τα μαθηματικά**
>
> Αυτή η γραμμή, που ονομάζεται _γραμμή της καλύτερης εφαρμογής_ μπορεί να εκφραστεί με [μια εξίσωση](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> **🧮 Δείξε μου τα μαθηματικά**
>
> Αυτή η γραμμή, που ονομάζεται _γραμμή καλύτερης προσαρμογής_, μπορεί να εκφραστεί με [μια εξίσωση](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> Το`X` είναι η 'εξηγηματική μεταβλητή'. Το`Y` είναι η 'εξαρτημένη μεταβλητή'. Η κλίση της γραμμής είναι το `b` και το `a` είναι η διασταύρωση y, που αναφέρεται στην τιμή του `Y` όταν `X = 0`.
> `X` είναι η 'εξελικτική μεταβλητή'.`Y` είναι η 'εξαρτημένη μεταβλητή'. Η κλίση της γραμμής είναι `b` και `a` είναι το y-τομή, που αναφέρεται στην τιμή του `Y` όταν `X = 0`.
>
>
>
>
> Πρώτα, υπολογίστε την κλίση `b`. Infographic από [Jen Looper](https://twitter.com/jenlooper)
> Αρχικά, υπολογίζουμε την κλίση `b`. Infographic από τον/την [Jen Looper](https://twitter.com/jenlooper)
>
> Με άλλα λόγια, και αναφερόμενοι στην αρχική ερώτηση των δεδομένων μας για την κολοκύθα: "προβλέψτε την τιμή μιας κολοκύθας ανά μπούσελ ανά μήνα", το `X` θα αναφερόταν στην τιμή και το `Y` στον μήνα πώλησης.
> Με άλλα λόγια, και αναφερόμενοι στην αρχική ερώτηση για το σύνολο δεδομένων κολοκύθας: "πρόβλεψε την τιμή μιας κολοκύθας ανά μπουσέλ ανά μήνα", το `X` θα αναφερόταν στην τιμή και το `Y` στον μήνα της πώλησης.
>
>
>
>
> Υπολογίστε την τιμή του Y. Αν πληρώνετε γύρω στα 4 δολάρια, πρέπει να είναι Απρίλιος! Infographic από [Jen Looper](https://twitter.com/jenlooper)
> Υπολογίστε την τιμή του Y. Αν πληρώνετε περίπου 4 δολάρια, πρέπει να είναι Απρίλιος! Infographic από τον/την [Jen Looper](https://twitter.com/jenlooper)
>
> Τα μαθηματικά που υπολογίζουν τη γραμμή πρέπει να δείξουν την κλίση της γραμμής, που επίσης εξαρτάται από τη διασταύρωση, ή πού βρίσκεται το `Y` όταν `X = 0`.
> Τα μαθηματικά που υπολογίζουν τη γραμμή πρέπει να δείξουν την κλίση της γραμμής, η οποία επίσης εξαρτάται από τη τομή, ή όπου βρίσκεται το `Y` όταν `X = 0`.
>
> Μπορείτε να δείτε τη μέθοδο υπολογισμού αυτών των τιμών στην ιστοσελίδα [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Επίσης επισκεφτείτε [αυτόν τον Υπολογιστή Ελαχίστων Τετραγώνων](https://www.mathsisfun.com/data/least-squares-calculator.html) γιανα δείτε πώς οι τιμές επηρεάζουν τη γραμμή.
> Μπορείτε να δείτε τη μέθοδο υπολογισμού αυτών των τιμών στην ιστοσελίδα [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Επίσης επισκεφθείτε [αυτόν τον υπολογιστή ελαχίστων τετραγώνων](https://www.mathsisfun.com/data/least-squares-calculator.html) γιανα δείτε πώς οι τιμές των αριθμών επηρεάζουν τη γραμμή.
## Συνάφεια (Correlation)
## Συσχέτιση
Ένας ακόμα όρος που πρέπει να κατανοήσετε είναι ο**Συντελεστής συσχέτισης** μεταξύ των δεδομένων μεταβλητών X και Y. Χρησιμοποιώντας ένα scatterplot, μπορείτε γρήγορα να οπτικοποιήσετε αυτόν τον συντελεστή. Ένα διάγραμμα με σημεία διασκορπισμένα σε μια καθαρή γραμμή έχει υψηλή συσχέτιση, ενώ ένα διάγραμμα με σημεία διασκορπισμένα παντού ανάμεσα σε X και Y έχει χαμηλή συσχέτιση.
Ένας ακόμη όρος που πρέπει να κατανοήσουμε είναι ο**Συντελεστής Συσχέτισης** μεταξύ των δεδομένων μεταβλητών X και Y. Χρησιμοποιώντας ένα scatterplot, μπορείτε γρήγορα να οπτικοποιήσετε αυτόν τον συντελεστή. Ένα γράφημα με σημεία δεδομένων διασκορπισμένα σε έναν καλοστρωμένο άξονα έχει υψηλή συσχέτιση, ενώ ένα γράφημα με τα σημεία να είναι σκορπισμένα παντού ανάμεσα σε X και Y έχει χαμηλή συσχέτιση.
Ένα καλό μοντέλο γραμμικής παλινδρόμησης θα έχει υψηλό (πιο κοντά στο 1 παρά στο 0) Συντελεστή Συσχέτισης χρησιμοποιώντας τη μέθοδο Ελαχίστων Τετραγώνων με μια γραμμή παλινδρόμησης.
Ένα καλό μοντέλο γραμμικής παλινδρόμησης θα έχει υψηλό (πλησιέστερα στο 1 παρά στο 0) Συντελεστή Συσχέτισης χρησιμοποιώντας τη μέθοδο Ελαχίστων Τετραγώνων με γραμμή παλινδρόμησης.
✅ Εκτελέστε το notebook που συνοδεύει αυτό το μάθημα και εξετάστε το διάγραμμα διασποράς Μήνας προς Τιμή. Φαίνεται ότι η συσχέτιση των δεδομένων Μήνα με Τιμήγια τις πωλήσεις κολοκύθας έχει υψηλή ή χαμηλή συσχέτιση, σύμφωνα με την οπτική σας ερμηνεία του διαγράμματος; Αλλάζει αυτό αν χρησιμοποιήσετε μια πιο λεπτομερή μέτρηση αντί για`Μήνα`, π.χ. *ημέρα του έτους* (δηλαδή, αριθμός ημερών από την αρχή του έτους);
✅ Τρέξτε το notebook που συνοδεύει αυτό το μάθημα και δείτε το scatterplot Μήνα προς Τιμή. Φαίνεται να υπάρχει υψηλή ή χαμηλή συσχέτιση μεταξύ Μήνα και Τιμήςγια τις πωλήσεις κολοκύθας, σύμφωνα με την οπτική σας ερμηνεία του scatterplot; Αλλάζει κάτι αν χρησιμοποιήσετε πιο λεπτομερή μέτρηση αντί για`Μήνα`, π.χ. *ημέρα του έτους* (δηλαδή, αριθμός ημερών από την αρχή του έτους);
Στον κώδικα παρακάτω, θα υποθέσουμε ότι έχουμε καθαρίσει τα δεδομένα και έχουμε λάβει ένα πλαίσιο δεδομένων που ονομάζεται `new_pumpkins`, παρόμοιο με το ακόλουθο:
Στον παρακάτω κώδικα, θα υποθέσουμε ότι έχουμε καθαρίσει τα δεδομένα και έχουμε ένα data frame που ονομάζεται `new_pumpkins`, παρόμοιο με το ακόλουθο:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
ID | Μήνας | ΗμέρατουΈτους | Ποικιλία | Πόλη | Συσκευασία | Χαμηλή Τιμή | Υψηλή Τιμή | Τιμή
> Ο κώδικας για τον καθαρισμό των δεδομένων είναι διαθέσιμος στο [`notebook.ipynb`](notebook.ipynb). Έχουμε πραγματοποιήσει τα ίδια βήματα καθαρισμού όπως στο προηγούμενο μάθημα και έχουμε υπολογίσει τη στήλη `DayOfYear` χρησιμοποιώντας την ακόλουθη έκφραση:
> Ο κώδικας για τον καθαρισμό των δεδομένων είναι διαθέσιμος στο [`notebook.ipynb`](notebook.ipynb). Έχουμε εκτελέσει τα ίδια βήματα καθαρισμού όπως στο προηγούμενο μάθημα και έχουμε υπολογίσει την στήλη `DayOfYear` με την ακόλουθη έκφραση:
Τώρα που έχετε κατανοήσει τα μαθηματικά πίσω από τη γραμμική παλινδρόμηση, ας δημιουργήσουμε ένα μοντέλο παλινδρόμησης γιανα δούμε αν μπορούμε να προβλέψουμε ποιο πακέτο κολοκύθας θα έχει τις καλύτερες τιμές. Κάποιος που αγοράζει κολοκύθες για ένα φθινοπωρινό παρτέρι κολοκύθας θα ήθελε αυτές τις πληροφορίεςγιανα βελτιστοποιήσει τις αγορές του.
Τώρα που έχετε κατανοήσει τα μαθηματικά πίσω από τη γραμμική παλινδρόμηση, ας δημιουργήσουμε ένα μοντέλο παλινδρόμησης γιανα δούμε αν μπορούμε να προβλέψουμε ποια συσκευασία κολοκύθας θα έχει τις καλύτερες τιμές. Κάποιος που αγοράζει κολοκύθες για ένα παρτέρι διακοπών μπορεί να θέλει αυτή την πληροφορίαγιανα βελτιστοποιήσει τις αγορές του.
## Αναζήτηση συσχέτισης
[](https://youtu.be/uoRq-lW2eQo "Μηχανική Μάθηση για αρχάριους - Αναζήτηση συσχέτισης: Το κλειδί για τη γραμμική παλινδρόμηση")
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Κάντε κλικ στην εικόνα παραπάνω γιαένα σύντομο βίντεο επισκόπησης για τη συσχέτιση.
> 🎥 Κάντε κλικ στην εικόνα παραπάνω γιαμια σύντομη επισκόπηση της συσχέτισης.
Από το προηγούμενο μάθημα μάλλον έχετε δει ότι η μέση τιμή για διαφορετικούς μήνες μοιάζει ως εξής:
Από το προηγούμενο μάθημα πιθανώς έχετε δει ότι η μέση τιμή για διαφορετικούς μήνες έχει ως εξής:
<imgalt="Μέση τιμή ανά μήνα" src="../../../../translated_images/el/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="Average price by month" src="../../../../translated_images/el/barchart.a833ea9194346d76.webp"width="50%"/>
Αυτό υποδηλώνει ότι θα πρέπει ναυπάρχει κάποια συσχέτιση και μπορούμε ναδοκιμάσουμε να εκπαιδεύσουμε ένα γραμμικό μοντέλο παλινδρόμησης γιανα προβλέψουμε τη σχέση μεταξύ `Month` και `Price`, ή μεταξύ `DayOfYear` και `Price`. Να το scatter plot που δείχνει τη δεύτερη σχέση:
Αυτό υποδηλώνει ότι υπάρχει κάποια συσχέτιση και μπορούμε ναπροσπαθήσουμε να εκπαιδεύσουμε ένα γραμμικό μοντέλο παλινδρόμησης γιανα προβλέψουμε τη σχέση ανάμεσα στον `Μήνα` και την `Τιμή`, ή ανάμεσα στην `ΗμέρατουΈτους` και την `Τιμή`. Εδώ είναι το scatter plot που δείχνει τη δεύτερη σχέση:
<imgalt="Scatter plot τιμής έναντι ημέρας του έτους" src="../../../../translated_images/el/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/el/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
Ας δούμε αν υπάρχει συσχέτιση χρησιμοποιώντας τη συνάρτηση`corr`:
Ας δούμε αν υπάρχει συσχέτιση χρησιμοποιώντας τη λειτουργία`corr`:
Φαίνεται ότι η συσχέτιση είναι αρκετά μικρή, -0.15 ανά `Month` και -0.17 ανά `DayOfMonth`, αλλά μπορεί να υπάρχει μια άλλη σημαντική σχέση. Φαίνεται ότι υπάρχουν διαφορετικά σύνολα τιμών που αντιστοιχούν σε διαφορετικές ποικιλίες κολοκύθας. Για να επιβεβαιώσουμε αυτήν την υπόθεση, ας σχεδιάσουμε κάθε κατηγορία κολοκύθας με διαφορετικό χρώμα. Δίνοντας μια παράμετρο`ax` στη συνάρτηση σχεδίασης `scatter` μπορούμε να σχεδιάσουμε όλα τα σημεία στο ίδιο γράφημα:
Φαίνεται ότι η συσχέτιση είναι αρκετά μικρή, -0.15 για τον `Μήνα` και -0.17 για την `ΗμέρατουΈτους`, αλλά πιθανόν να υπάρχει άλλη σημαντική σχέση. Φαίνεται ότι υπάρχουν διαφορετικές ομάδες τιμών που αντιστοιχούν σε διαφορετικές ποικιλίες κολοκύθας. Για να επιβεβαιώσουμε αυτή την υπόθεση, ας σχεδιάσουμε κάθε κατηγορία κολοκύθας με διαφορετικό χρώμα. Με τη χρήση της παραμέτρου`ax` στη συνάρτηση σχεδίασης `scatter` μπορούμε να σχεδιάσουμε όλα τα σημεία στο ίδιο γράφημα:
```python
ax=None
@ -139,41 +139,41 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="Scatter plot of Price vs. Day of Year"src="../../../../translated_images/el/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
<imgalt="Scatter plot τιμής έναντι ημέρας του έτους με χρώματα"src="../../../../translated_images/el/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
Η έρευνά μας υποδηλώνει ότι η ποικιλία έχει μεγαλύτερη επίδραση στην τελική τιμή από την πραγματική ημερομηνία πώλησης. Αυτό φαίνεται και σε ένα γράφημα ράβδων:
Η έρευνά μας υποδεικνύει ότι η ποικιλία επηρεάζει περισσότερο την τιμή από την ημερομηνία πώλησης. Αυτό φαίνεται και σε ένα ραβδογράφημα:
<imgalt="Scatter plot τιμής έναντι ημέρας του έτους για κολοκύθες πίτας" src="../../../../translated_images/el/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/el/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
Εάν τώρα υπολογίσουμε τη συσχέτιση μεταξύ `Price` και `DayOfYear` χρησιμοποιώντας τη συνάρτηση `corr`, θα πάρουμε κάτι σαν`-0.27`- που σημαίνει ότι η εκπαίδευση ενός προγνωστικού μοντέλου έχει νόημα.
Αν τώρα υπολογίσουμε τη συσχέτιση μεταξύ `Τιμής` και `ΗμέραςτουΈτους` χρησιμοποιώντας τη συνάρτηση `corr`, θα πάρουμε κάτι σαν`-0.27`– που σημαίνει ότι η εκπαίδευση ενός προγνωστικού μοντέλου έχει νόημα.
> Πριν εκπαιδεύσετε ένα μοντέλο γραμμικής παλινδρόμησης, είναι σημαντικό να βεβαιωθείτε ότι τα δεδομένα μας είναι καθαρά. Η γραμμική παλινδρόμηση δεν λειτουργεί καλά με ελλιπή δεδομένα, οπότε είναι λογικό να απαλλαγούμε από όλα τα κενά κελιά:
> Πριν εκπαιδεύσουμε ένα μοντέλο γραμμικής παλινδρόμησης, είναι σημαντικό να βεβαιωθούμε ότι τα δεδομένα μας είναι καθαρά. Η γραμμική παλινδρόμηση δεν λειτουργεί καλά με κενές τιμές, άρα έχει νόημα να αφαιρέσουμε όλα τα κενά κελιά:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Μια άλλη προσέγγιση θα ήταν ναγεμίσετε αυτές τις κενές τιμές με μέσες τιμές από την αντίστοιχη στήλη.
Μια άλλη προσέγγιση θα ήταν νασυμπληρώσουμε τις κενές τιμές με τις μέσες τιμές της αντίστοιχης στήλης.
## Απλή γραμμική παλινδρόμηση
[](https://youtu.be/e4c_UP2fSjg "Μηχανική Μάθηση για αρχάριους - Γραμμική και πολυωνυμική παλινδρόμηση με Scikit-learn")
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 Κάντε κλικ στην εικόνα παραπάνω γιαένα σύντομο βίντεο επισκόπησης της γραμμικής και πολυωνυμικής παλινδρόμησης.
> 🎥 Κάντε κλικ στην εικόνα παραπάνω γιαμια σύντομη επισκόπηση της γραμμικής και πολυωνυμικής παλινδρόμησης.
Για να εκπαιδεύσουμε το μοντέλο Γραμμικής Παλινδρόμησης, θα χρησιμοποιήσουμε τη βιβλιοθήκη **Scikit-learn**.
@ -182,32 +182,32 @@ from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Ξεκινάμε διαχωρίζοντας τις εισερχόμενες τιμές (χαρακτηριστικά) και την αναμενόμενη έξοδο (ετικέτα) σε ξεχωριστά numpy arrays:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Σημειώστε ότι έπρεπε να πραγματοποιήσουμε `reshape` στα δεδομένα εισόδου ώστε το πακέτο γραμμικής παλινδρόμησης να τα κατανοήσει σωστά. Η γραμμική παλινδρόμηση περιμένει έναν πίνακα 2 διαστάσεων ως είσοδο, όπου κάθε γραμμή του πίνακα αντιστοιχεί σε έναν διανυσματικό πίνακα χαρακτηριστικών. Στη περίπτωση μας, αφού έχουμε μόνο ένα χαρακτηριστικό, χρειαζόμαστε έναν πίνακα σχήματος N×1, όπου N είναι το μέγεθος του συνόλου δεδομένων.
> Σημειώστε ότι έπρεπε να κάνουμε `reshape` στα δεδομένα εισόδου ώστε το πακέτο Γραμμικής Παλινδρόμησης να τα κατανοήσει σωστά. Η Γραμμική Παλινδρόμηση περιμένει έναν 2D array ως είσοδο, όπου κάθε γραμμή του πίνακα αντιστοιχεί σε διάνυσμα χαρακτηριστικών εισόδου. Στην περίπτωσή μας, αφού έχουμε μόνο μία είσοδο, χρειάζεται ένας πίνακας σχήματος N×1, όπου το Ν είναι το μέγεθος του συνόλου δεδομένων.
Στη συνέχεια, πρέπει να χωρίσουμε τα δεδομένα σε σύνολα εκπαίδευσης και δοκιμής, ώστε να μπορέσουμε να επαληθεύσουμε το μοντέλο μετά την εκπαίδευση:
Έπειτα, πρέπει να χωρίσουμε τα δεδομένα σε σύνολα εκπαίδευσης και δοκιμής, ώστε να μπορούμε να επικυρώσουμε το μοντέλο μας μετά την εκπαίδευση:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Τέλος, η εκπαίδευση του πραγματικού μοντέλου Γραμμικής Παλινδρόμησης παίρνει μόνο δύο γραμμές κώδικα. Ορίζουμε το αντικείμενο `LinearRegression`, και το προσαρμόζουμε στα δεδομένα μας χρησιμοποιώντας τη μέθοδο `fit`:
Τέλος, η εκπαίδευση του πραγματικού μοντέλου γραμμικής παλινδρόμησης γίνεται με μόνο δύο γραμμές κώδικα. Ορίζουμε το αντικείμενο `LinearRegression` και το προσαρμόζουμε στα δεδομένα μας με τη μέθοδο `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
Το αντικείμενο `LinearRegression` μετά το `fit`-άρισμα περιέχει όλους τους συντελεστές της παλινδρόμησης, στους οποίους μπορούμε να έχουμε πρόσβαση χρησιμοποιώντας την ιδιότητα `.coef_`. Στην περίπτωσή μας, υπάρχει μόνο ένας συντελεστής, ο οποίος θα πρέπει να είναι περίπου `-0.017`. Αυτό σημαίνει ότι οι τιμές φαίνεται να πέφτουν λίγο με το χρόνο, αλλά όχι πολύ, περίπου 2 σεντ ανά ημέρα. Μπορούμε επίσης να έχουμε πρόσβαση στο σημείο τομής της παλινδρόμησης με τον άξονα Υ χρησιμοποιώντας το `lin_reg.intercept_` - που θα είναι γύρω στο `21` στην περίπτωσή μας, υποδεικνύοντας την τιμή στην αρχή του έτους.
Το αντικείμενο `LinearRegression` μετά το `fit`-άρισμα περιέχει όλους τους συντελεστές της παλινδρόμησης, στους οποίους μπορούμε να έχουμε πρόσβαση χρησιμοποιώντας την ιδιότητα `.coef_`. Στη δική μας περίπτωση, υπάρχει μόνο ένας συντελεστής, ο οποίος θα πρέπει να είναι περίπου `-0.017`. Αυτό σημαίνει ότι οι τιμές φαίνεται να πέφτουν λίγο με τον χρόνο, αλλά όχι πολύ, περίπου 2 λεπτά της μονάδας ανά ημέρα. Μπορούμε επίσης να έχουμε πρόσβαση στο σημείο τομής της παλινδρόμησης με τον άξονα Υ χρησιμοποιώντας το `lin_reg.intercept_` - θα είναι περίπου `21` στην περίπτωσή μας, δείχνοντας την τιμή στην αρχή του έτους.
Για να δούμε πόσο ακριβές είναι το μοντέλο μας, μπορούμε να προβλέψουμε τις τιμές σε ένα σύνολο δεδομένων δοκιμής και στη συνέχειανα μετρήσουμε πόσο κοντά είναι οι προβλέψεις μας στις αναμενόμενες τιμές. Αυτό μπορεί να γίνει χρησιμοποιώντας το μέτρο root mean square error (RMSE), που είναι η τετραγωνική ρίζα του μέσου όρου όλων των τετραγωνισμένων διαφορών μεταξύ αναμενόμενης και προβλεπόμενης τιμής.
Για να δούμε πόσο ακριβές είναι το μοντέλο μας, μπορούμε να προβλέψουμε τιμές σε ένα σύνολο δεδομένων δοκιμής και μετάνα μετρήσουμε πόσο κοντά είναι οι προβλέψεις μας στις αναμενόμενες τιμές. Αυτό μπορεί να γίνει χρησιμοποιώντας το μέτρο του ριζικού μέσου τετραγωνικού σφάλματος (RMSE), που είναι η ρίζα του μέσου όλων των τετραγωνικών διαφορών μεταξύ αναμενόμενης και προβλεπόμενης τιμής.
Το σφάλμα μας φαίνεται να είναι γύρω στις 2 μονάδες, που είναι ~17%. Όχι και τόσο καλό. Ένας άλλος δείκτης ποιότητας του μοντέλου είναι ο**συντελεστής καθορισμού** (coefficient of determination), ο οποίος μπορεί να ληφθεί ως εξής:
Το σφάλμα μας φαίνεται να είναι περίπου 2 μονάδες, που είναι ~17%. Όχι πολύ καλό. Ένας άλλος δείκτης της ποιότητας του μοντέλου είναι ο**συντελεστής προσδιορισμού**, που μπορεί να ληφθεί ως εξής:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Αν η τιμή είναι 0, σημαίνει ότι το μοντέλο δεν λαμβάνει υπόψη τα εισερχόμενα δεδομένα και λειτουργεί ως ο*χειρότερος γραμμικός προβλέπων*, δηλαδή απλά η μέση τιμή του αποτελέσματος. Η τιμή 1 σημαίνει ότι μπορούμε να προβλέψουμε τέλεια όλες τις αναμενόμενες εξόδους. Στην περίπτωσή μας, ο συντελεστής είναι περίπου 0.06, που είναι αρκετά χαμηλός.
Αν η τιμή είναι 0, σημαίνει ότι το μοντέλο δεν λαμβάνει υπόψη τα εισαγόμενα δεδομένα και λειτουργεί ως ο*χειρότερος γραμμικός προβλέπων*, ο οποίος είναι απλά μια μέση τιμή του αποτελέσματος. Η τιμή 1 σημαίνει ότι μπορούμε να προβλέψουμε τέλεια όλες τις αναμενόμενες εξόδους. Στη δική μας περίπτωση, ο συντελεστής είναι περίπου 0.06, που είναι αρκετά χαμηλός.
Μπορούμε επίσης να σχεδιάσουμε τα δεδομένα δοκιμής μαζί με τη γραμμή παλινδρόμησης γιανα δούμε καλύτερα πώς λειτουργεί η παλινδρόμηση στην περίπτωσή μας:
@ -236,17 +236,17 @@ plt.plot(X_test,pred)
## Πολυωνυμική Παλινδρόμηση
Ένας άλλος τύπος γραμμικής παλινδρόμησης είναι η Πολυωνυμική Παλινδρόμηση. Ενώ μερικές φορές υπάρχει γραμμική σχέση μεταξύ των μεταβλητών - όσο μεγαλύτερη είναι η κολοκύθα σε όγκο, τόσο υψηλότερη η τιμή - κάποιες φορές αυτές οι σχέσεις δεν μπορούν να σχεδιαστούν ως επίπεδο ή ευθεία γραμμή.
Ένας άλλος τύπος γραμμικής παλινδρόμησης είναι η Πολυωνυμική Παλινδρόμηση. Ενώ μερικές φορές υπάρχει γραμμική συσχέτιση μεταξύ μεταβλητών - όσο μεγαλύτερη η κολοκύθα σε όγκο, τόσο υψηλότερη η τιμή - μερικές φορές αυτές οι σχέσεις δεν μπορούν να απεικονιστούν ως επίπεδο ή ευθεία γραμμή.
✅ Εδώ είναι [μερικά ακόμα παραδείγματα](https://online.stat.psu.edu/stat501/lesson/9/9.8) δεδομένων που θα μπορούσαν να χρησιμοποιήσουν Πολυωνυμική Παλινδρόμηση.
✅ Εδώ είναι [μερικά ακόμη παραδείγματα](https://online.stat.psu.edu/stat501/lesson/9/9.8) δεδομένων που θα μπορούσαν να χρησιμοποιήσουν Πολυωνυμική Παλινδρόμηση.
Ρίξτε άλλη μια ματιά στη σχέση μεταξύ της Ημερομηνίας και της Τιμής. Αυτό το διασποράς φαίνεται να πρέπει κατ’ ανάγκη να αναλυθεί με μια ευθεία γραμμή; Δεν μπορεί η τιμή να κυμαίνεται; Σε αυτή την περίπτωση, μπορείτε να δοκιμάσετε πολυωνυμική παλινδρόμηση.
Ρίξε μια ακόμα ματιά στη σχέση μεταξύ Ημερομηνίας και Τιμής. Φαίνεται αυτό το scatterplot να πρέπει απαραίτητα να αναλυθεί με μια ευθεία γραμμή; Δεν μπορούν οι τιμές να κυμαίνονται; Σε αυτή την περίπτωση, μπορείς να δοκιμάσεις την πολυωνυμική παλινδρόμηση.
✅ Τα πολυώνυμα είναι μαθηματικές εκφράσεις που μπορεί να αποτελούνται από μία ή περισσότερες μεταβλητές και συντελεστές.
✅ Οι πολυώνυμοι είναι μαθηματικές εκφράσεις που μπορεί να αποτελούνται από μία ή περισσότερες μεταβλητές και συντελεστές.
Η πολυωνυμική παλινδρόμηση δημιουργεί μια καμπύλη γραμμή γιανα ταιριάξει καλύτερα δεδομένα που δεν είναι γραμμικά. Στην περίπτωσή μας, αν συμπεριλάβουμε μια μεταβλητή `DayOfYear` υψωμένη στο τετράγωνο στα εισερχόμενα δεδομένα, θα μπορούσαμε να προσαρμόσουμε τα δεδομένα μας με μια παραβολική καμπύλη, που θα έχει ένα ελάχιστο σε ένα συγκεκριμένο σημείο μέσα στο έτος.
Η πολυωνυμική παλινδρόμηση δημιουργεί μια καμπύλη γραμμή γιανα ταιριάξει καλύτερα σε μη-γραμμικά δεδομένα. Στη δική μας περίπτωση, αν συμπεριλάβουμε μια τετράγωνη μεταβλητή `DayOfYear` στα εισαγόμενα δεδομένα, θα πρέπει να μπορέσουμε να προσαρμόσουμε τα δεδομένα μας με μια παραβολική καμπύλη, που θα έχει ένα ελάχιστο σε κάποιο σημείο μέσα στο έτος.
Η Scikit-learn περιλαμβάνει ένα χρήσιμο [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) γιανα συνδυάζει διαφορετικά βήματα επεξεργασίας δεδομένων μαζί. Ένα **pipeline** είναι μια αλυσίδα **εκτιμητών (estimators)**. Στην περίπτωσή μας, θα δημιουργήσουμε ένα pipeline που πρώτα προσθέτει πολυωνυμικά χαρακτηριστικά στο μοντέλο μας και στη συνέχεια εκπαιδεύει την παλινδρόμηση:
Το Scikit-learn περιλαμβάνει ένα χρήσιμο [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) γιανα συνδυάζει διαφορετικά βήματα επεξεργασίας δεδομένων μαζί. Ένα **pipeline** είναι μια αλυσίδα **εκτιμητών**. Στη δική μας περίπτωση, θα δημιουργήσουμε ένα pipeline που πρώτα προσθέτει πολυωνυμικά χαρακτηριστικά στο μοντέλο μας, και μετά εκπαιδεύει την παλινδρόμηση:
```python
from sklearn.preprocessing import PolynomialFeatures
Η χρήση του `PolynomialFeatures(2)` σημαίνει ότι θα συμπεριλάβουμε όλα τα πολυώνυμα δευτέρου βαθμού από τα εισερχόμενα δεδομένα. Στην περίπτωσή μας, θα σημαίνει απλά `DayOfYear`<sup>2</sup>, αλλά δεδομένων δύο εισερχόμενων μεταβλητών X και Y, αυτό θα προσθέσει X<sup>2</sup>, XY και Y<sup>2</sup>. Μπορούμε επίσης να χρησιμοποιήσουμε πολυώνυμα υψηλότερου βαθμού αν το επιθυμούμε.
Η χρήση του `PolynomialFeatures(2)` σημαίνει ότι θα συμπεριλάβουμε όλους τους πολυώνυμους δεύτερου βαθμού από τα εισαγόμενα δεδομένα. Στη δική μας περίπτωση αυτό σημαίνει απλά `DayOfYear`<sup>2</sup>, αλλά δεδομένων δύο εισερχόμενων μεταβλητών X και Y, αυτό θα προσθέσει X<sup>2</sup>, XY και Y<sup>2</sup>. Μπορούμε επίσης να χρησιμοποιήσουμε πολυώνυμα υψηλότερου βαθμού αν το θέλουμε.
Τα pipelines μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο όπως το αρχικό αντικείμενο `LinearRegression`, δηλαδή μπορούμε να κάνουμε `fit` το pipeline και μετά να χρησιμοποιήσουμε `predict`γιανα πάρουμε τα αποτελέσματα της πρόβλεψης:
Για να σχεδιάσουμε την ομαλή καμπύλη προσέγγισης, χρησιμοποιούμε το `np.linspace`γιανα δημιουργήσουμε ένα ομοιόμορφο φάσμα τιμών εισόδου, αντί να σχεδιάσουμε άμεσα πάνω στα μη διατεταγμένα δεδομένα δοκιμής (που θα παρήγαγε μια ζιγκ-ζαγκ γραμμή):
Τα pipelines μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο όπως το αρχικό αντικείμενο `LinearRegression`, δηλαδή μπορούμε να κάνουμε `fit` στο pipeline και στη συνέχεια να χρησιμοποιήσουμε `predict`γιανα πάρουμε τα αποτελέσματα της πρόβλεψης. Εδώ είναι το γράφημα που δείχνει τα δεδομένα δοκιμής και την προσεγγιστική καμπύλη:
Εδώ είναι το διάγραμμα που δείχνει τα δεδομένα δοκιμής και την καμπύλη προσέγγισης:
Χρησιμοποιώντας πολυωνυμική παλινδρόμηση, μπορούμε να πετύχουμε ελαφρώς χαμηλότερο MSE και μεγαλύτερο συντελεστή καθορισμού, αλλά όχι σημαντικά. Πρέπει να λάβουμε υπόψη και άλλα χαρακτηριστικά!
Χρησιμοποιώντας την Πολυωνυμική Παλινδρόμηση, μπορούμε να πετύχουμε ελαφρώς χαμηλότερο RMSE και υψηλότερο συντελεστή προσδιορισμού, αλλά όχι σημαντικά. Πρέπει να λάβουμε υπόψη και άλλα χαρακτηριστικά!
> Μπορείτε να δείτε ότι οι ελάχιστες τιμές των κολοκυθών παρατηρούνται κάπου γύρω στο Halloween. Πώς μπορείτε να εξηγήσετε αυτό;
> Μπορείς να δεις ότι οι ελάχιστες τιμές κολοκύθας παρατηρούνται κάπου γύρω από το Halloween. Πώς μπορείς να το εξηγήσεις;
🎃 Συγχαρητήρια, μόλις δημιουργήσατε ένα μοντέλο που μπορεί να βοηθήσει στην πρόβλεψη της τιμής για τις κολοκύθες τύπου πίτας. Πιθανότατα μπορείτε να επαναλάβετε την ίδια διαδικασία για όλους τους τύπους κολοκύθας, αλλά αυτό θα ήταν κουραστικό. Ας μάθουμε τώρα πώς να λαμβάνουμε υπόψη τη ποικιλία κολοκύθας στο μοντέλο μας!
🎃 Συγχαρητήρια, μόλις δημιούργησες ένα μοντέλο που μπορεί να βοηθήσει στην πρόβλεψη της τιμής των πίτων κολοκύθας. Πιθανώς να μπορείς να επαναλάβεις την ίδια διαδικασία για όλους τους τύπους κολοκύθας, αλλά αυτό θα ήταν κουραστικό. Ας μάθουμε τώρα πώς να λαμβάνουμε υπόψη την ποικιλία κολοκύθας στο μοντέλο μας!
## Κατηγορικά Χαρακτηριστικά
Σε έναν ιδανικό κόσμο, θέλουμε να μπορούμε να προβλέπουμε τιμές για διαφορετικές ποικιλίες κολοκύθας χρησιμοποιώντας το ίδιο μοντέλο. Ωστόσο, η στήλη `Variety` είναι κάπως διαφορετική από στήλες όπως το `Month`, επειδή περιέχει μη αριθμητικές τιμές. Τέτοιες στήλες ονομάζονται **κατηγορικές**.
Σε έναν ιδανικό κόσμο, θέλουμε να μπορούμε να προβλέπουμε τιμές για διαφορετικές ποικιλίες κολοκύθας χρησιμοποιώντας το ίδιο μοντέλο. Ωστόσο, η στήλη `Variety`διαφέρει κάπως από στήλες όπως το `Month`, επειδή περιέχει μη αριθμητικές τιμές. Τέτοιες στήλες ονομάζονται **κατηγορικές**.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
[](https://youtu.be/DYGliioIAE0 "Μηχανική Μάθηση για αρχάριους - Προβλέψεις με κατηγορικά χαρακτηριστικά χρησιμοποιώντας γραμμική παλινδρόμηση")
> 🎥 Πατήστε την εικόνα παραπάνω για μια σύντομη βίντεο-επισκόπηση της χρήσης κατηγορικών χαρακτηριστικών.
> 🎥 Κάνε κλικ στην παραπάνω εικόνα για μια σύντομη επισκόπηση βίντεο σχετικά με τη χρήση κατηγορικών χαρακτηριστικών.
Εδώ μπορείτε να δείτε πώς η μέση τιμή εξαρτάται από την ποικιλία:
Εδώ βλέπεις πως η μέση τιμή εξαρτάται από την ποικιλία:
<imgalt="Μέση τιμή ανά ποικιλία"src="../../../../translated_images/el/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
Για να λάβουμε υπόψη την ποικιλία, αρχικά πρέπει να την μετατρέψουμε σε αριθμητική μορφή ή να την **κωδικοποιήσουμε**. Υπάρχουν διάφοροι τρόποι να το κάνουμε:
Για να λάβουμε υπόψη την ποικιλία, πρώτα πρέπει να τη μετατρέψουμε σε αριθμητική μορφή, ή να την **κωδικοποιήσουμε**. Υπάρχουν διάφοροι τρόποι που μπορούμενα το κάνουμε:
* Απλή **αριθμητική κωδικοποίηση** θα δημιουργήσει έναν πίνακα διαφορετικών ποικιλιών και στη συνέχεια θα αντικαταστήσει το όνομα της ποικιλίας με έναν δείκτη σε αυτόν τον πίνακα. Αυτό δεν είναι η καλύτερη ιδέα γιαγραμμική παλινδρόμηση, επειδή η γραμμική παλινδρόμηση λαμβάνει την πραγματική αριθμητική τιμή του δείκτη και την προσθέτει στο αποτέλεσμα, πολλαπλασιάζοντας την με κάποιο συντελεστή. Στην περίπτωσή μας, η σχέση μεταξύ του αριθμού δείκτη και της τιμής είναι σαφώς μη γραμμική, ακόμα καιαν φροντίσουμε οι δείκτεςνα είναι ταξινομημένοι με κάποιο συγκεκριμένο τρόπο.
* Η**one-hot κωδικοποίηση** θα αντικαταστήσει τη στήλη `Variety` με 4 διαφορετικές στήλες, μία για κάθε ποικιλία. Κάθε στήλη θα περιέχει `1`αν η αντίστοιχη γραμμή ανήκει σε μια συγκεκριμένη ποικιλία, και `0` αλλιώς. Αυτό σημαίνει ότι θα υπάρχουν τέσσερις συντελεστές στη γραμμική παλινδρόμηση, ένας για κάθε ποικιλία κολοκύθας, υπεύθυνος για την "αρχική τιμή" (ή μάλλον την "επιπλέον τιμή") για αυτή τη συγκεκριμένη ποικιλία.
* Ηαπλή **αριθμητική κωδικοποίηση** θα δημιουργήσει έναν πίνακα με τις διαφορετικές ποικιλίες, και μετά θα αντικαταστήσει το όνομα της ποικιλίας με ένα δείκτη σε αυτόν τον πίνακα. Αυτό δεν είναι η καλύτερη ιδέα γιατην γραμμική παλινδρόμηση, γιατί η γραμμική παλινδρόμηση λαμβάνει την πραγματική αριθμητική τιμή του δείκτη και την προσθέτει στο αποτέλεσμα, πολλαπλασιάζοντας με κάποιο συντελεστή. Στη δική μας περίπτωση, η σχέση μεταξύ του αριθμού δείκτη και της τιμής είναι σαφώς μη γραμμική, ακόμα κι αν φροντίσουμε να τακτοποιήσουμε τους δείκτες με κάποιο συγκεκριμένο τρόπο.
* Η**one-hot κωδικοποίηση** θα αντικαταστήσει τη στήλη `Variety` με 4 διαφορετικές στήλες, μία για κάθε ποικιλία. Κάθε στήλη θα περιέχει `1`αν η αντίστοιχη γραμμή είναι της συγκεκριμένης ποικιλίας, και `0` διαφορετικά. Αυτό σημαίνει ότι θα υπάρχουν τέσσερις συντελεστές στη γραμμική παλινδρόμηση, ένας για κάθε ποικιλία κολοκύθας, υπεύθυνος για την «αρχική τιμή» (ή μάλλον την «πρόσθετη τιμή») για αυτή την ποικιλία.
Ο παρακάτω κώδικας δείχνει πώς μπορούμε να κάνουμε one-hot κωδικοποίηση μιας ποικιλίας:
Οκώδικας παρακάτω δείχνει πώς μπορούμε να κάνουμε one-hot κωδικοποίηση μιας ποικιλίας:
Για να εκπαιδεύσουμε τη γραμμική παλινδρόμηση χρησιμοποιώντας one-hot κωδικοποιημένη ποικιλία ως είσοδο, απλά πρέπει να ορίσουμε σωστά τα δεδομένα `X` και `y`:
Για να εκπαιδεύσουμε γραμμική παλινδρόμηση χρησιμοποιώντας την one-hot κωδικοποίηση ποικιλίας ως είσοδο, απλώς πρέπει να αρχικοποιήσουμε σωστά τα δεδομένα `X` και `y`:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Ο υπόλοιπος κώδικας είναι ο ίδιος όπως αυτός που χρησιμοποιήσαμε παραπάνωγιανα εκπαιδεύσουμε τη γραμμική παλινδρόμηση. Αν το δοκιμάσετε, θα δείτε ότι το μέσο τετραγωνικό σφάλμα είναι περίπου το ίδιο, αλλά παίρνουμε πολύ υψηλότερο συντελεστή καθορισμού (~77%). Για να πάρουμε ακόμα πιο ακριβείς προβλέψεις, μπορούμε να λάβουμε υπόψη και περισσότερα κατηγορικά χαρακτηριστικά, καθώς και αριθμητικά χαρακτηριστικά, όπως το `Month` ή το `DayOfYear`. Για ναδημιουργήσουμε έναν μεγάλο πίνακα χαρακτηριστικών, μπορούμε να χρησιμοποιήσουμε το `join`:
Ο υπόλοιπος κώδικας είναι ο ίδιος με τον παραπάνω που χρησιμοποιήσαμεγιανα εκπαιδεύσουμε τη γραμμική παλινδρόμηση. Αν το δοκιμάσεις, θα δεις ότι το μέσο τετραγωνικό σφάλμα είναι περίπου το ίδιο, αλλά λαμβάνουμε πολύ υψηλότερο συντελεστή προσδιορισμού (~77%). Για να κάνουμε τις προβλέψεις ακόμα πιο ακριβείς, μπορούμε να λάβουμε υπόψη περισσότερα κατηγορικά χαρακτηριστικά, καθώς και αριθμητικά χαρακτηριστικά, όπως το `Month` ή το `DayOfYear`. Για ναπάρουμε έναν μεγάλο πίνακα χαρακτηριστικών, μπορούμε να χρησιμοποιήσουμε το `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -320,68 +342,68 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Εδώ λαμβάνουμε υπόψη επίσης το`City` και τον τύπο `Package`, που μας δίνει MSE 2.84 (10%) και συντελεστή καθορισμού 0.94!
Εδώ επίσης λαμβάνουμε υπόψη `City` και τύπο `Package`, που μας δίνει RMSE 2.84 (10.5%) και συντελεστή προσδιορισμού 0.94!
## Όλα μαζί
## Ταυτόχρονη χρήση όλων τους
Για να φτιάξουμε το καλύτερο μοντέλο, μπορούμε να χρησιμοποιήσουμε συνδυασμένα (one-hot κωδικοποιημένα κατηγορικά + αριθμητικά) δεδομένα από το παραπάνω παράδειγμα μαζί με την πολυωνυμική παλινδρόμηση. Εδώ είναι ο πλήρης κώδικας για τη διευκόλυνσή σας:
Για να φτιάξουμε το καλύτερο μοντέλο, μπορούμε να χρησιμοποιήσουμε συνδυασμένα (one-hot κωδικοποιημένα κατηγορικά + αριθμητικά) δεδομένα από το παραπάνω παράδειγμα μαζί με την πολυωνυμική παλινδρόμηση. Εδώ είναι ο πλήρης κώδικας για τη διευκόλυνσή σου:
```python
# ρύθμιση δεδομένων εκπαίδευσης
# ορίστε τα δεδομένα εκπαίδευσης
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# δημιουργία διαχωρισμού εκπαίδευσης-δοκιμής
# κάντε διαχωρισμό εκπαίδευσης-δοκιμής
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
Αυτό θα μας δώσει τον καλύτερο συντελεστή καθορισμού κοντά στο 97%, και MSE=2.23 (~8% σφάλμα πρόβλεψης).
Αυτό θα μας δώσει τον καλύτερο συντελεστή προσδιορισμού σχεδόν 97%, και RMSE=2.23 (~8% σφάλμα πρόβλεψης).
| Μοντέλο | MSE | Συντελεστής καθορισμού |
|---------|-----|------------------------|
| Γραμμική`DayOfYear` | 2.77 (17.2%) | 0.07 |
| Πολυωνυμική`DayOfYear` | 2.73 (17.0%) | 0.08 |
| Γραμμική`Variety` | 5.24 (19.7%) | 0.77 |
| Γραμμική με όλα τα χαρακτηριστικά | 2.84 (10.5%) | 0.94 |
| Πολυωνυμική με όλα τα χαρακτηριστικά | 2.23 (8.25%) | 0.97 |
| Μοντέλο | RMSE | Συντελεστής προσδιορισμού |
|-------|-----|---------------|
| Γραμμικό`DayOfYear` | 2.77 (17.2%) | 0.07 |
| Πολυωνυμικό`DayOfYear` | 2.73 (17.0%) | 0.08 |
| Γραμμικό`Variety` | 5.24 (19.7%) | 0.77 |
| Όλα τα χαρακτηριστικά Γραμμικό | 2.84 (10.5%) | 0.94 |
| Όλα τα χαρακτηριστικά Πολυωνυμικό | 2.23 (8.25%) | 0.97 |
🏆 Μπράβο! Δημιουργήσατε τέσσερα μοντέλα παλινδρόμησης σε ένα μάθημα και βελτιώσατε την ποιότητα του μοντέλου στο 97%. Στο τελικό κεφάλαιο για την Παλινδρόμηση θα μάθετε για τη λογιστική παλινδρόμηση για την κατηγοριοποίηση.
🏆 Μπράβο! Δημιούργησες τέσσερα μοντέλα Παλινδρόμησης σε ένα μάθημα και βελτίωσες την ποιότητα του μοντέλου στο 97%. Στην τελική ενότητα για την παλινδρόμηση, θα μάθεις για την Λογιστική Παλινδρόμηση για τον καθορισμό κατηγοριών.
---
## 🚀Πρόκληση
Δοκιμάστε διάφορες μεταβλητές σε αυτό το notebook γιανα δείτε πώς η συσχέτιση σχετίζεται με την ακρίβεια του μοντέλου.
Δοκίμασε διάφορες μεταβλητές σε αυτό το σημειωματάριο γιανα δεις πώς η συσχέτιση αντιστοιχεί στην ακρίβεια του μοντέλου.
## [Τεστ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/)
## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/)
## Ανασκόπηση & Αυτο-μελέτη
## Ανασκόπηση & Αυτοδιδασκαλία
Σε αυτό το μάθημα μάθαμε για τη γραμμική παλινδρόμηση. Υπάρχουν και άλλοι σημαντικοί τύποι παλινδρόμησης. Διαβάστε για τις τεχνικές Stepwise, Ridge, Lasso και Elasticnet. Ένα καλό μάθημα γιανα μάθετε περισσότερα είναι το [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
Σε αυτό το μάθημα μάθαμε για τη Γραμμική Παλινδρόμηση. Υπάρχουν και άλλοι σημαντικοί τύποι παλινδρόμησης. Διάβασε για τις τεχνικές Stepwise, Ridge, Lasso και Elasticnet. Ένα καλό μάθημα γιανα μελετήσεις περισσότερα είναι το [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Εργασία
## Άσκηση
[Κατασκευή μοντέλου](assignment.md)
[Δημιούργησε ένα μοντέλο](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Αποποίηση ευθυνών**:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτοματοποιημένες μεταφράσεις μπορείνα περιέχουν σφάλματα ή ανακρίβειες. Το αρχικό έγγραφο στην μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε καμία ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ προσπαθούμε για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεταινα περιέχουν σφάλματα ή ανακρίβειες. Το αρχικό έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε καμία ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
"## Γραμμική και Πολυωνυμική Παλινδρόμηση για Τιμολόγηση Κολοκύθας - Μάθημα 3\n",
"\n",
"Φορτώστε τις απαραίτητες βιβλιοθήκες και το σύνολο δεδομένων. Μετατρέψτε τα δεδομένα σε ένα dataframe που περιέχει ένα υποσύνολο των δεδομένων:\n",
"Φορτώστε τις απαιτούμενες βιβλιοθήκες και το σύνολο δεδομένων. Μετατρέψτε τα δεδομένα σε ένα dataframe που περιέχει ένα υποσύνολο των δεδομένων:\n",
"\n",
"- Επιλέξτε μόνο κολοκύθες που τιμολογούνται ανά bushel\n",
"- Λάβετε μόνο τις κολοκύθες που τιμολογούνται ανά μπούσελ\n",
"- Μετατρέψτε την ημερομηνία σε μήνα\n",
"- Υπολογίστε την τιμή ως μέσο όρο των υψηλών και χαμηλών τιμών\n",
"- Μετατρέψτε την τιμή ώστε να αντικατοπτρίζει την τιμολόγηση ανά ποσότητα bushel\n"
"- Μετατρέψτε την τιμή ώστε να αντανακλά την τιμολόγηση ανά ποσότητα μπούσελ\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Ένα διάγραμμα διασποράς μας υπενθυμίζει ότι έχουμε δεδομένα μόνο από τον Αύγουστο έως τον Δεκέμβριο. Πιθανώς χρειαζόμαστε περισσότερα δεδομένα γιανα μπορέσουμε να βγάλουμε συμπεράσματα με γραμμικό τρόπο.\n"
"Ένα διάγραμμα διασποράς μας υπενθυμίζει ότι έχουμε δεδομένα μόνο των μηνών από τον Αύγουστο έως και τον Δεκέμβριο. Πιθανόν να χρειαζόμαστε περισσότερα δεδομένα ώστενα μπορέσουμε να βγάλουμε συμπεράσματα με γραμμικό τρόπο.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Ας δούμε αν υπάρχει συσχέτιση:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Φαίνεται ότι η συσχέτιση είναι αρκετά μικρή, αλλά υπάρχει κάποια άλλη πιο σημαντική σχέση - επειδή οι τιμές στον παραπάνω γράφημα φαίνεται να σχηματίζουν αρκετές διακριτές ομάδες. Ας δημιουργήσουμε ένα γράφημα που θα δείχνει τις διαφορετικές ποικιλίες κολοκύθας:\n"
"Φαίνεται ότι η συσχέτιση είναι σχετικά μικρή, αλλά υπάρχει κάποια άλλη πιο σημαντική σχέση - διότι τα σημεία τιμών στο παραπάνω γράφημα φαίνεται να έχουν αρκετές διακριτές συστάδες. Ας φτιάξουμε ένα γράφημα που θα δείχνει διαφορετικές ποικιλίες κολοκύθας:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Προς το παρόν, ας επικεντρωθούμε μόνο σε μία ποικιλία - **τύπος πίτας**.\n"
]
},
{
"cell_type": "code",
@ -584,7 +588,7 @@
"source": [
"### Γραμμική Παλινδρόμηση\n",
"\n",
"Θα χρησιμοποιήσουμε το Scikit Learn γιανα εκπαιδεύσουμε ένα μοντέλο γραμμικής παλινδρόμησης:\n"
"Θα χρησιμοποιήσουμε το Scikit Learn γιανα εκπαιδεύσουμε μοντέλο γραμμικής παλινδρόμησης:\n"
]
},
{
@ -662,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Η κλίση της γραμμής μπορεί να προσδιοριστεί από τους συντελεστές γραμμικής παλινδρόμησης:\n"
"Η κλίση της γραμμής μπορεί να προσδιοριστεί από τους συντελεστές της γραμμικής παλινδρόμησης:\n"
]
},
{
@ -720,9 +724,9 @@
"source": [
"### Πολυωνυμική Παλινδρόμηση\n",
"\n",
"Μερικές φορές η σχέση μεταξύ χαρακτηριστικών και αποτελεσμάτων είναι εγγενώς μη γραμμική. Για παράδειγμα, οι τιμές της κολοκύθας μπορεί να είναι υψηλές τον χειμώνα (μήνες=1,2), να πέφτουν το καλοκαίρι (μήνες=5-7) και στη συνέχεια να αυξάνονται ξανά. Η γραμμική παλινδρόμηση δεν μπορεί να βρει αυτή τη σχέση με ακρίβεια.\n",
"Μερικές φορές η σχέση μεταξύ χαρακτηριστικών και αποτελεσμάτων είναι εγγενώς μη γραμμική. Για παράδειγμα, οι τιμές της κολοκύθας μπορεί να είναι υψηλές τον χειμώνα (μήνες=1,2), στη συνέχεια να πέφτουν το καλοκαίρι (μήνες=5-7), και μετά να ανεβαίνουν ξανά. Η γραμμική παλινδρόμηση δεν μπορεί να βρει αυτήν τη σχέση με ακρίβεια.\n",
"\n",
"Σε αυτή την περίπτωση, μπορούμε να εξετάσουμε την προσθήκη επιπλέον χαρακτηριστικών. Ένας απλός τρόπος είναι να χρησιμοποιήσουμε πολυώνυμα από τα χαρακτηριστικά εισόδου, κάτι που θα οδηγήσει σε **πολυωνυμική παλινδρόμηση**. Στο Scikit Learn, μπορούμε ναπρο-υπολογίσουμε αυτόματα πολυωνυμικά χαρακτηριστικά χρησιμοποιώντας pipelines:\n"
"Σε αυτή την περίπτωση, μπορούμε να εξετάσουμε την προσθήκη επιπλέον χαρακτηριστικών. Ένας απλός τρόπος είναι να χρησιμοποιήσουμε πολυώνυμα από τα εισερχόμενα χαρακτηριστικά, που θα έχει ως αποτέλεσμα την **πολυωνυμική παλινδρόμηση**. Στο Scikit Learn, μπορούμε να υπολογίσουμε αυτόματα τα πολυωνυμικά χαρακτηριστικά χρησιμοποιώντας αγωγούς (pipelines):\n"
"Στον ιδανικό κόσμο, θέλουμε να μπορούμε να προβλέψουμε τις τιμές για διαφορετικές ποικιλίες κολοκύθας χρησιμοποιώντας το ίδιο μοντέλο. Για να λάβουμε υπόψη την ποικιλία, πρέπει πρώτα να τη μετατρέψουμε σε αριθμητική μορφή, ή αλλιώςνα την **κωδικοποιήσουμε**. Υπάρχουν διάφοροι τρόποι να το κάνουμε:\n",
"Στον ιδανικό κόσμο, θέλουμε να μπορούμε να προβλέψουμε τις τιμές για διάφορες ποικιλίες κολοκύθας χρησιμοποιώντας το ίδιο μοντέλο. Για να λάβουμε υπόψη την ποικιλία, πρέπει πρώτα να τη μετατρέψουμε σε αριθμητική μορφή, ή να την **κωδικοποιήσουμε**. Υπάρχουν διάφοροι τρόποι να το κάνουμε:\n",
"\n",
"* Απλή αριθμητική κωδικοποίηση, η οποία δημιουργεί έναν πίνακα με τις διαφορετικές ποικιλίες και στη συνέχεια αντικαθιστά το όνομα της ποικιλίας με έναν δείκτη σε αυτόν τον πίνακα. Αυτό δεν είναι η καλύτερη ιδέα για γραμμική παλινδρόμηση, επειδή η γραμμική παλινδρόμηση λαμβάνει υπόψη την αριθμητική τιμή του δείκτη, και η αριθμητική τιμή πιθανότατα δεν συσχετίζεται αριθμητικά με την τιμή.\n",
"* Κωδικοποίηση one-hot, η οποία αντικαθιστά τη στήλη `Variety` με 4 διαφορετικές στήλες, μία για κάθε ποικιλία, που θα περιέχει 1 αν η αντίστοιχη γραμμή ανήκει στη συγκεκριμένη ποικιλία, και 0 διαφορετικά.\n",
"* Απλή αριθμητική κωδικοποίηση που θα δημιουργήσει έναν πίνακα διαφορετικών ποικιλιών και στη συνέχεια θα αντικαταστήσει το όνομα της ποικιλίας με ένα δείκτη σε αυτόν τον πίνακα. Αυτό δεν είναι η καλύτερη ιδέα για γραμμική παλινδρόμηση, επειδή η γραμμική παλινδρόμηση λαμβάνει υπόψη την αριθμητική τιμή του δείκτη, και η αριθμητική τιμή πιθανόννα μην σχετίζεται αριθμητικά με την τιμή.\n",
"* Κωδικοποίηση one-hot, που θα αντικαταστήσει τη στήλη `Variety` με 4 διαφορετικές στήλες, μία για κάθε ποικιλία, που θα περιέχουν 1 αν η αντίστοιχη γραμμή ανήκει στην συγκεκριμένη ποικιλία και 0 αλλιώς.\n",
"\n",
"Οπαρακάτω κώδικας δείχνει πώς μπορούμε να κωδικοποιήσουμε μια ποικιλία με τη μέθοδο one-hot:\n"
"Οκώδικας παρακάτω δείχνει πώς μπορούμε να εφαρμόσουμε κωδικοποίηση one-hot σε μια ποικιλία:\n"
]
},
{
@ -940,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Γραμμική Παλινδρόμηση στη Ποικιλία\n",
"### Γραμμική Παλινδρόμηση σε Διάφορα \n",
"\n",
"Τώρα θα χρησιμοποιήσουμε τον ίδιο κώδικα όπως παραπάνω, αλλά αντί για `DayOfYear` θα χρησιμοποιήσουμε την ποικιλία μας, η οποία έχει κωδικοποιηθεί με one-hot, ως είσοδο:\n"
"Τώρα θα χρησιμοποιήσουμε τον ίδιο κώδικα όπως παραπάνω, αλλά αντί γιατο `DayOfYear` θα χρησιμοποιήσουμε τη one-hot-encoded ποικιλία μας ως είσοδο:\n"
]
},
{
@ -990,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Μπορούμε επίσης να δοκιμάσουμε να χρησιμοποιήσουμε άλλες δυνατότητες με τον ίδιο τρόπο και να τις συνδυάσουμε με αριθμητικές δυνατότητες, όπως το `Month` ή το `DayOfYear`:\n"
"Μπορούμε επίσης να δοκιμάσουμε να χρησιμοποιήσουμε άλλα χαρακτηριστικά με τον ίδιο τρόπο και να τα συνδυάσουμε με αριθμητικά χαρακτηριστικά, όπως το `Month` ή το `DayOfYear`:\n"
]
},
{
@ -1023,7 +1030,7 @@
"source": [
"### Πολυωνυμική Παλινδρόμηση\n",
"\n",
"Η πολυωνυμική παλινδρόμηση μπορεί επίσης να χρησιμοποιηθεί με κατηγορικά χαρακτηριστικά που έχουν κωδικοποιηθεί με one-hot encoding. Ο κώδικας για την εκπαίδευση πολυωνυμικής παλινδρόμησης θα είναι ουσιαστικά ο ίδιος με αυτόν που έχουμε δει παραπάνω.\n"
"Η πολυωνυμική παλινδρόμηση μπορεί επίσης να χρησιμοποιηθεί με κατηγορικά χαρακτηριστικά που έχουν κωδικοποιηθεί με one-hot encoding. Ο κώδικας για την εκπαίδευση της πολυωνυμικής παλινδρόμησης θα ήταν ουσιαστικά ίδιος με αυτόν που είδαμε παραπάνω.\n"
]
},
{
@ -1070,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Αποποίηση ευθύνης**: \nΑυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Αποποίηση ευθυνών**: \nΑυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ προσπαθούμε για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρανοήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
Processen att bygga, använda och underhålla modeller för maskininlärning och den data de använder skiljer sig avsevärt från många andra utvecklingsarbetsflöden. I denna lektion kommer vi att avmystifiera processen och beskriva de huvudsakliga tekniker du behöver känna till. Du kommer att:
Processen att bygga, använda och underhålla maskininlärningsmodeller och den data de använder är en mycket annorlunda process jämfört med många andra utvecklingsarbetsflöden. I denna lektion kommer vi att avmystifiera processen och skissera de viktigaste teknikerna du behöver känna till. Du kommer att:
- Förstå de processer som ligger till grund för maskininlärning på en övergripande nivå.
- Utforska grundläggande begrepp som "modeller", "prediktioner" och "träningsdata".
- Förstå processerna bakom maskininlärning på en övergripande nivå.
- Utforska grundläggande begrepp såsom "modeller", "förutsägelser" och "träningsdata".
## [Quiz före föreläsningen](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz före föreläsning](https://ff-quizzes.netlify.app/en/ml/)
[](https://youtu.be/4NGM0U2ZSHU "ML för nybörjare - Tekniker för maskininlärning")
[](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Klicka på bilden ovan för en kort video som går igenom denna lektion.
## Introduktion
På en övergripande nivå består hantverket att skapa processer för maskininlärning (ML) av flera steg:
På en övergripande nivå består hantverket att skapa maskininlärningsprocesser (ML) av ett antal steg:
1. **Bestäm frågan**. De flesta ML-processer börjar med att ställa en fråga som inte kan besvaras med ett enkelt villkorsprogram eller en regelbaserad motor. Dessa frågor handlar ofta om att göra prediktioner baserade på en samling data.
2. **Samla in och förbered data**. För att kunna besvara din fråga behöver du data. Kvaliteten och ibland mängden av din data kommer att avgöra hur väl du kan besvara din ursprungliga fråga. Att visualisera data är en viktig del av denna fas. Denna fas inkluderar också att dela upp data i en tränings- och testgrupp för att bygga en modell.
3. **Välj en träningsmetod**. Beroende på din fråga och datans natur behöver du välja hur du vill träna en modell för att bäst reflektera din data och göra korrekta prediktioner baserat på den. Detta är den del av din ML-process som kräver specifik expertis och ofta en betydande mängd experimenterande.
4. **Träna modellen**. Med hjälp av din träningsdata använder du olika algoritmer för att träna en modell att känna igen mönster i datan. Modellen kan använda interna vikter som kan justeras för att prioritera vissa delar av datan över andra för att bygga en bättre modell.
5. **Utvärdera modellen**. Du använder data som modellen aldrig tidigare sett (din testdata) från din insamlade uppsättning för att se hur modellen presterar.
6. **Justera parametrar**. Baserat på modellens prestanda kan du göra om processen med olika parametrar eller variabler som styr beteendet hos de algoritmer som används för att träna modellen.
7. **Prediktera**. Använd nya indata för att testa modellens noggrannhet.
1. **Bestäm frågan**. De flesta ML-processer börjar med att ställa en fråga som inte kan besvaras med ett enkelt villkorsbaserat program eller regelbaserat system. Dessa frågor handlar ofta om förutsägelser baserade på en samling data.
2. **Samla in och förbered data**. För att kunna besvara din fråga behöver du data. Kvaliteten och ibland även mängden av din data avgör hur väl du kan besvara din ursprungliga fråga. Att visualisera data är en viktig del av denna fas. Denna fas inkluderar också att dela upp data i tränings- och testgrupper för att bygga en modell.
3. **Välj en träningsmetod**. Beroende på din fråga och din datas natur behöver du välja hur du vill träna en modell för att bäst spegla din data och göra noggranna förutsägelser utifrån den. Detta är den del av din ML-process som kräver specifik expertis och ofta en betydande mängd experimenterande.
4. **Träna modellen**. Med hjälp av din träningsdata kommer du att använda olika algoritmer för att träna en modell att känna igen mönster i datan. Modellen kan använda interna vikter som kan justeras för att prioritera vissa delar av datan över andra för att bygga en bättre modell.
5. **Utvärdera modellen**. Du använder tidigare aldrig sedd data (din testdata) från din samling för att se hur modellen presterar.
6. **Parameterjustering**. Baserat på modellens prestanda kan du upprepa processen med olika parametrar, eller variabler, som styr algoritmernas beteende vid träningen av modellen.
7. **Förutsägelse**. Använd nya indata för att testa modellens noggrannhet.
## Vilken fråga ska ställas?
## Vilken fråga att ställa
Datorer är särskilt skickliga på att upptäcka dolda mönster i data. Denna förmåga är mycket användbar för forskare som har frågor om ett visst område som inte enkelt kan besvaras genom att skapa en regelbaserad motor. Givet en aktuarieuppgift, till exempel, kan en dataforskare skapa handgjorda regler kring dödligheten hos rökare jämfört med icke-rökare.
Datorer är särskilt skickliga på att upptäcka dolda mönster i data. Denna förmåga är mycket användbar för forskare som har frågor om ett visst område som inte lätt kan besvaras genom att skapa ett villkorsbaserat regelverk. Vid en aktuarieuppgift, till exempel, kan en data scientist kanske konstruera handgjorda regler kring dödligheten för rökare jämfört med icke-rökare.
När många andra variabler tas med i ekvationen kan dock en ML-modell visa sig vara mer effektiv för att förutsäga framtida dödlighetsnivåer baserat på tidigare hälsodata. Ett mer positivt exempel kan vara att göra väderprognoser för april månad på en viss plats baserat på data som inkluderar latitud, longitud, klimatförändringar, närhet till havet, jetströmmens mönster och mer.
När många andra variabler inkluderas i ekvationen kan dock en ML-modell visa sig vara mer effektiv för att förutsäga framtida dödlighet baserat på tidigare hälsodata. Ett mer muntert exempel kan vara att göra väderprognoser för april månad på en given plats baserat på data som inkluderar latitud, longitud, klimatförändringar, närhet till havet, jetströmmens mönster med mera.
✅ Denna [presentation](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om vädermodeller ger ett historiskt perspektiv på att använda ML i väderanalys.
✅ Denna [presentation](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om vädermodeller erbjuder ett historiskt perspektiv på användning av ML i väderanalys.
## Förberedande uppgifter
Innan du börjar bygga din modell finns det flera uppgifter du behöver slutföra. För att testa din fråga och formulera en hypotes baserad på modellens prediktioner behöver du identifiera och konfigurera flera element.
Innan du börjar bygga din modell finns flera uppgifter du behöver slutföra. För att testa din fråga och forma en hypotes baserat på modellens förutsägelser behöver du identifiera och konfigurera flera element.
### Data
För att kunna besvara din fråga med någon form av säkerhet behöver du en tillräcklig mängd data av rätt typ. Det finns två saker du behöver göra vid denna punkt:
För att kunna besvara din fråga med någon form av säkerhet behöver du en stor mängd data av rätt typ. Det finns två saker du behöver göra vid detta tillfälle:
- **Samla in data**. Med tanke på den tidigare lektionen om rättvisa i dataanalys, samla in din data med omsorg. Var medveten om källorna till denna data, eventuella inneboende fördomar den kan ha, och dokumentera dess ursprung.
- **Förbered data**. Det finns flera steg i processen att förbereda data. Du kan behöva sammanställa data och normalisera den om den kommer från olika källor. Du kan förbättra datans kvalitet och kvantitet genom olika metoder, såsom att konvertera strängar till siffror (som vi gör i [Klustring](../../5-Clustering/1-Visualize/README.md)). Du kan också generera ny data baserat på den ursprungliga (som vi gör i [Klassificering](../../4-Classification/1-Introduction/README.md)). Du kan rensa och redigera datan (som vi gör inför [Webbapplikationslektionen](../../3-Web-App/README.md)). Slutligen kan du behöva slumpa och blanda datan, beroende på dina träningsmetoder.
- **Samla in data**. Med tanke på föregående lektion om rättvisa i dataanalys, samla in din data med omsorg. Var medveten om var datan kommer ifrån, eventuella inneboende bias och dokumentera dess ursprung.
- **Förbered data**. Det finns flera steg i dataförberedelseprocessen. Du kan behöva sammanställa data och normalisera den om den kommer från olika källor. Du kan förbättra datans kvalitet och kvantitet genom olika metoder, såsom att omvandla strängar till siffror (som i [Klustring](../../5-Clustering/1-Visualize/README.md)). Du kan också generera ny data baserat på den ursprungliga (som i [Klassificering](../../4-Classification/1-Introduction/README.md)). Du kan rengöra och redigera datan (vilket vi gör innan lektionen om [Web App](../../3-Web-App/README.md)). Slutligen kan du behöva slumpa och blanda den, beroende på dina träningsmetoder.
✅ Efter att ha samlat in och bearbetat din data, ta en stund för att se om dess struktur tillåter dig att adressera din avsedda fråga. Det kan vara så att datan inte presterar väl i din givna uppgift, som vi upptäcker i våra [Klustringslektioner](../../5-Clustering/1-Visualize/README.md)!
✅ Efter att ha samlat in och bearbetat din data, ta en stund för att se om dess form kommer att tillåta dig att behandla din avsedda fråga. Det kan vara så att datan inte fungerar bra för din givna uppgift, som vi upptäcker i våra [Klustrings](../../5-Clustering/1-Visualize/README.md) lektioner!
### Funktioner och mål
### Egenskaper och mål
En [funktion](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) är en mätbar egenskap hos din data. I många dataset uttrycks det som en kolumnrubrik som "datum", "storlek" eller "färg". Din funktionsvariabel, vanligtvis representerad som `X` i kod, representerar indata som kommer att användas för att träna modellen.
En [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) är en mätbar egenskap hos din data. I många dataset uttrycks den som en kolumnrubrik som 'datum', 'storlek' eller 'färg'. Din feature-variabel, vanligtvis representerad som `X` i kod, är indatavariabeln som används för att träna en modell.
Ett mål är det du försöker förutsäga. Målet, vanligtvis representerat som `y` i kod, representerar svaret på den fråga du försöker ställa till din data: i december, vilken **färg** på pumpor kommer att vara billigast? I San Francisco, vilka områden kommer att ha det bästa fastighets**priset**? Ibland kallas målet också för etikettattribut.
Ett mål är det du försöker förutsäga. Målvariabeln, vanligtvis representerad som `y` i kod, representerar svaret på frågan du ställer till din data: i december, vilken **färg** på pumpor kommer att vara billigast? i San Francisco, vilka bostadsområden kommer att ha det bästa fastighetspriset? Ibland kallas målvariabeln också för en etikettattribut.
### Välja din funktionsvariabel
### Välja din feature-variabel
🎓 **Funktionsval och funktionsutvinning** Hur vet du vilken variabel du ska välja när du bygger en modell? Du kommer förmodligen att gå igenom en process av funktionsval eller funktionsutvinning för att välja rätt variabler för den mest presterande modellen. De är dock inte samma sak: "Funktionsutvinning skapar nya funktioner från funktioner av de ursprungliga funktionerna, medan funktionsval returnerar en delmängd av funktionerna." ([källa](https://wikipedia.org/wiki/Feature_selection))
🎓 **Feature selection och feature extraction** Hur vet man vilken variabel man ska välja när man bygger en modell? Du kommer troligen att gå igenom en process för feature selection eller feature extraction för att välja rätt variabler för den mest presterande modellen. De är dock inte samma sak: "Feature extraction skapar nya egenskaper från funktioner hos de ursprungliga egenskaperna, medan feature selection returnerar en delmängd av egenskaperna." ([källa](https://wikipedia.org/wiki/Feature_selection))
### Visualisera din data
En viktig aspekt av dataforskarens verktygslåda är förmågan att visualisera data med hjälp av flera utmärkta bibliotek som Seaborn eller MatPlotLib. Att representera din data visuellt kan hjälpa dig att upptäcka dolda korrelationer som du kan utnyttja. Dina visualiseringar kan också hjälpa dig att upptäcka fördomar eller obalanserad data (som vi upptäcker i [Klassificering](../../4-Classification/2-Classifiers-1/README.md)).
En viktig del i data scientistens verktygslåda är möjligheten att visualisera data med hjälp av flera utmärkta bibliotek som Seaborn eller MatPlotLib. Att representera din data visuellt kan hjälpa dig att upptäcka dolda korrelationer som du kan utnyttja. Dina visualiseringar kan också hjälpa dig att upptäcka bias eller obalanserad data (som vi upptäcker i [Klassificering](../../4-Classification/2-Classifiers-1/README.md)).
### Dela upp din dataset
Innan träning behöver du dela upp din dataset i två eller fler delar av olika storlek som fortfarande representerar datan väl.
Innan träning behöver du dela upp ditt dataset i två eller flera delar av ojämn storlek som ändå representerar datan väl.
- **Träning**. Denna del av datasetet används för att träna din modell. Denna uppsättning utgör majoriteten av den ursprungliga datasetet.
- **Testning**. En testdataset är en oberoende grupp av data, ofta hämtad från den ursprungliga datan, som du använder för att bekräfta prestandan hos den byggda modellen.
- **Validering**. En valideringsuppsättning är en mindre oberoende grupp av exempel som du använder för att justera modellens hyperparametrar eller arkitektur för att förbättra modellen. Beroende på storleken på din data och frågan du ställer kanske du inte behöver bygga denna tredje uppsättning (som vi noterar i [Tidsserieprognoser](../../7-TimeSeries/1-Introduction/README.md)).
- **Träning**. Denna del av datasetet används för att träna modellen. Detta är den största delen av originaldatasetet.
- **Testning**. Ett testdataset är en oberoende grupp data, ofta hämtad från originaldatan, som används för att bekräfta prestandan hos den byggda modellen.
- **Validering**. Ett valideringsdataset är en mindre oberoende grupp exempel som du använder för att finjustera modellens hyperparametrar, eller arkitektur, för att förbättra modellen. Beroende på din datas storlek och frågeställning kan du behöva eller inte behöva skapa denna tredje grupp (som vi noterar i [Tidsserieförutsägelse](../../7-TimeSeries/1-Introduction/README.md)).
## Bygga en modell
Med hjälp av din träningsdata är ditt mål att bygga en modell, eller en statistisk representation av din data, med hjälp av olika algoritmer för att **träna** den. Att träna en modell exponerar den för data och låter den göra antaganden om uppfattade mönster den upptäcker, validerar och accepterar eller förkastar.
Med hjälp av din träningsdata är målet att bygga en modell, eller en statistisk representation av din data, genom att använda olika algoritmer för att **träna** den. Att träna en modell innebär att exponera den för data och låta den göra antaganden om uppfattade mönster den upptäcker, validerar och accepterar eller avvisar.
### Bestäm en träningsmetod
### Välj en träningsmetod
Beroende på din fråga och datans natur kommer du att välja en metod för att träna den. Genom att gå igenom [Scikit-learns dokumentation](https://scikit-learn.org/stable/user_guide.html) - som vi använder i denna kurs - kan du utforska många sätt att träna en modell. Beroende på din erfarenhet kan du behöva prova flera olika metoder för att bygga den bästa modellen. Du kommer sannolikt att gå igenom en process där dataforskare utvärderar modellens prestanda genom att mata in data den inte har sett tidigare, kontrollera noggrannhet, fördomar och andra kvalitetsförsämrande problem, och välja den mest lämpliga träningsmetoden för den aktuella uppgiften.
Beroende på din fråga och din datas natur kommer du att välja en metod för träning. Genomgång av [Scikit-learns dokumentation](https://scikit-learn.org/stable/user_guide.html) – som vi använder i denna kurs – ger möjlighet att utforska många sätt att träna en modell. Beroende på din erfarenhet kan du behöva prova flera metoder för att bygga den bästa modellen. Du kommer sannolikt att genomgå en process där data scientists utvärderar modellens prestanda genom att mata in tidigare aldrig sedd data, kontrollera noggrannhet, bias och andra kvalitetsnedbrytande faktorer, och välja den mest lämpliga träningsmetoden för uppgiften.
### Träna en modell
Med din träningsdata redo är du redo att "anpassa" den för att skapa en modell. Du kommer att märka att i många ML-bibliotek hittar du koden 'model.fit' - det är vid denna tidpunkt som du skickar in din funktionsvariabel som en array av värden (vanligtvis 'X') och en målvariabel (vanligtvis 'y').
Med din träningsdata redo kan du 'fit'-träna modellen. Du kommer att märka att i många ML-bibliotek finns koden 'model.fit' - det är just vid detta tillfälle du skickar in din feature-variabel som en matris av värden (vanligtvis 'X') och en målvariabel (vanligtvis 'y').
### Utvärdera modellen
När träningsprocessen är klar (det kan ta många iterationer, eller "epoker", att träna en stor modell) kommer du att kunna utvärdera modellens kvalitet genom att använda testdata för att bedöma dess prestanda. Denna data är en delmängd av den ursprungliga datan som modellen inte tidigare har analyserat. Du kan skriva ut en tabell med mätvärden om modellens kvalitet.
När träningsprocessen är klar (det kan ta många iterationer, eller 'epochs', att träna en stor modell) kan du utvärdera modellens kvalitet genom att använda testdata för att mäta dess prestanda. Denna data är ett underutdrag av originaldatan som modellen tidigare inte analyserat. Du kan skriva ut en tabell med mätvärden som beskriver din modells kvalitet.
🎓 **Modellanpassning**
🎓 **Model fitting**
I maskininlärningens kontext hänvisar modellanpassning till modellens noggrannhet när den försöker analysera data som den inte är bekant med.
Inom maskininlärning avser model fitting hur noggrant modellens underliggande funktion analyserar data som den inte tidigare är bekant med.
🎓 **Underanpassning** och **överanpassning** är vanliga problem som försämrar modellens kvalitet, eftersom modellen anpassar sig antingen inte tillräckligt bra eller för bra. Detta gör att modellen gör prediktioner som antingen är för nära eller för löst kopplade till dess träningsdata. En överanpassad modell förutsäger träningsdata för bra eftersom den har lärt sig datans detaljer och brus för bra. En underanpassad modell är inte noggrann eftersom den varken kan analysera sin träningsdata eller data den inte har "sett" korrekt.
🎓 **Underfitting** och **overfitting** är vanliga problem som försämrar modellens kvalitet, då modellen passar antingen för dåligt eller för bra. Detta gör att modellen förutsäger antingen alltför strikt eller alltför löst i förhållande till sin träningsdata. En överanpassad modell förutsäger träningsdata för bra eftersom den lärt sig datadetaljer och brus alltför väl. En underanpassad modell är inte noggrann eftersom den varken kan analysera sin träningsdata korrekt eller data den inte tidigare 'sett'.
> Infografik av [Jen Looper](https://twitter.com/jenlooper)
## Justera parametrar
## Parameterjustering
När din initiala träning är klar, observera modellens kvalitet och överväg att förbättra den genom att justera dess "hyperparametrar". Läs mer om processen [i dokumentationen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
När din initiala träning är klar, observera modellens kvalitet och överväg att förbättra den genom att justera dess 'hyperparametrar'. Läs mer om processen [i dokumentationen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Prediktion
## Förutsägelse
Detta är ögonblicket då du kan använda helt ny data för att testa modellens noggrannhet. I en "tillämpad" ML-miljö, där du bygger webbapplikationer för att använda modellen i produktion, kan denna process innebära att samla in användarinmatning (till exempel ett knapptryck) för att ställa in en variabel och skicka den till modellen för inferens eller utvärdering.
Detta är ögonblicket när du kan använda helt nya data för att testa din modells noggrannhet. I en "tillämpad" ML-miljö, där du bygger webbresurser för att använda modellen i produktion, kan denna process innebära att samla in användarinput (till exempel ett knapptryck) för att sätta en variabel och skicka den till modellen för inferens, eller utvärdering.
I dessa lektioner kommer du att upptäcka hur du använder dessa steg för att förbereda, bygga, testa, utvärdera och prediktera - alla gester av en dataforskare och mer, när du utvecklas i din resa att bli en "fullstack"-ML-ingenjör.
I dessa lektioner kommer du att upptäcka hur du använder dessa steg för att förbereda, bygga, testa, utvärdera och förutsäga – alla steg i en data scientists arbete och mer, när du fortsätter din resa för att bli en "fullstack" ML-ingenjör.
---
## 🚀Utmaning
Rita ett flödesschema som reflekterar stegen för en ML-praktiker. Var befinner du dig just nu i processen? Var tror du att du kommer att stöta på svårigheter? Vad verkar enkelt för dig?
Rita ett flödesschema som speglar stegen en ML-utövare går igenom. Var ser du dig själv just nu i processen? Var tror du att du kommer att stöta på svårigheter? Vad verkar enkelt för dig?
## [Quiz efter föreläsningen](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz efter föreläsning](https://ff-quizzes.netlify.app/en/ml/)
## Granskning& Självstudier
## Repetition& Självstudier
Sök online efter intervjuer med dataforskare som diskuterar sitt dagliga arbete. Här är [en](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Sök på nätet efter intervjuer med data scientists som diskuterar sitt dagliga arbete. Här är [en](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Uppgift
[Intervjua en dataforskare](assignment.md)
[Intervjua en data scientist](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Ansvarsfriskrivning**:
Detta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, vänligen notera att automatiska översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.
Detta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, var vänlig observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning.
> ### [Denna lektion finns tillgänglig på R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Introduktion
> ### [Den här lektionen finns tillgänglig i R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Introduktion
Hittills har du utforskat vad regression är med exempeldata hämtad från pumpapriser datasetet som vi kommer att använda genom hela denna lektion. Du har också visualiserat det med hjälp av Matplotlib.
Hittills har du utforskat vad regression är med exempeldata från pumpapriser som vi kommer att använda under hela lektionen. Du har också visualiserat det med Matplotlib.
Nu är du redo att gå djupare in i regression för maskininlärning. Medan visualisering låter dig göra data begripligt, kommer den verkliga styrkan i maskininlärning från _träning av modeller_. Modeller tränas på historisk data för att automatiskt fånga databeroenden, och de låter dig förutsäga resultat för ny data som modellen inte har sett tidigare.
Nu är du redo att dyka djupare in i regression för maskininlärning. Medan visualisering låter dig förstå data, kommer den verkliga kraften i maskininlärning från _träning av modeller_. Modeller tränas på historisk data för att automatiskt fånga databas beroenden, och de låter dig förutsäga utfall för ny data som modellen inte sett tidigare.
I denna lektion kommer du att lära dig mer om två typer av regression: _grundläggande linjär regression_ och _polynomregression_, tillsammans med något av matematiken bakom dessa tekniker. Dessa modeller kommer att göra det möjligt för oss att förutsäga pumpapris beroende på olika indata.
I den här lektionen kommer du att lära dig mer om två typer av regression: _grundläggande linjär regression_ och _polynomregression_, tillsammans med en del matte som ligger bakom dessa tekniker. Dessa modeller gör det möjligt för oss att förutsäga pumpapriser beroende på olika indata.
[](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 Klicka på bilden ovan för en kort videoöversikt över linjär regression.
> 🎥 Klicka på bilden ovan för en kort videogenomgång av linjär regression.
> Genom hela detta läroplan antar vi minimala matematiska förkunskaper, och strävar efter att göra det tillgängligt för studenter från andra fält, så håll utkik efter anteckningar, 🧮 utropstecken, diagram och andra lärverktyg som hjälper till vid förståelsen.
> Genom hela detta kursmaterial antar vi minimal mattebakgrund, och vill göra det tillgängligt för studenter från andra områden, så följ med på notiser, 🧮 utskick, diagram och andra lärverktyg för att underlätta förståelsen.
### Förkunskaper
Du bör nu vara bekant med strukturen på pumpadatan som vi undersöker. Du hittar den förladdad och förrensad i detta lektions _notebook.ipynb_-fil. I filen visas pumpapriset per skålpund i en ny dataframe. Se till att du kan köra dessa notebooks i kernels i Visual Studio Code.
Du bör nu vara bekant med strukturen för pumpadata som vi undersöker. Du kan hitta den förladdad och förberedd i lektionens _notebook.ipynb_-fil. I filen visas pumpapriset per skäppa i en ny dataram. Se till att du kan köra dessa notebooks i kärnor i Visual Studio Code.
### Förberedelse
Som en påminnelse, laddar du in denna data för att kunna ställa frågor om den.
Som en påminnelse laddar du denna data för att kunna ställa frågor om den.
- När är den bästa tiden att köpa pumpor?
- Vilket pris kan jag förvänta mig för en låda miniature-pumpor?
- Ska jag köpa dem i halva skålpundskorgar eller per 1 1/9 skålpundslåda?
- När är det bästa tillfället att köpa pumpor?
- Vilket pris kan jag förvänta mig för en låda med miniatyrpumpor?
- Bör jag köpa dem i halva skäppor eller i 1 1/9 skäppors lådor?
Låt oss fortsätta gräva i denna data.
I föregående lektion skapade du en Pandas dataframe och fyllde den med en del av originaldatasetet, och standardiserade prisningen efter skålpund. Genom att göra det kunde du dock bara samla ungefär 400 datapunkter och bara för höstmånaderna.
I föregående lektion skapade du en Pandas-dataram och fyllde den med en del av den ursprungliga datasetet, där priserna standardiserades per skäppa. Genom att göra detta fick du dock bara cirka 400 datapunkter och endast för höstmånaderna.
Titta på datan som vi förladdat i denna lektions tillhörande notebook. Datan är förladdad och en initial scatterplot plottad för att visa månadens data. Kanske kan vi få lite mer detaljer om datans natur genom att rengöra den mer.
Ta en titt på data som vi förladdat i denna lektions medföljande notebook. Datat är förladdat och en initial scatterplot är ritad för att visa månadsdata. Kanske kan vi få lite mer detaljer om datats natur genom att städa det mer.
## En linjär regressionslinje
Som du lärde dig i Lektion 1 är målet med en linjär regression att kunna rita en linje som:
Som du lärde dig i Lektion 1, är målet med en linjär regressionsövning att kunna rita en linje för att:
- **Visar variabelrelationer**. Visar sambandet mellan variablerna
- **Gör förutsägelser**. Gör korrekta förutsägelser om var en ny datapunkt skulle falla i förhållande till den linjen.
Det är vanligt med **minsta kvadratmetoden (Least-Squares Regression)** att rita denna typ av linje. Begreppet "Least-Squares" hänvisar till processen att minimera den totala felet i vår modell. För varje datapunkt mäter vi det vertikala avståndet (kallat residual) mellan den verkliga punkten och vår regressionslinje.
- **Visa variabelrelationer**. Visa sambandet mellan variabler
- **Göra förutsägelser**. Göra noggranna förutsägelser om var en ny datapunkt skulle hamna i förhållande till den linjen.
Vi kvadrerar dessa avstånd av två huvudsakliga anledningar:
Det är typiskt för **minsta kvadratmetoden (Least-Squares Regression)** att dra denna typ av linje. Begreppet "Least-Squares" avser processen att minimera den totala felet i vår modell. För varje datapunkt mäter vi det vertikala avståndet (kallat residual) mellan den faktiska punkten och vår regressionslinje.
1. **Storlek över riktning:** Vi vill behandla ett fel på -5 lika som ett fel på +5. Kvadreringen gör alla värden positiva.
Vi kvadrerar dessa avstånd av två huvudsakliga skäl:
2. **Straffa avvikare:** Kvadrering ger högre vikt åt större fel, vilket tvingar linjen att hålla sig närmare punkter som ligger långt bort.
1. **Storlek över riktning:** Vi vill behandla ett fel på -5 lika som ett fel på +5. Kvadrering gör alla värden positiva.
Vi adderar sedan alla dessa kvadrerade värden tillsammans. Vårt mål är att hitta den specifika linjen där denna summa är som minst (det minsta möjliga värdet)—därav namnet "Least-Squares".
2. **Straffa avvikare:** Kvadrering ger större vikt åt större fel, vilket tvingar linjen att ligga närmare punkter som är långt bort.
> **🧮 Visa mig matematiken**
>
> Denna linje, kallad _bästa passande linje_ kan uttryckas med [en ekvation](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
Sedan lägger vi ihop alla dessa kvadrerade värden. Vårt mål är att hitta den specifika linje där denna slutgiltiga summa är som lägst (det minsta möjliga värdet)—därav namnet "minsta kvadrater".
> **🧮 Visa mig matten**
>
> Denna linje, kallad _bästa passande linje_, kan uttryckas med [en ekvation](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` är den 'förklarande variabeln'. `Y` är den 'beroende variabeln'. Lutningen av linjen är `b` och `a` är y-axelns skärningspunkt, som avser värdet på `Y` när `X = 0`.
>
>
>
> Först, räkna ut lutningen `b`. Informationsgrafik av [Jen Looper](https://twitter.com/jenlooper)
>
> Med andra ord, och med hänvisning till vår pumpadata ursprungliga fråga: "förutsäg priset på en pumpa per skålpund per månad", skulle `X` hänvisa till priset och `Y` till försäljningsmånaden.
> Beräkna värdet på Y. Om du betalar runt 4 dollar måste det vara april! Informationsgrafik av [Jen Looper](https://twitter.com/jenlooper)
>
> Matematiken som räknar fram linjen måste visa lutningen på linjen, som också beror på interceptet, eller var `Y` är placerad när `X = 0`.
>
> Du kan observera metoden för beräkning av dessa värden på webbplatsen [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Besök även [denna Least-squares-kalkylator](https://www.mathsisfun.com/data/least-squares-calculator.html) för att se hur siffrornas värden påverkar linjen.
>
> `X` är den 'förklarande variabeln'. `Y` är den 'beroende variabeln'. Lutningen av linjen är `b` och `a` är y-axelns skärningspunkt, vilket avser värdet på `Y` när `X = 0`.
>
>
>
> Börja med att beräkna lutningen `b`. Infografik av [Jen Looper](https://twitter.com/jenlooper)
>
> Med andra ord, och hämtat från vår pumpadatas ursprungliga fråga: "förutse priset på en pumpa per skäppa efter månad", skulle `X` avse priset och `Y` månad för försäljning.
>
>
>
> Beräkna värdet av Y. Om du betalar runt 4 dollar måste det vara april! Infografik av [Jen Looper](https://twitter.com/jenlooper)
>
> Den matematik som beräknar linjen måste visa lutningen på linjen, som också är beroende av skärningspunkten, eller var `Y` ligger när `X = 0`.
>
> Du kan studera metoden för beräkning av dessa värden på webbplatsen [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Besök även [denna minsta kvadratberäknare](https://www.mathsisfun.com/data/least-squares-calculator.html) för att se hur talen påverkar linjen.
## Korrelation
En term till som är viktig att förstå är **korrelationskoefficienten** mellan givna X- och Y-variabler. Med hjälp av en scatterplot kan du snabbt visualisera denna koefficient. En plot med datapunkter utspridda i en tydlig linje har hög korrelation, men en plot med datapunkter utspridda överallt mellan X och Y har låg korrelation.
En term till att förstå är **korrelationskoefficienten** mellan givna X och Y variabler. Med en spridningsdiagram kan du snabbt visualisera denna koefficient. Ett diagram med datapunkter utspridda längs en prydlig linje har hög korrelation, medan ett diagram med datapunkter utspridda överallt mellan X och Y har låg korrelation.
En bra linjär regressionsmodell är en som har hög (närmare 1 än 0) korrelationskoefficient med metoden minsta kvadrater och en regressionslinje.
En bra linjär regressionsmodell är en modell med hög (nära 1 snarare än 0) korrelationskoefficient med hjälp av metoden minsta kvadrater och en regressionslinje.
✅ Kör notebook som hör till denna lektion och titta på spridningsdiagrammet Månad till Pris. Verkar datan som kopplar Månad till Pris för pumpaförsäljning ha hög eller låg korrelation, enligt din visuella tolkning av scatterploten? Förändras det om du använder ett finare mått istället för `Month`, t.ex. *dag på året* (dvs. antal dagar sedan årets början)?
✅ Kör notebooken som hör till denna lektion och titta på spridningsdiagrammet Month till Price. Verkar datat som kopplar Månad till Pris för pumpaförsäljningen ha hög eller låg korrelation, enligt din visuella tolkning av spridningsdiagrammet? Ändras det om du använder en mer detaljerad mätning istället för `Month`, t.ex. *dag på året* (det vill säga antal dagar sedan årets början)?
I koden nedan antar vi att vi har rengjort datan och fått en dataframe kallad `new_pumpkins`, liknande följande:
I koden nedan antar vi att vi har rensat datat och fått en dataram som heter `new_pumpkins`, ungefär som följande:
ID | Månad | DagPåÅret | Sort | Stad | Förpackning | Lågt Pris | Högt Pris | Pris
> Koden för att rengöra datan finns tillgänglig i [`notebook.ipynb`](notebook.ipynb). Vi har utfört samma rengöringssteg som i föregående lektion, och har beräknat kolumnen `DayOfYear` med följande uttryck:
> Koden för att rengöra datat finns tillgänglig i [`notebook.ipynb`](notebook.ipynb). Vi har utfört samma rengöringssteg som i föregående lektion och har beräknat `DayOfYear`-kolumnen med följande uttryck:
Nu när du har förstått matten bakom linjär regression, låt oss skapa en regressionsmodell för att se om vi kan förutsäga vilken pumpapåses förpackning som har de bästa pumpapriserna. Någon som köper pumpor till ett pumpafält inför en högtid kan vilja ha denna information för att optimera sina köp av pumpapaket till fältet.
Nu när du har förstått matematiken bakom linjär regression, låt oss skapa en regressionsmodell för att se om vi kan förutsäga vilken pumpaförpackning som kommer ha de bästa pumpaprisen. Någon som köper pumpor för en höstpumpaplantering kanske vill ha denna information för att kunna optimera köp av pumpapaket till planteringen.
## Letar efter korrelation
## Leta efter korrelation
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Klicka på bilden ovan för en kort videoöversikt över korrelation.
> 🎥 Klicka på bilden ovan för en kort videogenomgång av korrelation.
Från föregående lektion har du förmodligen sett att medelpriset för olika månader ser ut så här:
<imgalt="Average price by month"src="../../../../translated_images/sv/barchart.a833ea9194346d76.webp"width="50%"/>
Det antyder att det borde finnas någon korrelation, och vi kan försöka träna en linjär regressionsmodell för att förutsäga sambandet mellan `Month` och `Price`, eller mellan `DayOfYear` och `Price`. Här är ett scatterplot som visar det senare sambandet:
Detta antyder att det borde finnas någon korrelation, och vi kan försöka träna en linjär regressionsmodell för att förutsäga sambandet mellan `Month` och `Price`, eller mellan `DayOfYear` och `Price`. Här är scatterplottet som visar det senare sambandet:
<imgalt="Scatter plot of Price vs. Day of Year"src="../../../../translated_images/sv/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
Låt oss se om det finns korrelation med funktionen`corr`:
Låt oss se om det finns en korrelation med `corr`-funktionen:
Det ser ut som att korrelationen är ganska liten, -0.15 för `Month` och -0.17 för `DayOfMonth`, men det kan finnas ett annat viktigt samband. Det ser ut som om det finns olika kluster av priser som korrelerar med olika pumpasorter. För att bekräfta denna hypotes, låt oss plotta varje pumpakategori med en annan färg. Genom att skicka en `ax` parameter till `scatter`-plotfunktion kan vi plotta alla punkter på samma graf:
Det verkar som att korrelationen är ganska liten, -0,15 för `Month` och -0,17 för `DayOfYear`, men det kan finnas ett annat viktigt samband. Det verkar som det finns olika kluster av priser som motsvarar olika pumpasorter. För att bekräfta denna hypotes, låt oss rita varje pumpkategori med en annan färg. Genom att skicka med en `ax`-parameter till `scatter`-plotfunktionen kan vi rita alla punkter i samma diagram:
```python
ax=None
@ -139,18 +139,18 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="Scatter plot of Price vs. Day of Year"src="../../../../translated_images/sv/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
Om vi nu beräknar korrelationen mellan `Price` och `DayOfYear` med `corr`-funktionen, får vi ungefär `-0.27`– vilket betyder att det är meningsfullt att träna en prediktiv modell.
Om vi nu beräknar korrelationen mellan `Price` och `DayOfYear` med `corr`-funktionen får vi något som `-0.27`– vilket innebär att det är meningsfullt att träna en prediktiv modell.
> Innan du tränar en linjär regressionsmodell är det viktigt att säkerställa att vår data är ren. Linjär regression fungerar inte bra med saknade värden, så det är vettigt att ta bort alla tomma celler:
> Innan vi tränar en linjär regressionsmodell är det viktigt att se till att vårt data är rent. Linjär regression fungerar inte bra med saknade värden, så det är vettigt att ta bort alla tomma celler:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Ett annat tillvägagångssätt kan vara att fylla dessa tomma värden med medelvärden från motsvarande kolumn.
Ett annat alternativär att fylla dessa tomma värden med medelvärden från den motsvarande kolumnen.
## Enkel linjär regression
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 Klicka på bilden ovan för en kort videoöversikt över linjär och polynomregression.
> 🎥 Klicka på bilden ovan för en kort videogenomgång av linjär och polynomregression.
För att träna vår linjära regressionsmodell kommer vi att använda **Scikit-learn**-biblioteket.
För att träna vår linjära regressionsmodell använder vi biblioteket **Scikit-learn**.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Vi börjar med att separera indata (funktioner) och det förväntade resultatet (etikett) i separata numpy-arrayer:
Vi börjar med att separera ingångsvärden (egenskaper) och den förväntade utdata (etikett) i separata numpy-arrayer:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Observera att vi var tvungna att göra en `reshape` på indata för att linjär regressionspaketet ska förstå den korrekt. Linjär regression förväntar sig ett 2D-array som indata, där varje rad motsvarar en vektor av ingångsegenskaper. I vårt fall, eftersom vi bara har en ingång, behöver vi en array med formen N×1, där N är datasetets storlek.
> Observera att vi var tvungna att använda `reshape` på indata för att linjär regressionspaketet ska förstå det korrekt. Linjär regression förväntar sig en 2D-array som indata, där varje rad i arrayen motsvarar en vektor av indatafunktioner. I vårt fall, eftersom vi bara har en indata, behöver vi en array med formen N×1, där N är datasetets storlek.
Därefter behöver vi dela data i tränings- och testdataset, så att vi kan validera vår modell efter träning:
Sedan måste vi dela upp datat i tränings- och testdataset för att kunna validera vår modell efter träning:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Slutligen tar själva träningen av den linjära regressionsmodellen bara två kodrader. Vi definierar `LinearRegression`-objektet och anpassar det till vår data med metoden `fit`:
Slutligen tar själva träningsdelen av linjär regressionsmodell bara två kodrader. Vi definierar ett `LinearRegression`-objekt och anpassar det till vår data med `fit`-metoden:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`LinearRegression`-objektet efter att ha `fit`ats innehåller alla regressionskoefficienter, som kan nås med `.coef_`-egenskapen. I vårt fall finns det bara en koefficient, som bör vara runt `-0.017`. Det betyder att priserna verkar sjunka lite med tiden, men inte för mycket, cirka 2 cent per dag. Vi kan också nå regressionsens skärningspunkt med Y-axeln med `lin_reg.intercept_` - den kommer att vara runt `21` i vårt fall, vilket indikerar priset i början av året.
Objektet `LinearRegression` efter att ha blivit `fit`-tat innehåller alla koefficienter för regressionen, vilka kan nås med egenskapen `.coef_`. I vårt fall finns det bara en koefficient, som borde vara runt `-0.017`. Det betyder att priser verkar sjunka lite med tiden, men inte för mycket, ungefär 2 cent per dag. Vi kan också nå skärningspunkten för regressionen med Y-axeln med `lin_reg.intercept_` - den kommer att vara runt `21` i vårt fall, vilket indikerar priset i början av året.
För att se hur exakt vår modell är kan vi förutsäga priser på en testdatamängd och sedan mäta hur nära våra förutsägelser är de förväntade värdena. Detta kan göras med metrik som rotmedelkvadratfel (RMSE), som är roten ur medelvärdet av alla kvadrerade skillnader mellan förväntat och förutspått värde.
För att se hur noggrann vår modell är kan vi förutsäga priser på en testdatasats och sedan mäta hur nära våra förutsägelser är de förväntade värdena. Detta kan göras med root mean square error (RMSE) metriken, vilket är roten ur medelvärdet av alla kvadrerade skillnader mellan förväntat och förutspått värde.
Vårt fel verkar vara runt 2 poäng, vilket är ~17%. Inte så bra. En annan indikator på modellens kvalitet är **bestämningskoefficienten**, som kan erhållas så här:
Vårt fel verkar ligga runt 2 poäng, vilket är ~17%. Inte så bra. En annan indikator på modellkvalitet är **bestämningskoefficienten**, som kan fås så här:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Om värdet är 0 betyder det att modellen inte tar hänsyn till indata och agerar som den *sämsta linjära förutsägaren*, vilket helt enkelt är ett medelvärde av resultatet. Värdet 1 innebär att vi perfekt kan förutsäga alla förväntade utdata. I vårt fall är koefficienten runt 0,06, vilket är ganska lågt.
Om värdet är 0 betyder det att modellen inte tar hänsyn till indata och agerar som den *sämsta linjära prediktorn*, vilket helt enkelt är medelvärdet av resultatet. Värdet 1 betyder att vi kan perfekt förutsäga alla förväntade utgångar. I vårt fall är koefficienten runt 0.06, vilket är ganska lågt.
Vi kan också plotta testdata tillsammans med regressionslinjen för att bättre se hur regression fungerar i vårt fall:
En annan typ av linjär regression är polynomregression. Ibland finns det ett linjärt samband mellan variabler – ju större pumpa i volym, desto högre pris – men ibland kan dessa samband inte avbildas som ett plan eller en rät linje.
En annan typ av linjär regression är polynomregression. Även om det ibland finns ett linjärt samband mellan variabler - ju större pumpa i volym, desto högre pris - kan dessa samband ibland inte plottas som ett plan eller en rät linje.
✅ Här är [några fler exempel](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data som kan dra nytta av polynomregression
✅ Här är [några fler exempel](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data som kan använda polynomregression
Titta igen på sambandet mellan datum och pris. Verkar denna scatterplot nödvändigtvis behöva analyseras med en rak linje? Kan inte priserna variera? I sådana fall kan du testa polynomregression.
Ta en närmare titt på sambandet mellan Datum och Pris. Verkar denna spridningsdiagram nödvändigtvis måste analyseras med en rak linje? Kan inte priserna fluktuera? I detta fall kan du prova polynomregression.
✅ Polynom är matematiska uttryck som kan bestå av en eller flera variabler och koefficienter
Polynomregression skapar en kurvad linje för att bättre passa icke-linjära data. I vårt fall, om vi inkluderar en kvadrerad `DayOfYear`-variabel i indata, borde vi kunna anpassa vår data med en parabolisk kurva som har ett minimum vid en viss punkt under året.
Polynomregression skapar en böjd linje för att bättre anpassa icke-linjära data. I vårt fall, om vi inkluderar en kvadrerad `DayOfYear`-variabel i indata, borde vi kunna anpassa våra data med en parabolisk kurva, som kommer ha ett minimum vid en viss punkt under året.
Scikit-learn innehåller ett användbart [pipeline-API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) för att kombinera olika steg för databehandling. En **pipeline** är en kedja av **estimators**. I vårt fall skapar vi en pipeline som först lägger till polynomegenskaper till vår modell och sedan tränar regressionen:
Scikit-learn inkluderar en hjälpsam [pipeline-API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) för att kombinera olika steg i databehandlingen. En **pipeline** är en kedja av **estimators**. I vårt fall skapar vi en pipeline som först lägger till polynomegenskaper i vår modell och sedan tränar regressionen:
```python
from sklearn.preprocessing import PolynomialFeatures
Att använda `PolynomialFeatures(2)` innebär att vi tar med alla andragradspolynom från indata. I vårt fall kommer det bara innebära `DayOfYear`<sup>2</sup>, men med två indata X och Y skulle detta lägga till X<sup>2</sup>, XY och Y<sup>2</sup>. Man kan även använda polynom med högre grad om man vill.
Att använda `PolynomialFeatures(2)` betyder att vi kommer att inkludera alla andra gradens polynom från indatan. I vårt fall betyder det bara `DayOfYear`<sup>2</sup>, men givet två indatavariabler X och Y, lägger detta till X<sup>2</sup>, XY och Y<sup>2</sup>. Vi kan också använda polynom av högre grad om vi vill.
Pipelines kan användas på samma sätt som det ursprungliga `LinearRegression`-objektet, dvs vi kan `fit` pipelinen och sedan använda `predict` för att få prediktionsresultaten:
För att plotta den jämna approximationskurvan använder vi `np.linspace` för att skapa ett jämnt intervall av indata, i stället för att plotta direkt på den oordnade testdatan (vilket skulle ge en zick-zack-linje):
Pipelines kan användas på samma sätt som det ursprungliga `LinearRegression`-objektet, dvs. vi kan `fit`a pipelinen och sedan använda `predict` för att få förutsägelserna. Här är grafen som visar testdata och approximationskurvan:
Här är grafen som visar testdata och approximationskurvan:
Med polynomregression kan vi få något lägre MSE och högre bestämning, men inte signifikant. Vi behöver ta hänsyn till fler funktioner!
Med polynomregression kan vi få något lägre RMSE och högre bestämning, men inte signifikant. Vi behöver ta hänsyn till fler egenskaper!
> Du kan se att de lägsta pumpapriserna observeras någonstans runt Halloween. Hur kan du förklara detta?
🎃 Grattis, du skapade just en modell som kan hjälpa till att förutsäga priset på pajpumpor. Du kan förmodligen upprepa samma procedur för alla pumpatyper, men det skulle vara tråkigt. Låt oss nu lära oss hur vi tar pumpasort i beaktande i vår modell!
🎃 Grattis, du har just skapat en modell som kan hjälpa till att förutsäga priset på pajpumpor. Du kan förmodligen göra samma procedur för alla typer av pumpor, men det skulle vara tråkigt. Låt oss nu lära oss hur vi kan ta pumpa-sort i beaktande i vår modell!
## Kategoriska Funktioner
## Kategoriska egenskaper
I en ideal värld vill vi kunna förutsäga priser för olika pumpasorter med samma modell. Men kolumnen `Variety` skiljer sig något från kolumner som `Month`, eftersom den innehåller icke-numeriska värden. Sådana kolumner kallas **kategoriska**.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 Klicka på bilden ovan för en kort videoöversikt om användning av kategoriska funktioner.
> 🎥 Klicka på bilden ovan för en kort videoöversikt om att använda kategoriska egenskaper.
Här kan du se hur medelpriset beror på sort:
Här kan du se hur genomsnittspriset beror på sorten:
<imgalt="Average price by variety"src="../../../../translated_images/sv/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
För att ta hänsyn till sort behöver vi först konvertera den till numerisk form, eller **koda** den. Det finns flera sätt att göra det:
För att ta hänsyn till sorten behöver vi först konvertera den till numerisk form, eller **koda** den. Det finns flera sätt att göra detta:
* Enkel **numerisk kodning**bygger en tabell med olika sorter och ersätter sedan sortnamnet med ett index i tabellen. Detta är inte bästa metoden för linjär regression, för linjär regression tar det faktiska numeriska värdet på indexet och lägger till det i resultatet, multiplicerat med en koefficient. I vårt fall är sambandet mellan indexnummer och pris tydligt icke-linjärt, även om vi ser till att indexen är ordnade på ett specifikt sätt.
* **One-hot-kodning** ersätter `Variety`-kolumnen med 4 olika kolumner, en för varje sort. Varje kolumn innehåller `1` om motsvarande rad är av den givna sorten och `0` annars. Det innebär att det kommer finnas fyra koefficienter i linjär regression, en för varje pumpasort, ansvariga för "startpris" (eller snarare "tilläggspris") för just den sorten.
* Enkel **numerisk kodning**skapar en tabell över olika sorter och ersätter sedan sortnamnet med ett index i den tabellen. Detta är inte bästa metoden för linjär regression eftersom linjär regression tar det faktiska numeriska värdet på indexet och lägger till det i resultatet multiplicerat med någon koefficient. I vårt fall är sambandet mellan indexnummer och pris tydligt icke-linjärt, även om vi ser till att indexen är ordnade på något specifikt sätt.
* **One-hot encoding** ersätter `Variety`kolumnen med 4 olika kolumner, en för varje sort. Varje kolumn innehåller `1` om motsvarande rad är av en viss sort, och `0` annars. Detta innebär att det finns fyra koefficienter i linjär regression, en för varje pumpasort, som ansvarar för "startpris" (eller snarare "tilläggspris") för just den sorten.
Koden nedan visar hur vi kan one-hot-koda en sort:
För att träna linjär regression med one-hot-kodad sort som indata behöver vi bara initiera `X` och `y` korrekt:
För att träna linjär regression med one-hotkodad sort som indata behöver vi bara initiera `X` och `y` korrekt:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Resten av koden är densamma som vi använde tidigare för att träna linjär regression. Om du provar kommer du se att medelkvadratfelet är ungefär detsamma, men bestämningskoefficienten är mycket högre (~77%). För att få ännu mer exakta förutsägelser kan vi ta fler kategoriska funktioner i beaktande, samt numeriska funktioner som `Month` eller `DayOfYear`. För att få en stor matris med funktioner kan vi använda `join`:
Resten av koden är densamma som vi använde ovan för att träna linjär regression. Om du provar detta kommer du se att medelkvadratfelet är ungefär detsamma, men vi får en mycket högre bestämningskoefficient (~77%). För att få ännu mer noggranna förutsägelser kan vi ta hänsyn till fler kategoriska egenskaper samt numeriska egenskaper, som `Month` eller `DayOfYear`. För att få en stor matris av egenskaper kan vi använda `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,21 +341,21 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Här tar vi också med `City` och typ av `Package`, vilket ger oss MSE 2.84 (10%) och bestämning 0.94!
Här tar vi dessutom hänsyn till `City` och `Package`-typ, vilket ger oss RMSE 2.84 (10.5%) och bestämning 0.94!
## Sammanfoga allt
## Att sätta ihop allt
För att göra bästa modell kan vi använda kombinerad (one-hot-kodad kategorisk + numerisk) data från ovanstående exempel tillsammans med polynomregression. Här är den kompletta koden för din bekvämlighet:
För att göra den bästa modellen kan vi använda kombinerad (one-hot kodad kategorisk + numerisk) data från exemplet ovan tillsammans med polynomregression. Här är den kompletta koden för din bekvämlighet:
```python
# ställ in träningsdata
# förbered träningsdata
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# gör tåg-test delning
# gör träningstestuppdelning
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
Detta bör ge oss bästa bestämningskoefficient på nästan 97%, och MSE=2.23 (~8% förutsägelsefel).
Detta borde ge oss den bästa bestämningskoefficienten på nästan 97% och RMSE=2.23 (~8% fel i förutsägelsen).
| Modell | MSE | Bestämning |
|-------|-----|-------------|
| Modell | RMSE | Bestämning |
|-------|-----|---------------|
| `DayOfYear` Linjär | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynom | 2.73 (17.0%) | 0.08 |
| `Variety` Linjär | 5.24 (19.7%) | 0.77 |
| Alla funktioner Linjär | 2.84 (10.5%) | 0.94 |
| Alla funktioner Polynom | 2.23 (8.25%) | 0.97 |
| Alla egenskaper Linjär | 2.84 (10.5%) | 0.94 |
| Alla egenskaper Polynom | 2.23 (8.25%) | 0.97 |
🏆 Bra jobbat! Du skapade fyra regressionsmodeller i en lektion och förbättrade modellens kvalitet till 97%. I den sista delen om regression kommer du lära dig om logistisk regression för att bestämma kategorier.
🏆 Bra jobbat! Du skapade fyra regressionsmodeller i en lektion och förbättrade modellkvaliteten till 97%. I den sista delen om regression kommer du att lära dig om logistisk regression för att bestämma kategorier.
---
## 🚀Utmaning
Testa flera olika variabler i denna notebook för att se hur korrelation korrelerar med modellens noggrannhet.
Testa flera olika variabler i denna anteckningsbok för att se hur korrelationen motsvarar modellegenskaper.
## [Quiz efter föreläsningen](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/)
## Granskning& Självstudier
## Översikt& Självstudier
I denna lektion lärde vi oss om linjär regression. Det finns andra viktiga typer av regression. Läs om Stepwise, Ridge, Lasso och Elasticnet-tekniker. En bra kurs att studera för att lära sig mer är [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
I denna lektion lärde vi oss om linjär regression. Det finns andra viktiga typer av regression. Läs om Stepwise, Ridge, Lasso och Elasticnet tekniker. En bra kurs för vidare studier är [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Uppgift
## Uppgift
[Bygg en modell](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Ansvarsfriskrivning**:
Detta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, var vänlig observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör anses vara den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår från användningen av denna översättning.
**Ansvarsfriskrivning**:
Detta dokument har översatts med AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, var vänlig observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår vid användning av denna översättning.
"## Linjär och Polynomisk Regression för Pumpapris - Lektion 3\n",
"## Linjär och polynomregression för pumpaprisättning - Lektion 3\n",
"\n",
"Ladda in nödvändiga bibliotek och dataset. Konvertera data till en dataram som innehåller ett urval av data:\n",
"Ladda nödvändiga bibliotek och dataset. Konvertera datan till en dataframe som innehåller ett delmängd av datan:\n",
"\n",
"- Ta endast med pumpor som är prissatta per skäppa\n",
"- Konvertera datumet till en månad\n",
"- Beräkna priset som ett genomsnitt av högsta och lägsta priser\n",
"- Konvertera priset för att återspegla prissättningen per skäppmängd\n"
"- Ta endast pumpor prissatta per skäpp\n",
"- Konvertera datum till en månad\n",
"- Beräkna priset som ett genomsnitt av höga och låga priser\n",
"- Konvertera priset för att spegla prissättning per mängden skäpp\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Låt oss se om det finns någon korrelation:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Det verkar som att korrelationen är ganska liten, men det finns någon annan viktigare relation - eftersom prisnivåerna i diagrammet ovan verkar ha flera distinkta kluster. Låt oss skapa ett diagram som visar olika pumpasorter:\n"
"Det ser ut som korrelationen är ganska liten, men det finns någon annan mer viktig relation - eftersom prisnivåerna i diagrammet ovan verkar ha flera distinkta kluster. Låt oss göra ett diagram som visar olika pumpasorter:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"För tillfället, låt oss koncentrera oss endast på en sort - **pajtyp**.\n"
]
},
{
"cell_type": "code",
@ -662,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Linjens lutning kan bestämmas från linjär regressionskoefficienter:\n"
"Lutningen på linjen kan bestämmas från koefficienterna i linjär regression:\n"
]
},
{
@ -689,7 +693,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Vi kan använda den tränade modellen för att förutsäga pris:\n"
"Vi kan använda den tränade modellen för att förutsäga priset:\n"
]
},
{
@ -720,9 +724,9 @@
"source": [
"### Polynomregression\n",
"\n",
"Ibland är förhållandet mellan funktioner och resultatet i grunden icke-linjärt. Till exempel kan pumpapriser vara höga på vintern (månader=1,2), sedan sjunka under sommaren (månader=5-7) och sedan stiga igen. Linjär regression kan inte fånga detta förhållande korrekt.\n",
"Ibland är sambandet mellan egenskaper och resultat inneboende icke-linjärt. Till exempel kan pumpapriser vara höga på vintern (månader=1,2), sedan sjunka över sommaren (månader=5-7), och sedan stiga igen. Linjär regression kan inte hitta detta samband med precision.\n",
"\n",
"I sådana fall kan vi överväga att lägga till extra funktioner. Ett enkelt sätt är att använda polynom från indatafunktionerna, vilket resulterar i **polynomregression**. I Scikit Learn kan vi automatiskt förberäkna polynomfunktioner med hjälp av pipelines:\n"
"I detta fall kan vi överväga att lägga till extra egenskaper. Ett enkelt sätt är att använda polynom från indataegenskaper, vilket skulle resultera i **polynomregression**. I Scikit Learn kan vi automatiskt förberäkna polynomegenskaper med pipelines: \n"
"I en idealisk värld vill vi kunna förutsäga priser för olika pumpasorter med samma modell. För att ta hänsyn till sorten måste vi först konvertera den till numerisk form, eller **koda**. Det finns flera sätt att göra detta:\n",
"I den ideala världen vill vi kunna förutsäga priser för olika pumpasorter med samma modell. För att ta hänsyn till sort behöver vi först omvandla den till numerisk form, eller **koda** den. Det finns flera sätt att göra det på:\n",
"\n",
"* Enkel numerisk kodning som skapar en tabell över olika sorter och sedan ersätter sortnamnet med ett index i den tabellen. Detta är inte den bästa idén för linjär regression, eftersom linjär regression tar hänsyn till det numeriska värdet av indexet, och det numeriska värdet sannolikt inte korrelerar numeriskt med priset.\n",
"* One-hot-kodning, som ersätter `Variety`-kolumnen med 4 olika kolumner, en för varje sort, som innehåller 1 om den motsvarande raden är av en viss sort, och 0 annars.\n",
"* Enkel numerisk kodning som bygger en tabell över olika sorter, och sedan ersätter sortnamnet med ett index i den tabellen. Detta är inte den bästa idén för linjär regression, eftersom linjär regression tar hänsyn till indexets numeriska värde, och det numeriska värdet sannolikt inte korrelerar numeriskt med priset.\n",
"* One-hot-kodning, som ersätter kolumnen `Variety` med 4 olika kolumner, en för varje sort, som innehåller 1 om motsvarande rad är av given sort, och 0 annars.\n",
"\n",
"Koden nedan visar hur vi kan one-hot-koda en sort:\n"
]
@ -940,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Linjär regression på sort\n",
"### Linjär regression på sort\n",
"\n",
"Vi kommer nu att använda samma kod som ovan, men istället för `DayOfYear` kommer vi att använda vår one-hot-kodade sort som indata:\n"
"Vi kommer nu att använda samma kod som ovan, men istället för `DayOfYear` kommer vi att använda vår one-hot-kodade sort som input:\n"
]
},
{
@ -1023,7 +1030,7 @@
"source": [
"### Polynomregression\n",
"\n",
"Polynomregression kan också användas med kategoriska funktioner som är one-hot-kodade. Koden för att träna polynomregression skulle i princip vara densamma som vi har sett ovan.\n"
"Polynomregression kan också användas med kategoriska funktioner som är one-hot-kodade. Koden för att träna polynomregression skulle i huvudsak vara densamma som vi har sett ovan.\n"
]
},
{
@ -1070,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Ansvarsfriskrivning**: \nDetta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, vänligen notera att automatiska översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på sitt originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Ansvarsfriskrivning**:\nDetta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, var god observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
[](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
✅ [สไลด์นี้](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) เกี่ยวกับโมเดลสภาพอากาศให้มุมมองทางประวัติศาสตร์เกี่ยวกับการใช้ ML ในการวิเคราะห์สภาพอากาศ
✅ [สไลด์การบรรยาย](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) เกี่ยวกับโมเดลสภาพอากาศ นำเสนอแง่มุมประวัติศาสตร์ในการใช้ ML วิเคราะห์สภาพอากาศ
[](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> คุณสามารถดูวิธีการคำนวณค่าพวกนี้ได้ที่เว็บ [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) และเข้าใช้ [เครื่องคิดเลข Least-squares](https://www.mathsisfun.com/data/least-squares-calculator.html) เพื่อดูว่าค่าตัวเลขต่างๆ ส่งผลต่อเส้นอย่างไร
## ความสัมพันธ์ (Correlation)
อีกคำหนึ่งที่ต้องเข้าใจคือ **สัมประสิทธิ์สหสัมพันธ์ (Correlation Coefficient)** ระหว่างตัวแปร X และ Y ที่กำหนด ด้วยการใช้กราฟกระจาย คุณจะมองเห็นค่าสัมประสิทธิ์นี้อย่างรวดเร็ว กราฟที่มีจุดกระจายในเส้นตรงเรียงตัวกันอย่างดีจะมีค่าสหสัมพันธ์สูง แต่กราฟที่จุดกระจายกระจัดกระจายไม่เป็นระเบียบระหว่าง X และ Y จะมีค่าสหสัมพันธ์ต่ำ
อีกคำหนึ่งที่ควรทำความเข้าใจคือ **สัมประสิทธิ์สหสัมพันธ์ (Correlation Coefficient)** ระหว่างตัวแปร X และ Y ที่กำหนด โดยการใช้กราฟกระจาย (scatterplot) คุณสามารถเห็นค่าค่าสหสัมพันธ์นี้ได้อย่างรวดเร็ว กราฟที่จุดข้อมูลกระจายตัวอยู่ตามเส้นตรงอย่างสม่ำเสมอจะมีค่าสหสัมพันธ์สูง แต่กราฟที่จุดข้อมูลกระจัดกระจายทั่วทั้งแกน X และ Y จะมีค่าสหสัมพันธ์ต่ำ
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")