chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)

update-translations
localizeflow[bot] 1 week ago
parent ec25fb32a8
commit 6790ef5b2f

@ -36,8 +36,8 @@
"language_code": "el"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T00:27:54+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T20:19:07+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "el"
},
@ -90,8 +90,8 @@
"language_code": "el"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T18:12:29+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:18:24+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "el"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "el"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T20:16:11+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "el"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-04T23:31:10+00:00",

@ -1,101 +1,125 @@
# Τεχνικές Μηχανικής Μάθησης
# Τεχνικές της Μηχανικής Μάθησης
Η διαδικασία δημιουργίας, χρήσης και συντήρησης μοντέλων μηχανικής μάθησης και των δεδομένων που χρησιμοποιούν είναι πολύ διαφορετική από πολλές άλλες ροές εργασίας ανάπτυξης. Σε αυτό το μάθημα, θα απομυθοποιήσουμε τη διαδικασία και θα περιγράψουμε τις βασικές τεχνικές που πρέπει να γνωρίζετε. Θα:
Η διαδικασία δημιουργίας, χρήσης και συντήρησης μοντέλων μηχανικής μάθησης και των δεδομένων που χρησιμοποιούν είναι μια διαδικασία πολύ διαφορετική από πολλές άλλες ροές εργασίας ανάπτυξης. Σε αυτό το μάθημα, θα απομυθοποιήσουμε τη διαδικασία και θα περιγράψουμε τις βασικές τεχνικές που πρέπει να γνωρίζετε. Εσείς θα:
- Κατανοήσετε τις διαδικασίες που υποστηρίζουν τη μηχανική μάθηση σε υψηλό επίπεδο.
- Εξερευνήσετε βασικές έννοιες όπως "μοντέλα", "προβλέψεις" και "δεδομένα εκπαίδευσης".
- Κατανοήσετε τις διαδικασίες που στηρίζουν τη μηχανική μάθηση σε υψηλό επίπεδο.
- Εξερευνήσετε βασικές έννοιες όπως 'μοντέλα', 'προβλέψεις' και 'δεδομένα εκπαίδευσης'.
## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/)
[![ML για αρχάριους - Τεχνικές Μηχανικής Μάθησης](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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' για την εκπαίδευση ενός μεγάλου μοντέλου), θα είστε σε θέση να αξιολογήσετε την ποιότητα του μοντέλου χρησιμοποιώντας δεδομένα δοκιμής για να μετρήσετε τις επιδόσεις του. Αυτά τα δεδομένα είναι ένα υποσύνολο των αρχικών που το μοντέλο δεν έχει αναλύσει προηγουμένως. Μπορείτε να εκτυπώσετε έναν πίνακα με στατιστικά για την ποιότητα του μοντέλου σας.
🎓 **Προσαρμογή μοντέλου**
Στο πλαίσιο της μηχανικής μάθησης, η προσαρμογή μοντέλου αναφέρεται στην ακρίβεια της υποκείμενης λειτουργίας του μοντέλου καθώς προσπαθεί να αναλύσει δεδομένα με τα οποία δεν είναι εξοικειωμένο.
Στο πλαίσιο της μηχανικής μάθησης, η προσαρμογή μοντέλου αναφέρεται στην ακρίβεια της υποκείμενης συνάρτησης του μοντέλου καθώς επιχειρεί να αναλύσει δεδομένα με τα οποία δεν είναι εξοικειωμένο.
🎓 **Υποπροσαρμογή** και **υπερπροσαρμογή** είναι κοινά προβλήματα που υποβαθμίζουν την ποιότητα του μοντέλου, καθώς το μοντέλο προσαρμόζεται είτε όχι αρκετά καλά είτε υπερβολικά καλά. Αυτό προκαλεί το μοντέλο να κάνει προβλέψεις είτε πολύ στενά ευθυγραμμισμένες είτε πολύ χαλαρά ευθυγραμμισμένες με τα δεδομένα εκπαίδευσης του. Ένα υπερπροσαρμοσμένο μοντέλο προβλέπει τα δεδομένα εκπαίδευσης πολύ καλά επειδή έχει μάθει τις λεπτομέρειες και τον θόρυβο των δεδομένων υπερβολικά καλά. Ένα υποπροσαρμοσμένο μοντέλο δεν είναι ακριβές καθώς δεν μπορεί να αναλύσει με ακρίβεια ούτε τα δεδομένα εκπαίδευσης ούτε τα δεδομένα που δεν έχει "δει".
🎓 Τα **υποπροσαρμοσμένα** και **υπερπροσαρμοσμένα** μοντέλα είναι συνηθισμένα προβλήματα που υποβαθμίζουν την ποιότητα του μοντέλου, καθώς το μοντέλο προσαρμόζεται είτε όχι αρκετά καλά είτε υπερβολικά καλά. Αυτό προκαλεί στο μοντέλο να κάνει προβλέψεις που είναι είτε πολύ στενά είτε πολύ χαλαρά ευθυγραμμισμένες με τα δεδομένα εκπαίδευσης. Ένα υπερπροσαρμοσμένο μοντέλο προβλέπει πολύ καλά τα δεδομένα εκπαίδευσης επειδή έχει μάθει πολύ καλά τις λεπτομέρειες και τον θόρυβο των δεδομένων. Ένα υποπροσαρμοσμένο μοντέλο δεν είναι ακριβές αφού δεν μπορεί ούτε να αναλύσει με ακρίβεια τα δεδομένα εκπαίδευσης ούτε τα δεδομένα που δεν έχει δει ακόμα.
![υπερπροσαρμοσμένο μοντέλο](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
> Γραφικό από [Jen Looper](https://twitter.com/jenlooper)
![μοντέλο υπερπροσαρμογής](../../../../translated_images/el/overfitting.1c132d92bfd93cb6.webp)
> Γραφικό από την [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). Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το αρχικό έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αξιόπιστη πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,136 +1,136 @@
# Δημιουργία μοντέλου παλινδρόμησης χρησιμοποιώντας το Scikit-learn: παλινδρόμηση με τέσσερις τρόπους
# Κατασκευή μοντέλου παλινδρόμησης με χρήση Scikit-learn: τέσσερις τρόποι παλινδρόμησης
## Σημείωση για αρχάριους
Η γραμμική παλινδρόμηση χρησιμοποιείται όταν θέλουμε να προβλέψουμε μια **αριθμητική τιμή** (για παράδειγμα, την τιμή ενός σπιτιού, τη θερμοκρασία ή τις πωλήσεις).
Λειτουργεί βρίσκοντας μια ευθεία γραμμή που αντιπροσωπεύει καλύτερα τη σχέση μεταξύ των εισροών και της εξόδου.
Η γραμμική παλινδρόμηση χρησιμοποιείται όταν θέλουμε να προβλέψουμε μια **ποσοτική τιμή** (για παράδειγμα, τιμή σπιτιού, θερμοκρασία ή πωλήσεις).
Λειτουργεί βρίσκοντας μια ευθεία γραμμή που αναπαριστά καλύτερα τη σχέση μεταξύ των εισαγόμενων χαρακτηριστικών και της εξόδου.
Σε αυτό το μάθημα, εστιάζουμε στην κατανόηση της έννοιας πριν εξερευνήσουμε πιο προχωρημένες τεχνικές παλινδρόμησης.
![Γραμμική έναντι πολυωνυμικής παλινδρόμησης infographic](../../../../translated_images/el/linear-polynomial.5523c7cb6576ccab.webp)
> Infographic από [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Προ-μαθηματικό κουίζ](https://ff-quizzes.netlify.app/en/ml/)
![Linear vs polynomial regression infographic](../../../../translated_images/el/linear-polynomial.5523c7cb6576ccab.webp)
> Infographic από τον/την [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Προ-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ml/)
> ### [Αυτό το μάθημα είναι διαθέσιμο και σε R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Εισαγωγή
### Εισαγωγή
Μέχρι τώρα έχετε εξερευνήσει τι είναι η παλινδρόμηση με δείγματα δεδομένων που συλλέχθηκαν από το σύνολο δεδομένων τιμών κολοκύθας που θα χρησιμοποιήσουμε σε όλο αυτό το μάθημα. Έχετε επίσης το οπτικοποιήσει χρησιμοποιώντας το Matplotlib.
Μέχρι στιγμής έχετε εξερευνήσει τι είναι η παλινδρόμηση με δείγμα δεδομένων από το σύνολο δεδομένων τιμών κολοκύθας που θα χρησιμοποιήσουμε σε όλο το μάθημα. Επίσης, το έχετε απεικονίσει χρησιμοποιώντας τη Matplotlib.
Τώρα είστε έτοιμοι να εμβαθύνετε στην παλινδρόμηση για Μηχανική Μάθηση. Ενώ η οπτικοποίηση σας επιτρέπει να κατανοήσετε τα δεδομένα, η πραγματική δύναμη της Μηχανικής Μάθησης προέρχεται από _την εκπαίδευση μοντέλων_. Τα μοντέλα εκπαιδεύονται σε ιστορικά δεδομένα για να συλλάβουν αυτόματα τις εξαρτήσεις των δεδομένων και σας επιτρέπουν να προβλέπετε αποτελέσματα για νέα δεδομένα που το μοντέλο δεν έχει ξαναδεί.
Τώρα είστε έτοιμοι να εμβαθύνετε στην παλινδρόμηση για Μηχανική Μάθηση. Ενώ η οπτικοποίηση σας επιτρέπει να κατανοήσετε τα δεδομένα, η πραγματική δύναμη της Μηχανικής Μάθησης προέρχεται από την _εκπαίδευση μοντέλων_. Τα μοντέλα εκπαιδεύονται σε ιστορικά δεδομένα για να συλλάβουν αυτόματα τις εξαρτήσεις δεδομένων, και σας επιτρέπουν να προβλέπετε αποτελέσματα για νέα δεδομένα, που το μοντέλο δεν έχει δει ποτέ πριν.
Σε αυτό το μάθημα, θα μάθετε περισσότερα για δύο τύπους παλινδρόμησης: ασική γραμμική παλινδρόμηση_ και ολυωνυμική παλινδρόμηση_, μαζί με κάποια από τα μαθηματικά που υποστηρίζουν αυτές τις τεχνικές. Αυτά τα μοντέλα θα μας επιτρέψουν να προβλέψουμε τις τιμές της κολοκύθας ανάλογα με διάφορα εισερχόμενα δεδομένα.
Σε αυτό το μάθημα, θα μάθετε περισσότερα για δύο τύπους παλινδρόμησης: ασική γραμμική παλινδρόμηση_ και ολυωνυμική παλινδρόμηση_, μαζί με μερικά από τα μαθηματικά που βασίζουν αυτές τις τεχνικές. Αυτά τα μοντέλα θα μας επιτρέψουν να προβλέψουμε τις τιμές της κολοκύθας ανάλογα με διαφορετικά εισαγόμενα δεδομένα.
[![Μηχανική Μάθηση για αρχάριους - Κατανόηση της γραμμικής παλινδρόμησης](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "Μηχανική Μάθηση για αρχάριους - Κατανόηση της γραμμικής παλινδρόμησης")
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](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`.
>
>![υπολογισμός της κλίσης](../../../../translated_images/el/slope.f3c9d5910ddbfcf9.webp)
>![calculate the slope](../../../../translated_images/el/slope.f3c9d5910ddbfcf9.webp)
>
> Πρώτα, υπολογίστε την κλίση `b`. Infographic από [Jen Looper](https://twitter.com/jenlooper)
> Αρχικά, υπολογίζουμε την κλίση `b`. Infographic από τον/την [Jen Looper](https://twitter.com/jenlooper)
>
> Με άλλα λόγια, και αναφερόμενοι στην αρχική ερώτηση των δεδομένων μας για την κολοκύθα: "προβλέψτε την τιμή μιας κολοκύθας ανά μπούσελ ανά μήνα", το `X` θα αναφερόταν στην τιμή και το `Y` στον μήνα πώλησης.
> Με άλλα λόγια, και αναφερόμενοι στην αρχική ερώτηση για το σύνολο δεδομένων κολοκύθας: "πρόβλεψε την τιμή μιας κολοκύθας ανά μπουσέλ ανά μήνα", το `X` θα αναφερόταν στην τιμή και το `Y` στον μήνα της πώλησης.
>
>![συμπλήρωση της εξίσωσης](../../../../translated_images/el/calculation.a209813050a1ddb1.webp)
>![complete the equation](../../../../translated_images/el/calculation.a209813050a1ddb1.webp)
>
> Υπολογίστε την τιμή του 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 | Μήνας | ΗμέρατουΈτους | Ποικιλία | Πόλη | Συσκευασία | Χαμηλή Τιμή | Υψηλή Τιμή | Τιμή
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
70 | 9 | 267 | ΤΥΠΟΥ ΚΕΙΚ | BALTIMORE | 1 1/9 μπουσέλ κουτιά | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | ΤΥΠΟΥ ΚΕΙΚ | BALTIMORE | 1 1/9 μπουσέλ κουτιά | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | ΤΥΠΟΥ ΚΕΙΚ | BALTIMORE | 1 1/9 μπουσέλ κουτιά | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | ΤΥΠΟΥ ΚΕΙΚ | BALTIMORE | 1 1/9 μπουσέλ κουτιά | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | ΤΥΠΟΥ ΚΕΙΚ | BALTIMORE | 1 1/9 μπουσέλ κουτιά | 15.0 | 15.0 | 13.636364
> Ο κώδικας για τον καθαρισμό των δεδομένων είναι διαθέσιμος στο [`notebook.ipynb`](notebook.ipynb). Έχουμε πραγματοποιήσει τα ίδια βήματα καθαρισμού όπως στο προηγούμενο μάθημα και έχουμε υπολογίσει τη στήλη `DayOfYear` χρησιμοποιώντας την ακόλουθη έκφραση:
> Ο κώδικας για τον καθαρισμό των δεδομένων είναι διαθέσιμος στο [`notebook.ipynb`](notebook.ipynb). Έχουμε εκτελέσει τα ίδια βήματα καθαρισμού όπως στο προηγούμενο μάθημα και έχουμε υπολογίσει την στήλη `DayOfYear` με την ακόλουθη έκφραση:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Τώρα που έχετε κατανοήσει τα μαθηματικά πίσω από τη γραμμική παλινδρόμηση, ας δημιουργήσουμε ένα μοντέλο παλινδρόμησης για να δούμε αν μπορούμε να προβλέψουμε ποιο πακέτο κολοκύθας θα έχει τις καλύτερες τιμές. Κάποιος που αγοράζει κολοκύθες για ένα φθινοπωρινό παρτέρι κολοκύθας θα ήθελε αυτές τις πληροφορίες για να βελτιστοποιήσει τις αγορές του.
Τώρα που έχετε κατανοήσει τα μαθηματικά πίσω από τη γραμμική παλινδρόμηση, ας δημιουργήσουμε ένα μοντέλο παλινδρόμησης για να δούμε αν μπορούμε να προβλέψουμε ποια συσκευασία κολοκύθας θα έχει τις καλύτερες τιμές. Κάποιος που αγοράζει κολοκύθες για ένα παρτέρι διακοπών μπορεί να θέλει αυτή την πληροφορία για να βελτιστοποιήσει τις αγορές του.
## Αναζήτηση συσχέτισης
[![Μηχανική Μάθηση για αρχάριους - Αναζήτηση συσχέτισης: Το κλειδί για τη γραμμική παλινδρόμηση](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "Μηχανική Μάθηση για αρχάριους - Αναζήτηση συσχέτισης: Το κλειδί για τη γραμμική παλινδρόμηση")
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα σύντομο βίντεο επισκόπησης για τη συσχέτιση.
> 🎥 Κάντε κλικ στην εικόνα παραπάνω για μια σύντομη επισκόπηση της συσχέτισης.
Από το προηγούμενο μάθημα μάλλον έχετε δει ότι η μέση τιμή για διαφορετικούς μήνες μοιάζει ως εξής:
Από το προηγούμενο μάθημα πιθανώς έχετε δει ότι η μέση τιμή για διαφορετικούς μήνες έχει ως εξής:
<img alt="Μέση τιμή ανά μήνα" src="../../../../translated_images/el/barchart.a833ea9194346d76.webp" width="50%"/>
<img alt="Average price by month" src="../../../../translated_images/el/barchart.a833ea9194346d76.webp" width="50%"/>
Αυτό υποδηλώνει ότι θα πρέπει να υπάρχει κάποια συσχέτιση και μπορούμε να δοκιμάσουμε να εκπαιδεύσουμε ένα γραμμικό μοντέλο παλινδρόμησης για να προβλέψουμε τη σχέση μεταξύ `Month` και `Price`, ή μεταξύ `DayOfYear` και `Price`. Να το scatter plot που δείχνει τη δεύτερη σχέση:
Αυτό υποδηλώνει ότι υπάρχει κάποια συσχέτιση και μπορούμε να προσπαθήσουμε να εκπαιδεύσουμε ένα γραμμικό μοντέλο παλινδρόμησης για να προβλέψουμε τη σχέση ανάμεσα στον `Μήνα` και την `Τιμή`, ή ανάμεσα στην `ΗμέρατουΈτους` και την `Τιμή`. Εδώ είναι το scatter plot που δείχνει τη δεύτερη σχέση:
<img alt="Scatter plot τιμής έναντι ημέρας του έτους" src="../../../../translated_images/el/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/el/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
Ας δούμε αν υπάρχει συσχέτιση χρησιμοποιώντας τη συνάρτηση `corr`:
Ας δούμε αν υπάρχει συσχέτιση χρησιμοποιώντας τη λειτουργία `corr`:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
Φαίνεται ότι η συσχέτιση είναι αρκετά μικρή, -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()):
df = new_pumpkins[new_pumpkins['Variety']==var]
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/el/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="Scatter plot τιμής έναντι ημέρας του έτους με χρώματα" src="../../../../translated_images/el/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Η έρευνά μας υποδηλώνει ότι η ποικιλία έχει μεγαλύτερη επίδραση στην τελική τιμή από την πραγματική ημερομηνία πώλησης. Αυτό φαίνεται και σε ένα γράφημα ράβδων:
Η έρευνά μας υποδεικνύει ότι η ποικιλία επηρεάζει περισσότερο την τιμή από την ημερομηνία πώλησης. Αυτό φαίνεται και σε ένα ραβδογράφημα:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Bar graph of price vs variety" src="../../../../translated_images/el/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Γράφημα ράβδων τιμής ανά ποικιλία" src="../../../../translated_images/el/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Ας εστιάσουμε προς στιγμή μόνο σε μια ποικιλία κολοκύθας, τον 'τύπο για πίτα', και ας δούμε τι επίδραση έχει η ημερομηνία στην τιμή:
Ας εστιάσουμε προς το παρόν μόνο στην ποικιλία 'pie type' και να δούμε τι επίδραση έχει η ημερομηνία στην τιμή:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot τιμής έναντι ημέρας του έτους για κολοκύθες πίτας" src="../../../../translated_images/el/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="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()
```
Μια άλλη προσέγγιση θα ήταν να γεμίσετε αυτές τις κενές τιμές με μέσες τιμές από την αντίστοιχη στήλη.
Μια άλλη προσέγγιση θα ήταν να συμπληρώσουμε τις κενές τιμές με τις μέσες τιμές της αντίστοιχης στήλης.
## Απλή γραμμική παλινδρόμηση
[![Μηχανική Μάθηση για αρχάριους - Γραμμική και πολυωνυμική παλινδρόμηση με Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "Μηχανική Μάθηση για αρχάριους - Γραμμική και πολυωνυμική παλινδρόμηση με Scikit-learn")
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](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&times;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), που είναι η ρίζα του μέσου όλων των τετραγωνικών διαφορών μεταξύ αναμενόμενης και προβλεπόμενης τιμής.
```python
pred = lin_reg.predict(X_test)
@ -216,14 +216,14 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
Το σφάλμα μας φαίνεται να είναι γύρω στις 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
@ -257,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
Η χρήση του `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` για να πάρουμε τα αποτελέσματα της πρόβλεψης:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Για να σχεδιάσουμε την ομαλή καμπύλη προσέγγισης, χρησιμοποιούμε το `np.linspace` για να δημιουργήσουμε ένα ομοιόμορφο φάσμα τιμών εισόδου, αντί να σχεδιάσουμε άμεσα πάνω στα μη διατεταγμένα δεδομένα δοκιμής (που θα παρήγαγε μια ζιγκ-ζαγκ γραμμή):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Τα pipelines μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο όπως το αρχικό αντικείμενο `LinearRegression`, δηλαδή μπορούμε να κάνουμε `fit` στο pipeline και στη συνέχεια να χρησιμοποιήσουμε `predict` για να πάρουμε τα αποτελέσματα της πρόβλεψης. Εδώ είναι το γράφημα που δείχνει τα δεδομένα δοκιμής και την προσεγγιστική καμπύλη:
Εδώ είναι το διάγραμμα που δείχνει τα δεδομένα δοκιμής και την καμπύλη προσέγγισης:
<img alt="Πολυωνυμική παλινδρόμηση" src="../../../../translated_images/el/poly-results.ee587348f0f1f60b.webp" width="50%" />
Χρησιμοποιώντας πολυωνυμική παλινδρόμηση, μπορούμε να πετύχουμε ελαφρώς χαμηλότερο MSE και μεγαλύτερο συντελεστή καθορισμού, αλλά όχι σημαντικά. Πρέπει να λάβουμε υπόψη και άλλα χαρακτηριστικά!
Χρησιμοποιώντας την Πολυωνυμική Παλινδρόμηση, μπορούμε να πετύχουμε ελαφρώς χαμηλότερο RMSE και υψηλότερο συντελεστή προσδιορισμού, αλλά όχι σημαντικά. Πρέπει να λάβουμε υπόψη και άλλα χαρακτηριστικά!
> Μπορείτε να δείτε ότι οι ελάχιστες τιμές των κολοκυθών παρατηρούνται κάπου γύρω στο Halloween. Πώς μπορείτε να εξηγήσετε αυτό;
> Μπορείς να δεις ότι οι ελάχιστες τιμές κολοκύθας παρατηρούνται κάπου γύρω από το Halloween. Πώς μπορείς να το εξηγήσεις;
🎃 Συγχαρητήρια, μόλις δημιουργήσατε ένα μοντέλο που μπορεί να βοηθήσει στην πρόβλεψη της τιμής για τις κολοκύθες τύπου πίτας. Πιθανότατα μπορείτε να επαναλάβετε την ίδια διαδικασία για όλους τους τύπους κολοκύθας, αλλά αυτό θα ήταν κουραστικό. Ας μάθουμε τώρα πώς να λαμβάνουμε υπόψη τη ποικιλία κολοκύθας στο μοντέλο μας!
🎃 Συγχαρητήρια, μόλις δημιούργησες ένα μοντέλο που μπορεί να βοηθήσει στην πρόβλεψη της τιμής των πίτων κολοκύθας. Πιθανώς να μπορείς να επαναλάβεις την ίδια διαδικασία για όλους τους τύπους κολοκύθας, αλλά αυτό θα ήταν κουραστικό. Ας μάθουμε τώρα πώς να λαμβάνουμε υπόψη την ποικιλία κολοκύθας στο μοντέλο μας!
## Κατηγορικά Χαρακτηριστικά
Σε έναν ιδανικό κόσμο, θέλουμε να μπορούμε να προβλέπουμε τιμές για διαφορετικές ποικιλίες κολοκύθας χρησιμοποιώντας το ίδιο μοντέλο. Ωστόσο, η στήλη `Variety` είναι κάπως διαφορετική από στήλες όπως το `Month`, επειδή περιέχει μη αριθμητικές τιμές. Τέτοιες στήλες ονομάζονται **κατηγορικές**.
Σε έναν ιδανικό κόσμο, θέλουμε να μπορούμε να προβλέπουμε τιμές για διαφορετικές ποικιλίες κολοκύθας χρησιμοποιώντας το ίδιο μοντέλο. Ωστόσο, η στήλη `Variety` διαφέρει κάπως από στήλες όπως το `Month`, επειδή περιέχει μη αριθμητικές τιμές. Τέτοιες στήλες ονομάζονται **κατηγορικές**.
[![Μηχανική Μάθηση για αρχάριους - Προβλέψεις κατηγορικών χαρακτηριστικών με γραμμική παλινδρόμηση](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
[![Μηχανική Μάθηση για αρχάριους - Προβλέψεις με κατηγορικά χαρακτηριστικά χρησιμοποιώντας γραμμική παλινδρόμηση](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "Μηχανική Μάθηση για αρχάριους - Προβλέψεις με κατηγορικά χαρακτηριστικά χρησιμοποιώντας γραμμική παλινδρόμηση")
> 🎥 Πατήστε την εικόνα παραπάνω για μια σύντομη βίντεο-επισκόπηση της χρήσης κατηγορικών χαρακτηριστικών.
> 🎥 Κάνε κλικ στην παραπάνω εικόνα για μια σύντομη επισκόπηση βίντεο σχετικά με τη χρήση κατηγορικών χαρακτηριστικών.
Εδώ μπορείτε να δείτε πώς η μέση τιμή εξαρτάται από την ποικιλία:
Εδώ βλέπεις πως η μέση τιμή εξαρτάται από την ποικιλία:
<img alt="Μέση τιμή ανά ποικιλία" 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 κωδικοποίηση μιας ποικιλίας:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -303,14 +325,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
Για να εκπαιδεύσουμε τη γραμμική παλινδρόμηση χρησιμοποιώντας 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)
# ρύθμιση και εκπαίδευση της αλυσίδας
# ρυθμίστε και εκπαιδεύστε τη ροή εργασίας
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# πρόβλεψη αποτελεσμάτων για τα δεδομένα δοκιμής
# προβλέψτε τα αποτελέσματα για τα δεδομένα δοκιμής
pred = pipeline.predict(X_test)
# υπολογισμός MSE και προσδιορισμού
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# υπολογίστε το RMSE και τον συντελεστή προσδιορισμού
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Αυτό θα μας δώσει τον καλύτερο συντελεστή καθορισμού κοντά στο 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). Ενώ προσπαθούμε για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το αρχικό έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε καμία ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -6,12 +6,12 @@
"source": [
"## Γραμμική και Πολυωνυμική Παλινδρόμηση για Τιμολόγηση Κολοκύθας - Μάθημα 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"
]
},
{
@ -777,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Κωδικοποίηση ποικιλιών\n",
"### Παραλλαγές κωδικοποίησης\n",
"\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"
]
}
],
@ -1100,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-04T06:19:55+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "el"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "sv"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T21:40:53+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T20:21:46+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "sv"
},
@ -90,8 +90,8 @@
"language_code": "sv"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T18:21:59+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:21:19+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "sv"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "sv"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T20:17:10+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "sv"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T21:10:30+00:00",

@ -1,123 +1,125 @@
# Tekniker för maskininlärning
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/)
[![ML för nybörjare - Tekniker för maskininlärning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML för nybörjare - Tekniker för maskininlärning")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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'.
![överanpassad modell](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
![overfitting model](../../../../translated_images/sv/overfitting.1c132d92bfd93cb6.webp)
> 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.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -2,135 +2,135 @@
## Nybörjarnotering
Linjär regression används när vi vill förutsäga ett **numeriskt värde** (till exempel huspris, temperatur eller försäljning).
Det fungerar genom att hitta en rät linje som bäst representerar sambandet mellan inmatningsfunktionerna och utdata.
Linjära regression används när vi vill förutsäga ett **numeriskt värde** (till exempel huspris, temperatur eller försäljning).
Den fungerar genom att hitta en rät linje som bäst representerar sambandet mellan ingångsegenskaper och utdata.
I denna lektion fokuserar vi på att förstå konceptet innan vi utforskar mer avancerade regressionstekniker.
![Linear vs polynomial regression infographic](../../../../translated_images/sv/linear-polynomial.5523c7cb6576ccab.webp)
> Informationsgrafik av [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [För-lectures quiz](https://ff-quizzes.netlify.app/en/ml/)
I den här lektionen fokuserar vi på att förstå konceptet innan vi utforskar mer avancerade regressionstekniker.
![Linear vs polynomial regression infographic](../../../../translated_images/sv/linear-polynomial.5523c7cb6576ccab.webp)
> Infografik av [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Förföreläsningsquiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [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.
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](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`.
>
>![räkna ut lutningen](../../../../translated_images/sv/slope.f3c9d5910ddbfcf9.webp)
>
> 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.
>
>![komplettera ekvationen](../../../../translated_images/sv/calculation.a209813050a1ddb1.webp)
>
> Beräkna värdet 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`.
>
>![calculate the slope](../../../../translated_images/sv/slope.f3c9d5910ddbfcf9.webp)
>
> 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.
>
>![complete the equation](../../../../translated_images/sv/calculation.a209813050a1ddb1.webp)
>
> 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
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> 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:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
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
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](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:
<img alt="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:
<img alt="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:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
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()):
df = new_pumpkins[new_pumpkins['Variety']==var]
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/sv/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Vår undersökning antyder att sorten har större effekt på det totala priset än själva försäljningsdatumet. Vi kan se detta med ett stapeldiagram:
Vår undersökning antyder att sort har större påverkan på det totala priset än det faktiska försäljningsdatumet. Det kan vi se med ett stapeldiagram:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Bar graph of price vs variety" src="../../../../translated_images/sv/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Låt oss nu fokusera endast på en pumpasort, 'pie type', och se vilken effekt datumet har på priset:
Låt oss för tillfället fokusera på en pumpasort, "pie type", och se vilken effekt datumet har på priset:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
@ -158,56 +158,56 @@ pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="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 tillgagå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
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](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.
```python
pred = lin_reg.predict(X_test)
@ -216,13 +216,13 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
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 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:
@ -233,19 +233,19 @@ plt.plot(X_test,pred)
<img alt="Linear regression" src="../../../../translated_images/sv/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## Polynomregression
## Polynomial Regression
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
@ -256,36 +256,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
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:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
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):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
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:
<img alt="Polynomial regression" src="../../../../translated_images/sv/poly-results.ee587348f0f1f60b.webp" width="50%" />
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**.
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](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:
<img alt="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:
Koden nedan visar hur vi kan one-hot koda sorten:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -302,14 +324,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
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-hot kodad 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)
# konfigurera och träna pipelinen
@ -343,44 +365,44 @@ pipeline.fit(X_train,y_train)
# förutsäg resultat för testdata
pred = pipeline.predict(X_test)
# beräkna MSE och bestämning
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# beräkna RMSE och förklaringsgrad
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
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.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## 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"
]
},
{
@ -777,20 +781,23 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Kodning av sorter\n",
"### Olika sätt att koda\n",
"\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"
]
}
],
@ -1100,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-06T13:11:01+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "sv"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "th"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T21:40:20+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T20:20:28+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "th"
},
@ -90,8 +90,8 @@
"language_code": "th"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T18:17:37+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:20:01+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "th"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "th"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T20:16:41+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "th"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T21:08:48+00:00",

@ -1,123 +1,125 @@
# เทคนิคการเรียนรู้ของเครื่อง
# เทคนิคของการเรียนรู้ของเครื่อง
กระบวนการสร้าง ใช้งาน และดูแลรักษาโมเดลการเรียนรู้ของเครื่องและข้อมูลที่ใช้ เป็นกระบวนการที่แตกต่างจากเวิร์กโฟลว์การพัฒนาหลายประเภท ในบทเรียนนี้ เราจะทำให้กระบวนการนี้เข้าใจง่ายขึ้น และสรุปเทคนิคหลักที่คุณจำเป็นต้องรู้ คุณจะได้:
กระบวนการสร้าง ใช้งาน และดูแลรักษาโมเดลการเรียนรู้ของเครื่องและข้อมูลที่ใช้เป็นกระบวนการที่แตกต่างจากเวิร์กโฟลว์การพัฒนารูปแบบอื่นมาก ในบทเรียนนี้ เราจะอธิบายกระบวนการและวางกรอบเทคนิคหลักที่คุณจำเป็นต้องรู้ คุณจะได้:
- เข้าใจกระบวนการพื้นฐานของการเรียนรู้ของเครื่องในระดับสูง
- สำรวจแนวคิดพื้นฐาน เช่น 'โมเดล', 'การทำนาย', และ 'ข้อมูลการฝึก'
- สำรวจแนวคิดพื้นฐาน เช่น 'โมเดล' 'การทำนาย' และ 'ข้อมูลการฝึกอบรม'
## [แบบทดสอบก่อนเรียน](https://ff-quizzes.netlify.app/en/ml/)
## [แบบทดสอบก่อนการบรรยาย](https://ff-quizzes.netlify.app/en/ml/)
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับบทเรียนนี้
> 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้นที่ชี้แจงบทเรียนนี้
## บทนำ
ในระดับสูง งานสร้างกระบวนการเรียนรู้ของเครื่อง (ML) ประกอบด้วยหลายขั้นตอน:
ในภาพรวม การสร้างกระบวนการเรียนรู้ของเครื่อง (ML) ประกอบด้วยขั้นตอนหลายขั้นตอน:
1. **กำหนดคำถาม**. กระบวนการ ML ส่วนใหญ่เริ่มต้นด้วยการตั้งคำถามที่ไม่สามารถตอบได้ด้วยโปรแกรมเงื่อนไขง่าย ๆ หรือเครื่องมือที่ใช้กฎ คำถามเหล่านี้มักเกี่ยวข้องกับการทำนายโดยอิงจากชุดข้อมูล
2. **รวบรวมและเตรียมข้อมูล**. เพื่อที่จะตอบคำถามของคุณ คุณต้องมีข้อมูล คุณภาพและบางครั้งปริมาณของข้อมูลจะกำหนดว่าคุณสามารถตอบคำถามเริ่มต้นได้ดีแค่ไหน การแสดงภาพข้อมูลเป็นส่วนสำคัญในขั้นตอนนี้ ขั้นตอนนี้ยังรวมถึงการแบ่งข้อมูลออกเป็นกลุ่มสำหรับการฝึกและการทดสอบเพื่อสร้างโมเดล
3. **เลือกวิธีการฝึก**. ขึ้นอยู่กับคำถามและลักษณะของข้อมูล คุณต้องเลือกวิธีการฝึกโมเดลเพื่อให้สะท้อนข้อมูลได้ดีที่สุดและทำการทำนายที่แม่นยำ
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 วิเคราะห์สภาพอากาศ
## งานก่อนการสร้างโมเดล
## งานเตรียมก่อนการสร้างโมเดล
ก่อนเริ่มสร้างโมเดลของคุณ มีหลายงานที่คุณต้องทำ เพื่อทดสอบคำถามของคุณและสร้างสมมติฐานโดยอิงจากการทำนายของโมเดล คุณต้องระบุและกำหนดองค์ประกอบหลายอย่าง
ก่อนเริ่มสร้างโมเดล คุณต้องทำภารกิจหลายอย่างเพื่อทดสอบคำถามและตั้งสมมติฐานโดยอิงจากการทำนายของโมเดล คุณต้องระบุและกำหนดองค์ประกอบหลายอย่าง
### ข้อมูล
เพื่อที่จะตอบคำถามของคุณด้วยความมั่นใจ คุณต้องมีข้อมูลที่ดีในปริมาณที่เหมาะสม มีสองสิ่งที่คุณต้องทำในขั้นตอนนี้:
เพื่อที่จะตอบคำถามของคุณด้วยความแน่นอน คุณต้องมีข้อมูลจำนวนมากที่เหมาะสม มีสองสิ่งที่คุณต้องทำตอนนี้:
- **รวบรวมข้อมูล**. โดยคำนึงถึงบทเรียนก่อนหน้านี้เกี่ยวกับความยุติธรรมในการวิเคราะห์ข้อมูล รวบรวมข้อมูลของคุณอย่างระมัดระวัง ระวังแหล่งที่มาของข้อมูลนี้ อคติที่อาจมี และบันทึกที่มาของข้อมูล
- **เตรียมข้อมูล**. มีหลายขั้นตอนในกระบวนการเตรียมข้อมูล คุณอาจต้องรวบรวมข้อมูลและปรับให้เป็นมาตรฐานหากมาจากแหล่งที่หลากหลาย คุณสามารถปรับปรุงคุณภาพและปริมาณของข้อมูลผ่านวิธีการต่าง ๆ เช่น การแปลงข้อความเป็นตัวเลข (ดังที่เราทำใน [Clustering](../../5-Clustering/1-Visualize/README.md)) คุณอาจสร้างข้อมูลใหม่โดยอิงจากข้อมูลเดิม (ดังที่เราทำใน [Classification](../../4-Classification/1-Introduction/README.md)) คุณสามารถทำความสะอาดและแก้ไขข้อมูล (ดังที่เราจะทำก่อนบทเรียน [Web App](../../3-Web-App/README.md)) สุดท้าย คุณอาจต้องสุ่มและสับข้อมูล ขึ้นอยู่กับเทคนิคการฝึกของคุณ
- **รวบรวมข้อมูล** จดจำบทเรียนก่อนหน้าเกี่ยวกับความยุติธรรมในการวิเคราะห์ข้อมูล รวบรวมข้อมูลอย่างระมัดระวัง รู้แหล่งที่มาของข้อมูล ความลำเอียงที่อาจมี และบันทึกต้นกำเนิดของข้อมูลไว้
- **เตรียมข้อมูล** ขั้นตอนหลายขั้นตอนของการเตรียมข้อมูล อาจจำเป็นต้องรวบรวมข้อมูลและปรับข้อมูลให้อยู่ในรูปแบบปกติหากมาจากหลายแหล่ง คุณสามารถปรับปรุงคุณภาพและปริมาณข้อมูลได้ด้วยวิธีต่าง ๆ เช่น การแปลงสตริงเป็นตัวเลข (ตามที่ทำใน [Clustering](../../5-Clustering/1-Visualize/README.md)) คุณอาจสร้างข้อมูลใหม่จากข้อมูลเดิม (เช่นใน [Classification](../../4-Classification/1-Introduction/README.md)) คุณสามารถทำความสะอาดและแก้ไขข้อมูล (เหมือนในบทเรียน [Web App](../../3-Web-App/README.md)) สุดท้าย คุณอาจต้องสุ่มและสับข้อมูล ขึ้นอยู่กับเทคนิคการฝึกอบรมของคุณ
✅ หลังจากรวบรวมและประมวลผลข้อมูลของคุณ ใช้เวลาสักครู่เพื่อดูว่ารูปร่างของข้อมูลจะช่วยให้คุณตอบคำถามที่ตั้งใจไว้ได้หรือไม่ อาจเป็นไปได้ว่าข้อมูลจะไม่ทำงานได้ดีในงานที่คุณตั้งใจไว้ ดังที่เราค้นพบในบทเรียน [Clustering](../../5-Clustering/1-Visualize/README.md)!
✅ หลังจากรวบรวมและประมวลผลข้อมูลแล้ว ให้ลองพิจารณาว่ารูปร่างของข้อมูลจะช่วยให้คุณตอบคำถามของคุณได้หรือไม่ อาจเป็นไปได้ว่าข้อมูลอาจทำงานได้ไม่ดีในงานที่คุณกำหนดไว้ เช่นที่เราได้พบในบทเรียน [Clustering](../../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) คือคุณสมบัติที่สามารถวัดได้ของข้อมูลมักแสดงเป็นชื่อคอลัมน์เช่น 'date' 'size' หรือ 'color' ตัวแปรคุณลักษณะของคุณ ซึ่งมักแสดงในโค้ดเป็น `X` คืออินพุตที่ใช้ฝึกโมเดล
เป้าหมายคือสิ่งที่คุณพยายามทำนาย เป้าหมายซึ่งมักแสดงเป็น `y` ในโค้ด แสดงถึงคำตอบของคำถามที่คุณพยายามถามจากข้อมูล: ในเดือนธันวาคม ฟักทอง **สีอะไร** จะมีราคาถูกที่สุด? ในซานฟรานซิสโก ย่านไหนจะมี **ราคาที่ดิน** ดีที่สุด? บางครั้งเป้าหมายยังถูกเรียกว่าแอตทริบิวต์ป้ายกำกับ
เป้าหมายคือสิ่งที่คุณพยายามทำนาย เป้าหมาย ซึ่งมักแสดงเป็น `y` ในโค้ด คือคำตอบของคำถามที่คุณถามข้อมูล เช่น ในเดือนธันวาคม ลูกฟักทองสีใดจะถูกที่สุด? ในซานฟรานซิสโก ย่านใดจะมีราคาอสังหาริมทรัพย์ที่ดีที่สุด? บางครั้งเป้าหมายก็เรียกว่าคุณสมบัติป้ายชื่อ (label attribute)
### การเลือกตัวแปรคุณลักษณะ
🎓 **การเลือกคุณลักษณะและการสกัดคุณลักษณะ** คุณจะรู้ได้อย่างไรว่าควรเลือกตัวแปรใดเมื่อสร้างโมเดล? คุณอาจต้องผ่านกระบวนการเลือกคุณลักษณะหรือการสกัดคุณลักษณะเพื่อเลือกตัวแปรที่เหมาะสมที่สุดสำหรับโมเดลที่มีประสิทธิภาพสูงสุด อย่างไรก็ตาม ทั้งสองกระบวนการไม่เหมือนกัน: "การสกัดคุณลักษณะสร้างคุณลักษณะใหม่จากฟังก์ชันของคุณลักษณะเดิม ในขณะที่การเลือกคุณลักษณะจะคืนชุดย่อยของคุณลักษณะ" ([แหล่งข้อมูล](https://wikipedia.org/wiki/Feature_selection))
🎓 **การเลือกคุณลักษณะและการสกัดคุณลักษณะ** คุณจะรู้ได้อย่างไรว่าควรเลือกตัวแปรใดเมื่อสร้างโมเดล? โดยปกติคุณจะผ่านกระบวนการเลือกคุณลักษณะหรือสกัดคุณลักษณะเพื่อเลือกตัวแปรที่เหมาะสมสำหรับโมเดลที่มีประสิทธิภาพสูงสุด อย่างไรก็ตามพวกมันไม่เหมือนกัน: "การสกัดคุณลักษณะจะสร้างคุณลักษณะใหม่จากฟังก์ชันของคุณลักษณะเดิม ในขณะที่การเลือกคุณลักษณะจะคืนชุดย่อยของคุณลักษณะ" ([ที่มา](https://wikipedia.org/wiki/Feature_selection))
### การแสดงภาพข้อมูล
### แสดงข้อมูลของคุณเป็นภาพ
ส่วนสำคัญของเครื่องมือของนักวิทยาศาสตร์ข้อมูลคือพลังในการแสดงภาพข้อมูลโดยใช้ไลบรารีที่ยอดเยี่ยมหลายตัว เช่น Seaborn หรือ MatPlotLib การแสดงข้อมูลของคุณในรูปแบบภาพอาจช่วยให้คุณค้นพบความสัมพันธ์ที่ซ่อนอยู่ซึ่งคุณสามารถใช้ประโยชน์ได้ การแสดงภาพของคุณอาจช่วยให้คุณค้นพบอคติหรือข้อมูลที่ไม่สมดุล (ดังที่เราค้นพบใน [Classification](../../4-Classification/2-Classifiers-1/README.md))
เครื่องมือสำคัญของนักวิทยาศาสตร์ข้อมูลคือความสามารถในการแสดงข้อมูลด้วยไลบรารียอดเยี่ยมหลายอย่าง เช่น Seaborn หรือ MatPlotLib การแสดงข้อมูลเป็นภาพอาจช่วยให้คุณค้นพบความสัมพันธ์ที่ซ่อนอยู่ที่สามารถนำไปใช้ประโยชน์ได้ นอกจากนี้ภาพของคุณอาจช่วยให้คุณค้นพบอคติหรือความไม่สมดุลของข้อมูล (ตามที่เราพบใน [Classification](../../4-Classification/2-Classifiers-1/README.md))
### การแบ่งชุดข้อมูล
### แบ่งชุดข้อมูลของคุณ
ก่อนการฝึก คุณต้องแบ่งชุดข้อมูลของคุณออกเป็นสองส่วนหรือมากกว่าที่มีขนาดไม่เท่ากันแต่ยังคงแสดงข้อมูลได้ดี
ก่อนการฝึกอบรม คุณต้องแบ่งชุดข้อมูลเป็นสองส่วนหรือมากกว่าที่มีขนาดไม่เท่ากันแต่ยังแทนข้อมูลได้ดี
- **การฝึก**. ส่วนนี้ของชุดข้อมูลจะถูกใช้เพื่อฝึกโมเดลของคุณ ชุดนี้ประกอบด้วยส่วนใหญ่ของชุดข้อมูลเดิม
- **การทดสอบ**. ชุดข้อมูลทดสอบเป็นกลุ่มข้อมูลอิสระที่มักรวบรวมจากข้อมูลเดิม ซึ่งคุณใช้เพื่อยืนยันประสิทธิภาพของโมเดลที่สร้างขึ้น
- **การตรวจสอบ**. ชุดตรวจสอบเป็นกลุ่มตัวอย่างอิสระขนาดเล็กที่คุณใช้ปรับแต่งพารามิเตอร์ไฮเปอร์ หรือโครงสร้างของโมเดลเพื่อปรับปรุงโมเดล ขึ้นอยู่กับขนาดของข้อมูลและคำถามที่คุณถาม คุณอาจไม่จำเป็นต้องสร้างชุดที่สามนี้ (ดังที่เราสังเกตใน [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md))
- **ฝึกอบรม** ส่วนของชุดข้อมูลนี้จะนำไปสร้างโมเดล ฝึกโมเดล ชุดนี้คือส่วนใหญ่ของชุดข้อมูลต้นฉบับ
- **ทดสอบ** ชุดข้อมูลทดสอบเป็นกลุ่มข้อมูลอิสระซึ่งมักมาจากข้อมูลต้นฉบับ ใช้เพื่อยืนยันประสิทธิภาพของโมเดลที่สร้างขึ้น
- **ตรวจสอบค่าความถูกต้อง** ชุดตรวจสอบค่าความถูกต้องเป็นกลุ่มตัวอย่างอิสระขนาดเล็กที่ใช้ปรับแต่งไฮเปอร์พารามิเตอร์หรือสถาปัตยกรรมของโมเดลเพื่อปรับปรุงประสิทธิภาพ ขึ้นอยู่กับขนาดข้อมูลและคำถามที่คุณถาม บางครั้งคุณอาจไม่จำเป็นต้องสร้างชุดที่สามนี้ (ตามที่ระบุใน [Time Series Forecasting](../../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) ซึ่งเราใช้ในหลักสูตรนี้ คุณสามารถสำรวจหลายวิธีฝึกอบรมโมเดล ขึ้นอยู่กับประสบการณ์ คุณอาจต้องลองหลายวิธีเพื่อสร้างโมเดลที่ดีที่สุด คุณน่าจะผ่านกระบวนการที่นักวิทยาศาสตร์ข้อมูลประเมินประสิทธิภาพโมเดลโดยป้อนข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน ตรวจสอบความแม่นยำ อคติ และปัญหาเรื่องคุณภาพอื่น ๆ จากนั้นเลือกวิธีฝึกอบรมที่เหมาะสมที่สุดสำหรับงาน
### การฝึกโมเดล
### ฝึกโมเดล
เมื่อมีข้อมูลการฝึก คุณพร้อมที่จะ 'fit' เพื่อสร้างโมเดล คุณจะสังเกตเห็นว่าในไลบรารี ML หลายตัว คุณจะพบโค้ด 'model.fit' - ในเวลานี้คุณจะส่งตัวแปรคุณลักษณะของคุณเป็นอาร์เรย์ของค่า (มักเป็น 'X') และตัวแปรเป้าหมาย (มักเป็น 'y')
พร้อมข้อมูลฝึกอบรมของคุณ คุณพร้อมที่จะ 'ฟิต' ข้อมูลเพื่อสร้างโมเดล คุณจะพบว่าในไลบรารี ML หลายแห่งมีโค้ด 'model.fit' ซึ่งเป็นช่วงเวลาที่คุณส่งตัวแปรคุณลักษณะในรูปแบบอาร์เรย์ (มักเป็น 'X') และตัวแปรเป้าหมาย (มักเป็น 'y')
### การประเมินโมเดล
### ประเมินโมเดล
เมื่อกระบวนการฝึกเสร็จสิ้น (อาจใช้หลายรอบ หรือ 'epochs' ในการฝึกโมเดลขนาดใหญ่) คุณจะสามารถประเมินคุณภาพของโมเดลได้โดยใช้ข้อมูลทดสอบเพื่อวัดประสิทธิภาพของมัน ข้อมูลนี้เป็นชุดย่อยของข้อมูลเดิมที่โมเดลยังไม่เคยวิเคราะห์มาก่อน คุณสามารถพิมพ์ตารางเมตริกเกี่ยวกับคุณภาพของโมเดลได้
เมื่อกระบวนการฝึกเสร็จสิ้น (อาจต้องใช้หลายรอบหรือ 'epochs' เพื่อฝึกโมเดลขนาดใหญ่) คุณจะสามารถประเมินคุณภาพโมเดลโดยใช้ข้อมูลทดสอบเพื่อวัดประสิทธิภาพ ข้อมูลนี้เป็นส่วนย่อยของข้อมูลต้นฉบับที่โมเดลไม่เคยวิเคราะห์มาก่อน คุณสามารถพิมพ์ตารางเมตริกเกี่ยวกับคุณภาพโมเดลของคุณได้
🎓 **การปรับโมเดล**
🎓 **การฟิตโมเดล**
ในบริบทของการเรียนรู้ของเครื่อง การปรับโมเดลหมายถึงความแม่นยำของฟังก์ชันพื้นฐานของโมเดลเมื่อพยายามวิเคราะห์ข้อมูลที่ไม่คุ้นเคย
ในบริบทของการเรียนรู้ของเครื่อง การฟิตโมเดลหมายถึงความแม่นยำของฟังก์ชันพื้นฐานของโมเดลขณะที่พยายามวิเคราะห์ข้อมูลที่ไม่เคยรู้จักมาก่อน
🎓 **การปรับไม่ดี** และ **การปรับมากเกินไป** เป็นปัญหาทั่วไปที่ลดคุณภาพของโมเดล เนื่องจากโมเดลปรับตัวไม่ดีพอหรือดีเกินไป สิ่งนี้ทำให้โมเดลทำการทำนายที่สอดคล้องกับข้อมูลการฝึกมากเกินไปหรือหลวมเกินไป โมเดลที่ปรับมากเกินไปจะทำนายข้อมูลการฝึกได้ดีเกินไปเพราะมันเรียนรู้รายละเอียดและเสียงรบกวนของข้อมูลมากเกินไป โมเดลที่ปรับไม่ดีจะไม่แม่นยำเพราะไม่สามารถวิเคราะห์ข้อมูลการฝึกหรือข้อมูลที่ยังไม่เคยเห็นได้อย่างถูกต้อง
🎓 **การฟิตต่ำเกินไป** และ **การฟิตสูงเกินไป** เป็นปัญหาที่พบบ่อยที่ทำให้ประสิทธิภาพโมเดลลดลง เนื่องจากโมเดลฟิตไม่ดีพอหรือฟิตดีเกินไป ทำให้โมเดลทำนายได้ใกล้เกินไปหรือลวกเกินไปกับข้อมูลฝึกอบรม โมเดลที่ฟิตสูงเกินไปจะทำนายข้อมูลฝึกอบรมได้ดีมากเพราะเรียนรู้รายละเอียดและเสียงรบกวนในข้อมูลดีเกินไป โมเดลที่ฟิตต่ำเกินไปไม่แม่นยำเนื่องจากไม่สามารถวิเคราะห์ข้อมูลฝึกหรือข้อมูลที่ไม่เคยเห็นได้อย่างถูกต้อง
![overfitting model](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
> อินโฟกราฟิกโดย [Jen Looper](https://twitter.com/jenlooper)
![overfitting model](../../../../translated_images/th/overfitting.1c132d92bfd93cb6.webp)
> กราฟิกโดย [Jen Looper](https://twitter.com/jenlooper)
## การปรับแต่งพารามิเตอร์
## การปรับค่าพารามิเตอร์
เมื่อการฝึกครั้งแรกเสร็จสิ้น สังเกตคุณภาพของโมเดลและพิจารณาปรับปรุงโดยการปรับ 'พารามิเตอร์ไฮเปอร์' อ่านเพิ่มเติมเกี่ยวกับกระบวนการนี้ [ในเอกสาร](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)
เมื่อการฝึกเบื้องต้นเสร็จสิ้น ให้สังเกตคุณภาพของโมเดลและพิจารณาปรับปรุงโดยการปรับแต่ง 'ไฮเปอร์พารามิเตอร์' อ่านรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการได้ใน [เอกสาร](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)
## การทำนาย
นี่คือช่วงเวลาที่คุณสามารถใช้ข้อมูลใหม่ทั้งหมดเพื่อทดสอบความแม่นยำของโมเดล ในการตั้งค่า ML ที่ 'นำไปใช้' ซึ่งคุณกำลังสร้างสินทรัพย์เว็บเพื่อใช้โมเดลในระบบผลิต การทำนายอาจเกี่ยวข้องกับการรวบรวมข้อมูลจากผู้ใช้ (เช่น การกดปุ่ม) เพื่อกำหนดตัวแปรและส่งไปยังโมเดลเพื่อการอนุมานหรือการประเมินผล
นี่คือช่วงเวลาที่คุณสามารถใช้ข้อมูลใหม่ทั้งหมดเพื่อทดสอบความแม่นยำของโมเดล ในสภาพแวดล้อมการใช้ ML จริง ที่คุณสร้างเว็บแอปเพื่อใช้โมเดลในงานจริง กระบวนการนี้อาจรวมถึงการรวบรวมข้อมูลผู้ใช้ (เช่น การกดปุ่ม) เพื่อกำหนดตัวแปรและส่งให้โมเดลทำการสรุปหรือประเมิน
ในบทเรียนเหล่านี้ คุณจะค้นพบวิธีใช้ขั้นตอนเหล่านี้เพื่อเตรียม สร้าง ทดสอบ ประเมิน และทำนาย - ทุกขั้นตอนของนักวิทยาศาสตร์ข้อมูลและอื่น ๆ ในขณะที่คุณก้าวหน้าในเส้นทางสู่การเป็นวิศวกร ML 'เต็มรูปแบบ'
ในบทเรียนเหล่านี้ คุณจะค้นพบวิธีใช้ขั้นตอนเหล่านี้เพื่อเตรียมข้อมูล สร้าง ทดสอบ ประเมิน และทำนาย—ซึ่งเป็นท่าทางของนักวิทยาศาสตร์ข้อมูลและอื่น ๆ ขณะที่คุณเดินทางสู่การเป็นวิศวกร ML 'เต็มสแตก'
---
## 🚀ความท้าทาย
วาดแผนภาพแสดงขั้นตอนของนักปฏิบัติ ML ตอนนี้คุณอยู่ในขั้นตอนใดในกระบวนการ? คุณคาดว่าจะพบความยากลำบากที่ไหน? อะไรที่ดูเหมือนง่ายสำหรับคุณ?
วาดแผนภูมิแสดงขั้นตอนของผู้ปฏิบัติการ ML คุณเห็นตัวเองอยู่จุดไหนในกระบวนการนี้? คุณคาดว่าจะพบความยากลำบากที่ไหน? อะไรที่ดูง่ายสำหรับคุณ?
## [แบบทดสอบหลังเรียน](https://ff-quizzes.netlify.app/en/ml/)
## [แบบทดสอบหลังการบรรยาย](https://ff-quizzes.netlify.app/en/ml/)
## ทบทวนและศึกษาด้วยตนเอง
## ทบทวน & การศึกษาด้วยตนเอง
ค้นหาสัมภาษณ์ออนไลน์กับนักวิทยาศาสตร์ข้อมูลที่พูดคุยเกี่ยวกับงานประจำวันของพวกเขา นี่คือ [หนึ่งตัวอย่าง](https://www.youtube.com/watch?v=Z3IjgbbCEfs)
ค้นหาออนไลน์สำหรับสัมภาษณ์นักวิทยาศาสตร์ข้อมูลที่พูดถึงงานประจำวันของพวกเขา นี่คือ [ตัวอย่างหนึ่ง](https://www.youtube.com/watch?v=Z3IjgbbCEfs)
## งานที่ได้รับมอบหมาย
## งานมอบหมาย
[สัมภาษณ์นักวิทยาศาสตร์ข้อมูล](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) แม้ว่าเราจะพยายามให้ความถูกต้องสูงสุด โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางควรถูกพิจารณาเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ควรใช้การแปลโดยมนุษย์มืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดขึ้นจากการใช้การแปลนี้
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,97 +1,96 @@
# สร้างโมเดลการถดถอย (regression) โดยใช้ Scikit-learn: การถดถอยสี่วิธี
# สร้างแบบจำลองการถดถอยโดยใช้ Scikit-learn: การถดถอย 4 วิธี
## หมายเหตุสำหรับผู้เริ่มต้น
การถดถอยเชิงเส้นใช้เมื่อเราต้องการทำนาย **ค่าตัวเลข** (เช่น ราคาบ้าน อุณหภูมิ หรือยอดขาย)
วิธีทำงานโดยการหาค่ารูปเส้นตรงที่เป็นตัวแทนที่ดีที่สุดสำหรับความสัมพันธ์ระหว่างคุณลักษณะอินพุตและผลลัพธ์
การถดถอยเชิงเส้นใช้เมื่อเราต้องการทำนายค่า **ตัวเลข** (เช่น ราคาบ้าน อุณหภูมิ หรือยอดขาย)
มันทำงานโดยการหาค่าของเส้นตรงที่แสดงความสัมพันธ์ระหว่างลักษณะข้อมูลนำเข้าและผลลัพธ์ออกมาได้ดีที่สุด
ในบทเรียนนี้ เราจะเน้นทำความเข้าใจแนวคิดก่อนที่จะสำรวจเทคนิคการถดถอยที่ก้าวหน้าขึ้น
ในบทเรียนนี้ เราเน้นไปที่การทำความเข้าใจแนวคิดก่อนจะสำรวจเทคนิคการถดถอยขั้นสูงเพิ่มเติม
![Linear vs polynomial regression infographic](../../../../translated_images/th/linear-polynomial.5523c7cb6576ccab.webp)
> อินโฟกราฟิกโดย [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [แบบทดสอบก่อนเรียน](https://ff-quizzes.netlify.app/en/ml/)
> ### [บทเรียนนี้มีเวอร์ชันภาษา R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
> ### [บทเรียนนี้มีให้ใช้ใน R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### บทนำ
จนถึงตอนนี้คุณได้สำรวจความหมายของการถดถอยด้วยชุดข้อมูลตัวอย่างจากชุดข้อมูลราคาฟักทองที่เราจะใช้ตลอดบทเรียนนี้แล้ว คุณยังได้แสดงภาพโดยใช้ Matplotlib
จนถึงตอนนี้คุณได้สำรวจความหมายของการถดถอยด้วยตัวอย่างข้อมูลที่เก็บรวบรวมจากชุดข้อมูลราคาฟักทองซึ่งเราจะใช้ตลอดบทเรียนนี้ อีกทั้งคุณยังได้ทำการแสดงผลข้อมูลโดยใช้ Matplotlib
ตอนนี้คุณพร้อมที่จะเจาะลึกเรื่องการถดถอยสำหรับ ML แล้ว ในขณะที่การแสดงภาพช่วยให้เข้าใจข้อมูลได้ แต่พลังที่แท้จริงของ Machine Learning มาจาก _การฝึกโมเดล_ โมเดลจะถูกฝึกด้วยข้อมูลย้อนหลังเพื่อจับความสัมพันธ์ข้อมูลโดยอัตโนมัติ และช่วยให้คุณทำนายผลลัพธ์สำหรับข้อมูลใหม่ที่โมเดลไม่เคยเห็นมาก่อน
ตอนนี้คุณพร้อมที่จะศึกษาลึกลงไปในเรื่องการถดถอยสำหรับ ML แล้ว ในขณะที่การแสดงผลข้อมูลช่วยให้คุณเข้าใจข้อมูลได้ง่ายขึ้น แต่พลังที่แท้จริงของ Machine Learning มาจากการ _ฝึกสอนโมเดล_ โมเดลจะถูกฝึกบนข้อมูลในอดีตเพื่อจดจำความสัมพันธ์ของข้อมูลโดยอัตโนมัติ และช่วยให้คุณทำนายผลสำหรับข้อมูลใหม่ที่โมเดลไม่เคยเห็นมาก่อน
ในบทเรียนนี้ คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับสองประเภทของการถดถอย: _การถดถอยเชิงเส้นพื้นฐาน_ และ _การถดถอยพหุนาม_ พร้อมกับคณิตศาสตร์พื้นฐานที่อยู่เบื้องหลังเทคนิคเหล่านี้ โมเดลเหล่านี้จะช่วยให้เราทำนายราคาฟักทองขึ้นอยู่กับข้อมูลอินพุตที่แตกต่างกัน
ในบทเรียนนี้ คุณจะได้เรียนรู้เกี่ยวกับการถดถอยสองประเภท: _การถดถอยเชิงเส้นพื้นฐาน_ และ _การถดถอยพหุนาม_ พร้อมกับคณิตศาสตร์เบื้องหลังของเทคนิคเหล่านี้ โมเดลเหล่านี้จะช่วยให้เราทำนายราคาฟักทองขึ้นอยู่กับข้อมูลนำเข้าที่ต่างกัน
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 คลิกที่ภาพด้านบนเพื่อชมวิดีโอสั้นๆ เกี่ยวกับภาพรวมของการถดถอยเชิงเส้น
> 🎥 คลิกที่รูปภาพด้านบนเพื่อชมวิดีโอสั้นๆ แนะนำการถดถอยเชิงเส้น
> ตลอดหลักสูตรนี้ เราสมมุติว่าความรู้ด้านคณิตศาสตร์มีเพียงเล็กน้อย และพยายามทำให้ง่ายสำหรับนักเรียนที่มาจากสาขาอื่น จึงมีบันทึก, 🧮 การเรียกดู, แผนภาพ และเครื่องมือช่วยเรียนอื่นๆ เพื่อช่วยในการเข้าใจ
> ตลอดหลักสูตรนี้ เราจะตั้งพื้นฐานความรู้ทางคณิตศาสตร์ให้น้อยที่สุด และพยายามทำให้เข้าถึงง่ายสำหรับนักเรียนที่มาจากสาขาอื่นๆ ดังนั้นโปรดสังเกตหมายเหตุ 🧮 ข้อสังเกต แผนภาพ และเครื่องมือการเรียนรู้อื่นๆ เพื่อช่วยในการเข้าใจ
### ความรู้เบื้องต้นที่ควรมี
### ความรู้พื้นฐาน
คุณควรคุ้นเคยกับโครงสร้างชุดข้อมูลฟักทองที่เรากำลังวิเคราะห์อยู่แล้ว คุณสามารถพบชุดข้อมูลที่โหลดและทำความสะอาดไว้ล่วงหน้าในไฟล์ _notebook.ipynb_ ของบทเรียนนี้ ในไฟล์นี้ราคาฟักทองจะแสดงเป็นราคาต่อบัชเชิลในกรอบข้อมูลชุดใหม่ ให้แน่ใจว่าคุณสามารถรันโน้ตบุ๊กเหล่านี้บนเคอร์เนลใน Visual Studio Code
ตอนนี้คุณควรจะคุ้นเคยกับโครงสร้างข้อมูลฟักทองที่เรากำลังตรวจสอบแล้ว คุณสามารถหาข้อมูลที่โหลดมาและทำความสะอาดไว้ล่วงหน้าในไฟล์ _notebook.ipynb_ ของบทเรียนนี้ ในไฟล์จะแสดงราคาฟักทองต่อบัชเซลใน DataFrame ใหม่ ตรวจสอบให้แน่ใจว่าคุณสามารถรันโน้ตบุ๊กเหล่านี้ในเคอร์เนลของ Visual Studio Code ได้
### การเตรียมตัว
เพื่อเตือนความจำ คุณกำลังโหลดข้อมูลนี้เพื่อที่จะตั้งคำถามกับมัน
เพื่อเป็นการเตือนความจำ คุณกำลังโหลดข้อมูลนี้เพื่อที่จะตั้งคำถามเกี่ยวกับมัน
- เวลาใดเหมาะสมที่สุดในการซื้อฟักทอง?
- ราคาที่คาดหวังของฟักทองขนาดจิ๋วเป็นเท่าไร?
- ควรซื้อแบบตะกร้าครึ่งบัชเชิล หรือแบบกล่อง 1 1/9 บัชเชิลดี?
- เวลาไหนเหมาะสมที่สุดในการซื้อฟักทอง?
- ฉันคาดหวังราคาเท่าไหร่สำหรับกล่องฟักทองมินิ?
- ฉันควรซื้อในตะกร้าครึ่งบัชเซลหรือกล่องบัชเซล 1 1/9 ดี?
เรามาลงลึกกับข้อมูลนี้กันต่อ
ลองสำรวจข้อมูลนี้ต่อไป
ในบทเรียนก่อนหน้านี้คุณได้สร้าง Pandas DataFrame และเติมข้อมูลส่วนหนึ่งของชุดข้อมูลต้นฉบับ โดยการปรับราคาต่อบัชเซล แต่ด้วยวิธีนี้คุณสามารถรวบรวมได้เพียงประมาณ 400 จุดข้อมูลและเฉพาะช่วงฤดูใบไม้ร่วงเท่านั้น
ในบทเรียนก่อนหน้า คุณได้สร้าง Pandas DataFrame และเติมข้อมูลบางส่วนจากชุดข้อมูลเดิมโดยการทำให้ราคาเป็นมาตรฐานต่อบัชเชิล แต่ด้วยวิธีนี้คุณได้แค่ประมาณ 400 จุดข้อมูลและเฉพาะในเดือนฤดูใบไม้ร่วงเท่านั้น
ลองดูข้อมูลที่เราโหลดไว้ล่วงหน้าในโน้ตบุ๊กของบทเรียนนี้ ข้อมูลถูกโหลดล่วงหน้าและแสดงกราฟกระจายเบื้องต้นที่แสดงข้อมูลรายเดือน บางทีเราอาจจะได้รายละเอียดเพิ่มเติมเกี่ยวกับลักษณะของข้อมูลโดยการทำความสะอาดข้อมูลเพิ่มเติมอีก
ลองดูข้อมูลที่เรารโหลดไว้ล่วงหน้าในโน้ตบุ๊กที่แนบมากับบทเรียนนี้ ข้อมูลถูกโหลดไว้แล้วและมีการสร้างกราฟกระจายเบื้องต้นแสดงข้อมูลเดือน อาจจะสามารถล้างข้อมูลให้ดีขึ้นเพื่อให้เข้าใจลักษณะข้อมูลได้มากขึ้น
## เส้นถดถอยเชิงเส้น
## เส้นการถดถอยเชิงเส้น
อย่างที่คุณได้เรียนรู้ในบทเรียนที่ 1 เป้าหมายของการฝึกการถดถอยเชิงเส้นคือการสามารถวาดเส้นเพื่อ:
ตามที่คุณได้เรียนรู้ในบทที่ 1 เป้าหมายของการฝึกการถดถอยเชิงเส้นคือการวางเส้นตรงที่:
- **แสดงความสัมพันธ์ระหว่างตัวแปร** แสดงความสัมพันธ์ระหว่างตัวแปรต่าง ๆ
- **ทำการทำนาย** ทำนายได้อย่างแม่นยำว่าจุดข้อมูลใหม่จะตกอยู่ที่ไหนเมื่อเทียบกับเส้นนั้น
- **แสดงความสัมพันธ์ระหว่างตัวแปร** แสดงความสัมพันธ์ระหว่างตัวแปร
- **ทำนายผลลัพธ์** ทำนายค่าที่ถูกต้องว่าจุดข้อมูลใหม่จะอยู่ที่ใดในความสัมพันธ์กับเส้นนั้น
โดยปกติจะใช้วิธี **Least-Squares Regression** ในการวาดเส้นแบบนี้ คำว่า Least-Squares หมายถึงกระบวนการลดข้อผิดพลาดโดยรวมของโมเดลให้ต่ำที่สุด สำหรับทุกจุดข้อมูล เราวัดระยะทางแนวตั้ง (เรียกว่า residual) ระหว่างจุดจริงกับเส้นถดถอยของเรา
โดยปกติสำหรับ **Least-Squares Regression** จะใช้การวาดเส้นแบบนี้ คำว่า "Least-Squares" หมายถึงกระบวนการของการหาค่าความผิดพลาดรวมทั้งหมดให้น้อยที่สุดในโมเดลของเรา สำหรับทุกจุดข้อมูล เราจะวัดระยะทางในแนวดิ่ง (ซึ่งเรียกว่า residual) ระหว่างจุดจริงกับเส้นถดถอยของเรา
เรายกกำลังสองระยะทางเหล่านี้ด้วยเหตุผล 2 ประการหลัก:
เราจะกำหนดค่ายกกำลังสองของระยะทางเหตุผลสำคัญสองประการคือ:
1. **ขนาดมากกว่าทิศทาง:** เราต้องการที่จะมองว่าข้อผิดพลาด -5 กับ +5 มีค่าเท่ากัน การยกกำลังสองจะทำให้ค่าทั้งหมดเป็นบวก
2. **ลงโทษค่าผิดพลาดที่สูงกว่า:** การยกกำลังสองทำให้ข้อผิดพลาดที่ใหญ่กว่าถูกให้น้ำหนักมากขึ้น ทำให้เส้นถดถอยต้องอยู่ใกล้กับจุดที่อยู่ไกลออกไปมากกว่า
1. **ขนาดไม่สนทิศทาง:** เราต้องการให้ความผิดพลาด -5 มีค่าเหมือนกับความผิดพลาด +5 การยกกำลังสองทำให้ค่าทั้งหมดเป็นบวก
2. **ลงโทษค่าเบี่ยงเบนสูง:** การยกกำลังสองทำให้ค่าความผิดพลาดมากถูกเน้นหนักขึ้น บังคับให้เส้นต้องอยู่ใกล้กับจุดที่ห่างไกลมากกว่า
จากนั้นเราจะนำค่ากำลังสองทั้งหมดมารวมกัน เป้าหมายของเราคือหาค่าเส้นที่ผลบวกนี้มีค่าน้อยที่สุด (ค่าที่เล็กที่สุด) จึงเรียกว่า "Least-Squares"
จากนั้นเราจะนำค่ากำลังสองเหล่านี้ทั้งหมดมาบวกกัน เป้าหมายของเราคือการหาค่าของเส้นที่มีผลรวมค่ากำลังสองน้อยที่สุด (ค่าน้อยสุดที่เป็นไปได้) — จึงเป็นที่มาของคำว่า "Least-Squares"
> **🧮 แสดงคณิตศาสตร์ให้ดู**
>
> เส้นนี้เรียกว่า _เส้นที่เหมาะสมที่สุด_ สามารถแสดงได้ด้วย [สูตรสมการ](https://en.wikipedia.org/wiki/Simple_linear_regression):
> เส้นนี้เรียกว่า _เส้นที่ทำให้เหมาะสมที่สุด_ (line of best fit) สามารถเขียนแทนด้วย [สมการ](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` คือ 'ตัวแปรอธิบาย' และ `Y` คือ 'ตัวแปรตาม' ความชันของเส้นคือ `b` และ `a` คือจุดตัดแกน y ซึ่งหมายถึงค่าของ `Y` เมื่อ `X = 0`
>
>![calculate the slope](../../../../translated_images/th/slope.f3c9d5910ddbfcf9.webp)
>
> ขั้นแรกคำนวณความชัน `b` อินโฟกราฟิกโดย [Jen Looper](https://twitter.com/jenlooper)
>
> กล่าวอีกนัยหนึ่ง และอ้างอิงคำถามดั้งเดิมของข้อมูลฟักทอง: "ทำนายราคาฟักทองต่อบัชเชิลตามเดือน" `X` จะหมายถึงราคา และ `Y` จะหมายถึงเดือนของการขาย
>
>![complete the equation](../../../../translated_images/th/calculation.a209813050a1ddb1.webp)
>
> คำนวณค่า Y หากคุณจ่ายเงินประมาณ 4 ดอลลาร์ ต้องเป็นเดือนเมษายนแน่ๆ อินโฟกราฟิกโดย [Jen Looper](https://twitter.com/jenlooper)
>
> คณิตศาสตร์ที่คำนวณเส้นต้องแสดงความชันของเส้นซึ่งขึ้นอยู่กับจุดตัดแกน y หรือที่ที่ `Y` อยู่เมื่อ `X = 0`
>
> คุณสามารถดูวิธีการคำนวณค่านี้ได้จากเว็บไซต์ [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) และสามารถไปที่ [เครื่องมือคำนวณ Least-squares](https://www.mathsisfun.com/data/least-squares-calculator.html) เพื่อดูผลกระทบของค่าตัวเลขต่อเส้นได้
> `X` คือ 'ตัวแปรอธิบาย' ส่วน `Y` คือ 'ตัวแปรตาม' ความชันของเส้นคือ `b` และ `a` คือจุดตัดแกน y ซึ่งหมายถึงค่าของ `Y` เมื่อ `X = 0`
>
>![calculate the slope](../../../../translated_images/th/slope.f3c9d5910ddbfcf9.webp)
>
> ขั้นแรก คำนวณความชัน `b` อินโฟกราฟิกโดย [Jen Looper](https://twitter.com/jenlooper)
>
> กล่าวอีกนัยหนึ่ง และอ้างอิงกับคำถามของข้อมูลฟักทอง "ทำนายราคาฟักทองต่อบัชเซลตามเดือน" โดยที่ `X` หมายถึงราคาและ `Y` หมายถึงเดือนที่ขาย
>
>![complete the equation](../../../../translated_images/th/calculation.a209813050a1ddb1.webp)
>
> คำนวณค่า Y ถ้าคุณจ่ายประมาณ 4 ดอลลาร์ นั่นต้องเป็นเดือนเมษายนแน่ๆ! อินโฟกราฟิกโดย [Jen Looper](https://twitter.com/jenlooper)
>
> คณิตศาสตร์ที่ใช้คำนวณเส้นนี้จำเป็นต้องแสดงความชันของเส้น ซึ่งยังขึ้นอยู่กับจุดตัด (intercept) หรือที่ที่ `Y` อยู่เมื่อ `X = 0`
>
> คุณสามารถดูวิธีการคำนวณค่าพวกนี้ได้ที่เว็บ [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 จะมีค่าสหสัมพันธ์ต่ำ
โมเดลการถดถอยเชิงเส้นที่ดีจะมีค่าสัมประสิทธิ์สหสัมพันธ์สูง (ใกล้ 1 มากกว่า 0) โดยใช้วิธี Least-Squares Regression กับเส้นถดถอย
โมเดลถดถอยเชิงเส้นที่ดีจะต้องมีค่าสหสัมพันธ์สูง (ใกล้เคียง 1 มากกว่า 0) โดยใช้วิธีการ Least-Squares Regression กับเส้นถดถอย
✅ รันโน้ตบุ๊กที่แนบมากับบทเรียนนี้และดูกราฟกระจายระหว่างเดือนกับราคา ข้อมูลที่สัมพันธ์ระหว่างเดือนและราคาฟักทองมีค่าสหสัมพันธ์สูงหรือต่ำตามการตีความด้วยตาเปล่าของคุณจากกราฟกระจายหรือไม่? ถ้าใช้ค่าที่ละเอียดกว่านี้แทน `Month` เช่น *วันภายในปี* (จำนวนวันนับตั้งแต่ปีเริ่มต้น) จะเปลี่ยนแปลงอย่างไร?
✅ รันโน้ตบุ๊กที่แนบมากับบทเรียนนี้ และดูกราฟกระจาย Month กับ Price ข้อมูลที่สัมพันธ์กันระหว่างเดือนและราคาของยอดขายฟักทองดูเหมือนว่ามีค่าสหสัมพันธ์สูงหรือต่ำ ตามการตีความจากการแสดงผลกราฟกระจายของคุณหรือไม่? ค่านี้เปลี่ยนแปลงหรือไม่ถ้าคุณใช้มาตรวัดที่ละเอียดขึ้นแทน `Month` เช่น *วันในปี* (จำนวนวันตั้งแต่ต้นปี)?
ในโค้ดด้านล่างนี้ เราจะสมมุติว่าข้อมูลถูกทำความสะอาดแล้ว และได้ DataFrame ชื่อ `new_pumpkins` ดังนี้:
ในโค้ดด้านล่างนี้ เราจะสมมติว่าเราได้ทำความสะอาดข้อมูลแล้ว และได้ DataFrame ชื่อ `new_pumpkins` ซึ่งมีลักษณะดังนี้:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
---|-------|-----------|---------|------|---------|-----------|------------|-------
@ -101,36 +100,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> โค้ดในการทำความสะอาดข้อมูลหาได้ใน [`notebook.ipynb`](notebook.ipynb) เราทำการทำความสะอาดแบบเดียวกับบทก่อนหน้าและคำนวณคอลัมน์ `DayOfYear` ด้วยนิพจน์ต่อไปนี้:
> โค้ดสำหรับการทำความสะอาดข้อมูลอยู่ใน [`notebook.ipynb`](notebook.ipynb) เราได้ดำเนินการทำความสะอาดเหมือนในบทเรียนก่อนหน้า และคำนวณคอลัมน์ `DayOfYear` โดยใช้สมการดังนี้:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
ตอนนี้คุณเข้าใจคณิตศาสตร์เบื้องหลังการถดถอยเชิงเส้นแล้ว มาเราสร้างโมเดลการถดถอยเพื่อดูว่าเราสามารถทำนายได้หรือไม่ว่าชุดฟักทองใดจะมีราคาที่ดีที่สุด ใครก็ตามที่ซื้อฟักทองสำหรับเทศกาลฟักทองอาจต้องการข้อมูลนี้เพื่อการตัดสินใจซื้อชุดฟักทองให้เหมาะสม
ตอนนี้คุณมีความเข้าใจคณิตศาสตร์เบื้องหลังการถดถอยเชิงเส้นแล้ว เรามาสร้างโมเดลการถดถอยเพื่อดูว่าเราสามารถทำนายได้หรือไม่ว่าฟักทองแบบไหนจะมีราคาดีที่สุด ใครที่ซื้อฟักทองสำหรับแปลงฟักทองในช่วงวันหยุดอาจจะต้องการข้อมูลนี้เพื่อวางแผนการซื้อฟักทองให้เหมาะสมกับแปลงดังกล่าว
## การค้นหาความสัมพันธ์
## การหาค่าสหสัมพันธ์ (Looking for Correlation)
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 คลิกที่ภาพด้านบนเพื่อชมวิดีโอสั้นๆ เกี่ยวกับภาพรวมของความสัมพันธ์
> 🎥 คลิกที่ภาพด้านบนเพื่อชมวิดีโอสั้นๆ แนะนำเรื่องการหาค่าสหสัมพันธ์
จากบทเรียนก่อนหน้า คุณอาจจะเห็นว่าราคากลางของแต่ละเดือนมีลักษณะดังนี้:
จากบทเรียนก่อนหน้านี้ คุณอาจเห็นว่าราคาฟักทองเฉลี่ยสำหรับแต่ละเดือนเป็นดังนี้:
<img alt="Average price by month" src="../../../../translated_images/th/barchart.a833ea9194346d76.webp" width="50%"/>
ซึ่งแสดงว่าต้องมีความสัมพันธ์บางอย่าง และเราสามารถลองฝึกโมเดลการถดถอยเชิงเส้นเพื่อทำนายความสัมพันธ์ระหว่าง `Month` กับ `Price` หรือระหว่าง `DayOfYear` กับ `Price` ได้ นี่คือกราฟกระจายที่แสดงความสัมพันธ์หลัง:
ซึ่งบ่งชี้ว่าควรมีความสัมพันธ์ และเราสามารถลองฝึกโมเดลถดถอยเชิงเส้นเพื่อทำนายความสัมพันธ์ระหว่าง `Month` กับ `Price` หรือระหว่าง `DayOfYear` กับ `Price` ได้ ดังนี้เป็นกราฟกระจายที่แสดงความสัมพันธ์หลัง:
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/th/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
ลองดูความสัมพันธ์โดยใช้ฟังก์ชัน `corr`:
มาดูว่ามีความสัมพันธ์หรือไม่โดยใช้ฟังก์ชัน `corr`:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
ดูเหมือนว่าค่าสหสัมพันธ์จะค่อนข้างต่ำ คือ -0.15 สำหรับ `Month` และ -0.17 สำหรับ `DayOfMonth` แต่น่าจะมีความสัมพันธ์อื่นที่น่าสนใจ ดูเหมือนว่ามีกลุ่มราคาที่แตกต่างกันตามชนิดฟักทอง เพื่อยืนยันสมมติฐานนี้ ลองพล็อตค่าฟักทองแต่ละประเภทด้วยสีที่แตกต่างกัน โดยส่งพารามิเตอร์ `ax` ไปยังฟังก์ชัน `scatter` เพื่อพล็อตจุดทั้งหมดบนกราฟเดียวกัน:
ดูเหมือนว่าค่าสหสัมพันธ์จะน้อยมาก คือ -0.15 โดย `Month` และ -0.17 โดย `DayOfYear` แต่ดูเหมือนว่าจะมีความสัมพันธ์สำคัญอีกประการหนึ่ง คือ ราคาที่แตกต่างกันมีคลัสเตอร์ที่สัมพันธ์กับพันธุ์ฟักทองต่าง ๆ เพื่อยืนยันสมมติฐานนี้ ให้ลองแสดงแต่ละหมวดหมู่ของฟักทองโดยใช้สีที่ต่างกัน การส่งพารามิเตอร์ `ax` ให้กับฟังก์ชัน `scatter` จะช่วยให้เราสามารถแสดงจุดทั้งหมดบนกราฟเดียวกันได้:
```python
ax=None
@ -142,41 +141,41 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/th/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
การสืบสวนของเราชี้ว่าชนิดฟักทองมีผลต่อราคามากกว่าวันขายจริง ซึ่งจะเห็นได้ชัดในกราฟแท่ง:
การสำรวจของเราชี้ให้เห็นว่าพันธุ์ฟักทองมีผลกระทบต่อราคามากกว่าวันที่ขายจริง เราสามารถเห็นได้จากกราฟแท่ง:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Bar graph of price vs variety" src="../../../../translated_images/th/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Bar graph of price vs variety" src="../../../../translated_images/th/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
ขอให้เรามุ่งความสนใจชั่วคราวไปที่ฟักทองชนิดเดียว คือ 'pie type' และดูผลกระทบของวันที่กับราคาฟักทอง:
มุ่งความสนใจช่วงนี้ไปที่พันธุ์ฟักทองเดียวคือ 'pie type' และดูผลของวันที่มีต่อราคา:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/th/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/th/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
ถ้าเราคำนวณค่าสหสัมพันธ์ระหว่าง `Price` และ `DayOfYear`้วยฟังก์ชัน `corr` จะได้ค่าประมาณ `-0.27` ซึ่งหมายความว่าการฝึกโมเดลทำนายเป็นเรื่องสมเหตุสมผล
ถ้าเราคำนวณค่าสหสัมพันธ์ระหว่าง `Price` และ `DayOfYear` ดยใช้ฟังก์ชัน `corr` จะได้ประมาณ `-0.27` ซึ่งหมายความว่าการฝึกโมเดลทำนายนั้นมีเหตุผล
> ก่อนฝึกโมเดลการถดถอยเชิงเส้น สิ่งสำคัญคือให้แน่ใจว่าข้อมูลของเราสะอาด เพราะการถดถอยเชิงเส้นทำงานไม่ดีเมื่อมีค่าว่าง จึงควรลบเซลล์ว่างทั้งหมด:
> ก่อนฝึกโมเดลถดถอยเชิงเส้น ควรแน่ใจว่าข้อมูลของเราสะอาดดี การถดถอยเชิงเส้นทำงานได้ไม่ดีเมื่อมีค่าว่าง จึงควรกำจัดช่องว่างทั้งหมดออก:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
อีกวิธีหนึ่งคือเติมค่าในช่องว่างเหล่านั้นด้วยค่าค่าเฉลี่ยของคอลัมน์นั้น
อีกทางเลือกหนึ่งคือเติมช่องว่างเหล่านั้นด้วยค่าเฉลี่ยของคอลัมน์นั้น
## การถดถอยเชิงเส้นอย่างง่าย
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 คลิกที่ภาพด้านบนเพื่อชมวิดีโอสั้นๆ เกี่ยวกับภาพรวมของการถดถอยเชิงเส้นและพหุนาม
> 🎥 คลิกที่ภาพด้านบนเพื่อชมวิดีโอแนะนำการถดถอยเชิงเส้นและถดถอยพหุนาม
เพื่อฝึกโมเดล Linear Regression เราจะใช้ไลบรารี **Scikit-learn**
ในการฝึกโมเดลถดถอยเชิงเส้น เราจะใช้ไลบรารี **Scikit-learn**
```python
from sklearn.linear_model import LinearRegression
@ -184,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
เริ่มจากแยกค่าอินพุต (คุณลักษณะ) และผลลัพธ์ที่คาดหวัง (ป้ายชื่อ) ออกเป็นอาร์เรย์ numpy แยกกัน:
เราจะเริ่มต้นโดยการแยกค่าข้อมูลนำเข้า (features) และผลลัพธ์ที่ต้องการ (label) เป็น numpy arrays แยกกัน:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> โปรดสังเกตว่าเราต้องทำการ `reshape` กับข้อมูลอินพุตเพื่อให้แพ็กเกจ Linear Regression เข้าใจถูกต้อง Linear Regression ต้องการอาร์เรย์สองมิติที่แต่ละแถวเป็นเวกเตอร์คุณลักษณะอินพุต ในกรณีนี้เนื่องจากเรามีแค่คุณลักษณะเดียว เราจึงต้องการอาร์เรย์รูปทรง N&times;1 โดยที่ N คือขนาดข้อมูล
> โปรดทราบว่าเราต้องทำ `reshape` กับข้อมูลนำเข้าเพื่อให้แพ็กเกจ Linear Regression เข้าใจอย่างถูกต้อง Linear Regression คาดหวังข้อมูลนำเข้าเป็นอาร์เรย์ 2 มิติ โดยแต่ละแถวคือเวกเตอร์ของลักษณะนำเข้า กรณีของเราเนื่องจากมีข้อมูลนำเข้าเพียงตัวเดียว จึงต้องใช้อาร์เรย์ขนาด N×1 โดยที่ N คือจำนวนขนาดชุดข้อมูล
จากนั้นเราต้องแบ่งข้อมูลออกเป็นชุดฝึก (train) และชุดทดสอบ (test) เพื่อยืนยันโมเดลหลังการฝึก:
จากนั้น เราจำเป็นต้องแบ่งข้อมูลออกเป็นชุดฝึกสอนและชุดทดสอบ เพื่อที่เราจะได้ตรวจสอบโมเดลหลังจากฝึกสอนเสร็จ:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
สุดท้าย การฝึกโมเดล Linear Regression จริงๆ ใช้แค่สองบรรทัดโค้ด เราสร้างอ็อบเจ็กต์ `LinearRegression` และฟิตโมเดลกับข้อมูลโดยใช้เมธอด `fit`:
สุดท้าย การฝึกโมเดล Linear Regression จริงๆ ใช้เพียงสองบรรทัดของโค้ด เรานิยามอ็อบเจ็กต์ `LinearRegression` และทำการ fit กับข้อมูลของเราโดยใช้เมธอด `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
อ็อบเจกต์ `LinearRegression` หลังจากที่ได้ `fit` แล้วจะมีค่าสัมประสิทธิ์ทั้งหมดของการถดถอยซึ่งสามารถเข้าถึงได้โดยใช้คุณสมบัติ `.coef_` ในกรณีของเรา มีสัมประสิทธิ์เพียงตัวเดียวซึ่งควรจะประมาณ `-0.017` ซึ่งหมายความว่าราคาดูเหมือนจะลดลงเล็กน้อยตามเวลา แต่ไม่มากนัก ราวๆ 2 เซนต์ต่อวัน เรายังสามารถเข้าถึงจุดตัดของเส้นถดถอยกับแกน Y ได้โดยใช้ `lin_reg.intercept_` ซึ่งในกรณีของเราจะอยู่ประมาณ `21` ซึ่งบ่งชี้ราคาตอนต้นปี
อ็อบเจกต์ `LinearRegression` หลังจากที่ทำการ `fit` แล้ว จะเก็บค่าสัมประสิทธิ์ของการถดถอยทั้งหมดไว้ ซึ่งสามารถเข้าถึงได้โดยใช้คุณสมบัติ `.coef_` ในกรณีของเรา จะมีค่าสัมประสิทธิ์เพียงค่าเดียว ซึ่งควรจะประมาณ `-0.017` ซึ่งหมายความว่าราคามีแนวโน้มที่จะลดลงเล็กน้อยตามเวลาที่ผ่านไป แต่ไม่มาก ประมาณ 2 เซนต์ต่อวัน เรายังสามารถเข้าถึงจุดตัดแกน Y ของเส้นถดถอยได้โดยใช้ `lin_reg.intercept_` ซึ่งในกรณีของเราจะประมาณ `21` บ่งบอกถึงราคาตั้งแต่ต้นปี
เพื่อดูว่าโมเดลของเรามีความแม่นยำแค่ไหน เราสามารถทำนายราคาบนชุดข้อมูลทดสอบ และวัดว่าการทำนายของเราใกล้เคียงกับค่าที่คาดหวังแค่ไหน ซึ่งสามารถทำได้โดยใช้เมตริกค่า root mean square error (RMSE) ซึ่งเป็นรากที่ของค่าเฉลี่ยของความแตกต่างยกกำลังสองทั้งหมดระหว่างค่าที่คาดหวังและค่าที่ทำนาย
เพื่อดูว่าโมเดลของเรามีความแม่นยำเพียงใด เราสามารถทำนายราคาบนชุดข้อมูลทดสอบ จากนั้นวัดความใกล้เคียงระหว่างค่าทำนายกับค่าที่คาดไว้ ซึ่งสามารถทำได้โดยใช้เมตริก root mean square error (RMSE) ซึ่งคือรากที่สองของค่าเฉลี่ยของผลต่างกำลังสองทั้งหมดระหว่างค่าที่คาดหวังและค่าทำนาย
```python
pred = lin_reg.predict(X_test)
@ -217,15 +216,15 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
ข้อผิดพลาดของเราดูเหมือนจะอยู่ประมาณ 2 จุด ซึ่งราวๆ ~17% ซึ่งไม่ดีนัก อีกตัวบ่งชี้คุณภาพของโมเดลคือ **coefficient of determination** ซึ่งสามารถหาได้ดังนี้:
ข้อผิดพลาดของเราดูเหมือนจะประมาณ 2 จุด ซึ่งประมาณ ~17% ไม่ค่อยดีนัก ตัวชี้วัดอีกอย่างหนึ่งของคุณภาพโมเดลคือ **coefficient of determination** ซึ่งสามารถคำนวณได้ดังนี้:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
ถ้าค่าคือ 0 หมายความว่าโมเดลไม่ได้พิจารณาข้อมูลนำเข้า และทำหน้าที่เหมือน *linear predictor ที่แย่ที่สุด* ซึ่งคือค่าเฉลี่ยของผลลัพธ์ ค่าของ 1 หมายความว่าเราสามารถทำนายเอาต์พุตทั้งหมดได้อย่างสมบูรณ์ ในกรณีของเรา ค่าสัมประสิทธิ์อยู่ที่ประมาณ 0.06 ซึ่งค่อนข้างต่ำ
ถ้าค่าเท่ากับ 0 หมายความว่าโมเดลไม่สนใจข้อมูลอินพุต และทำหน้าที่เป็น *ผู้ทำนายเชิงเส้นที่แย่ที่สุด* ซึ่งก็คือค่าเฉลี่ยของผลลัพธ์ ค่าที่เท่ากับ 1 หมายความว่าเราสามารถทำนายผลลัพธ์ทั้งหมดได้อย่างสมบูรณ์ ในกรณีของเราค่าสัมประสิทธิ์นี้อยู่ที่ประมาณ 0.06 ซึ่งค่อนข้างต่ำ
เรายังสามารถวาดกราฟข้อมูลทดสอบพร้อมกับเส้นถดถอยเพื่อดูว่าเส้นถดถอยทำงานอย่างไรในกรณีของเราได้อีกด้วย:
เรายังสามารถวาดกราฟข้อมูลทดสอบพร้อมกับเส้นถดถอยเพื่อดูว่าเส้นถดถอยทำงานอย่างไรในกรณีของเราได้ดีขึ้น:
```python
plt.scatter(X_test,y_test)
@ -234,19 +233,19 @@ plt.plot(X_test,pred)
<img alt="Linear regression" src="../../../../translated_images/th/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## การถดถอยแบบพหุนาม (Polynomial Regression)
## การถดถอยเชิงพหุนาม (Polynomial Regression)
อีกประเภทหนึ่งของ Linear Regression คือ Polynomial Regression ในบางครั้งความสัมพันธ์ระหว่างตัวแปรเป็นแบบเชิงเส้น เช่น ยิ่งฟักทองมีปริมาตรมาก ราคาก็จะสูงขึ้น แต่บางครั้งความสัมพันธ์เหล่านี้ไม่สามารถแสดงบนระนาบหรือเส้นตรงได้
ประเภทหนึ่งของ Linear Regression คือ Polynomial Regression บางครั้งความสัมพันธ์ระหว่างตัวแปรเป็นเชิงเส้น เช่น ยิ่งฟักทองมีปริมาตรมาก ราคาก็สูงขึ้น แต่บางครั้งความสัมพันธ์เหล่านี้ไม่สามารถแสดงในรูปแบบระนาบหรือเส้นตรงได้
✅ นี่คือ [ตัวอย่างเพิ่มเติม](https://online.stat.psu.edu/stat501/lesson/9/9.8) ของข้อมูลที่สามารถใช้ Polynomial Regression
✅ นี่คือ [ตัวอย่างเพิ่มเติม](https://online.stat.psu.edu/stat501/lesson/9/9.8) ของข้อมูลที่สามารถใช้ Polynomial Regression ได้
ลองดูความสัมพันธ์ระหว่าง Date กับ Price อีกครั้ง พล็อตแบบกระจายนี้ดูเหมือนควรได้รับการวิเคราะห์ด้วยเส้นตรงใช่ไหม? ราคาสามารถเปลี่ยนแปลงขึ้นลงได้หรือเปล่า? ในกรณีนี้คุณสามารถลองใช้ Polynomial Regression ได้
ลองดูความสัมพันธ์ระหว่าง Date และ Price อีกครั้ง กราฟกระจัดกระจายนี้ดูเหมือนว่าจะต้องวิเคราะห์โดยเส้นตรงเสมอหรือไม่? ราคาสามารถผันผวนได้หรือไม่? ในกรณีนี้ คุณสามารถลองใช้ polynomial regression ได้
✅ พหุนามคือสมการคณิตศาสตร์ที่อาจประกอบด้วยตัวแปรหนึ่งตัวหรือมากกว่าและสัมประสิทธิ์
✅ พหุนามคือสมการทางคณิตศาสตร์ที่ประกอบด้วยตัวแปรและสัมประสิทธิ์หนึ่งตัวหรือมากกว่า
Polynomial regression สร้างเส้นโค้งเพื่อให้พอดีกับข้อมูลที่ไม่เชิงเส้นได้ดีขึ้น ในกรณีของเรา ถ้าเราเพิ่มตัวแปร `DayOfYear` กำลังสองลงในการป้อนข้อมูล เราควรจะสามารถพอดีกับข้อมูลของเราด้วยเส้นโค้งพาราโบลาที่มีค่าต่ำสุดในจุดหนึ่งภายในปีได้
Polynomial regression จะสร้างเส้นโค้งเพื่อให้เหมาะกับข้อมูลที่ไม่เชิงเส้นได้ดีขึ้น ในกรณีของเรา หากเรารวมตัวแปร `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** คือสายโซ่ของ **estimators** ในกรณีของเรา เราจะสร้าง pipeline ที่เพิ่มคุณสมบัติพหุนามเข้าสู่โมเดลก่อน จากนั้นจึงฝึกเส้นถดถอย:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -257,36 +256,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
การใช้ `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> นอกจากนี้เรายังสามารถใช้พหุนามที่มีดีกรีสูงกว่าถ้าต้องการ
Pipeline สามารถใช้เหมือนอ็อบเจกต์ `LinearRegression` ดั้งเดิมได้ เช่น เราสามารถ `fit` pipeline แล้วใช้ `predict` เพื่อรับผลลัพธ์การทำนาย:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
เพื่อวาดกราฟเส้นโค้งประมาณอย่างราบรื่น เราใช้ `np.linspace` เพื่อสร้างช่วงอินพุตที่สม่ำเสมอ แทนการวาดบนข้อมูลทดสอบที่ไม่เรียงลำดับโดยตรง (ซึ่งจะได้เส้นซิกแซก):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Pipeline สามารถใช้เหมือนกับอ็อบเจ็กต์ `LinearRegression` เดิม เช่น เราสามารถ `fit` pipeline แล้วใช้ `predict` เพื่อรับผลการทำนาย นี่คือกราฟที่แสดงข้อมูลทดสอบ และเส้นโค้งประมาณค่า:
นี่คือกราฟแสดงข้อมูลทดสอบและเส้นโค้งประมาณ:
<img alt="Polynomial regression" src="../../../../translated_images/th/poly-results.ee587348f0f1f60b.webp" width="50%" />
ใช้ Polynomial Regression เราจะได้ค่า MSE ต่ำลงเล็กน้อยและค่าการกำหนดสูงขึ้น แต่ไม่มากนัก เราจำเป็นต้องพิจารณาคุณลักษณะอื่นด้วย!
การใช้ Polynomial Regression จะช่วยลด RMSE ลงเล็กน้อยและเพิ่มค่าค่าสัมประสิทธิ์การกำหนด แต่ไม่มากนัก เราต้องพิจารณาคุณสมบัติอื่น ๆ ด้วย!
> คุณเห็นไหมว่าราคาฟักทองต่ำสุดจะอยู่ช่วงราวๆ ฮาโลวีน คุณอธิบายเรื่องนี้อย่างไร?
> คุณเห็นราคาฟักทองต่ำสุดอยู่บริเวณวันฮาโลวีนใช่ไหม? คุณอธิบายเรื่องนี้อย่างไร?
🎃 ยินดีด้วย คุณเพิ่งสร้างโมเดลที่ช่วยทำนายราคาฟักทองพายได้แล้ว คุณอาจจะทำซ้ำขั้นตอนเดียวกันนี้สำหรับฟักทองชนิดอื่นๆ แต่คงจะน่าเบื่อ เรามาเรียนรู้วิธีนำหลายชนิดฟักทองมาใช้ในโมเดลกัน!
🎃 ยินดีด้วย คุณเพิ่งสร้างโมเดลที่ช่วยทำนายราคาฟักทองพายได้ คุณสามารถทำซ้ำขั้นตอนนี้สำหรับฟักทองชนิดอื่นได้ แต่จะทำงานหนักมาก ตอนนี้เรามาเรียนรู้วิธีจัดการกับพันธุ์ฟักทองในโมเดลของเรากันเถอะ!
## คุณลักษณะเชิงกลุ่ม (Categorical Features)
## คุณสมบัติแบบเชิงหมวดหมู่ (Categorical Features)
ในโลกที่สมบูรณ์แบบ เราต้องการทำนายราคาสำหรับฟักทองชนิดต่างๆโดยใช้โมเดลเดียวกัน อย่างไรก็ตาม คอลัมน์ `Variety` แตกต่างจากคอลัมน์เช่น `Month` เพราะมีค่าที่ไม่ใช่ตัวเลข คอลัมน์เหล่านี้เรียกว่า **เชิงหมวดหมู่ (categorical)**
ในโลกที่สมบูรณ์แบบ เราต้องการทำนายราคาสำหรับฟักทองหลากหลายพันธุ์โดยใช้โมเดลเดียวกัน อย่างไรก็ตาม คอลัมน์ `Variety` จะแตกต่างจากคอลัมน์ เช่น `Month` เพราะมีค่าที่ไม่ใช่ตัวเลข คอลัมน์เหล่านี้เรียกว่า **categorical**
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการใช้คุณลักษณะเชิงหมวดหมู่
> 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอแนะนำสั้น ๆ เกี่ยวกับการใช้คุณสมบัติแบบเชิงหมวดหมู่
นี่คือภาพแสดงว่าราคากลางขึ้นอยู่กับชนิดฟักทองอย่างไร:
นี่คือกราฟแสดงว่าราคากลางขึ้นอยู่กับพันธุ์ฟักทองอย่างไร:
<img alt="Average price by variety" src="../../../../translated_images/th/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
เพื่อพิจารณาชนิดฟักทอง เราต้องแปลงค่าให้เป็นตัวเลข หรือที่เรียกว่า **การเข้ารหัส (encoding)** มีหลายวิธีที่เราทำได้:
เพื่อพิจารณาพันธุ์ฟักทอง เราจำเป็นต้องแปลงข้อมูลเป็นรูปแบบตัวเลข หรือที่เรียกว่า **encoding** ซึ่งมีหลายวิธีดังนี้:
* การ **เข้ารหัสเชิงตัวเลขแบบง่ายๆ** จะสร้างตารางของชนิดฟักทองที่แตกต่างกัน แล้วแทนที่ชื่อชนิดด้วยดัชนีในตารางนั้น วิธีนี้ไม่เหมาะกับ Linear Regression เพราะ Linear Regression จะนำค่าตัวเลขของดัชนีไปคำนวณและคูณด้วยสัมประสิทธิ์ ในกรณีของเรา ความสัมพันธ์ระหว่างหมายเลขดัชนีและราคาไม่เป็นเชิงเส้นชัดเจน แม้เราจะจัดเรียงดัชนีให้อยู่ตามลำดับเฉพาะก็ตาม
* การ **เข้ารหัสแบบ one-hot** จะแทนที่คอลัมน์ `Variety` ด้วย 4 คอลัมน์แยกต่างหาก หนึ่งคอลัมน์สำหรับแต่ละชนิด แต่ละคอลัมน์จะมีค่าเป็น `1` ถ้าแถวตรงกับชนิดนั้น และ `0` ในกรณีอื่นๆ ซึ่งหมายความว่าจะมีสี่สัมประสิทธิ์ใน Linear Regression หนึ่งสัมประสิทธิ์สำหรับแต่ละชนิดฟักทอง รับหน้าที่เป็น "ราคาฐาน" (หรือจริงๆ คือ "ราคาที่เพิ่มขึ้น") สำหรับชนิดนั้น
* การ **เข้ารหัสตัวเลขอย่างง่าย** จะสร้างตารางของพันธุ์ต่าง ๆ แล้วแทนชื่อพันธุ์ด้วยดัชนีในตารางนั้น แต่วิธีนี้ไม่เหมาะกับ linear regression เพราะ linear regression จะใช้ค่าตัวเลขจริงของดัชนีและนำไปคูณกับสัมประสิทธิ์ ในกรณีของเรา ความสัมพันธ์ระหว่างดัชนีและราคาชัดเจนว่าไม่เป็นเชิงเส้น แม้เราจะจัดลำดับดัชนีอย่างระมัดระวัง
* การ **เข้ารหัสแบบ one-hot** จะเปลี่ยนคอลัมน์ `Variety` เป็นสี่คอลัมน์ คือแต่ละพันธุ์ มีค่า `1` หากแถวที่สอดคล้องเป็นพันธุ์นั้น และ `0` ถ้าไม่ใช่ หมายความว่าจะมีสี่ค่าสัมประสิทธิ์ในการถดถอยเชิงเส้น สำหรับแต่ละพันธุ์โดยรับผิดชอบต่อ "ราคาตั้งต้น" (หรือ "ราคาพิเศษ") สำหรับพันธุ์นั้น ๆ
ตัวอย่างโค้ดด้านล่างแสดงวิธีการเข้ารหัสชนิดฟักทองแบบ one-hot:
โค้ดด้านล่างนี้แสดงวิธีการ one-hot encode พันธุ์ฟักทอง:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -303,14 +324,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
ในการฝึก Linear Regression โดยใช้ชนิดฟักทองที่เข้ารหัสแบบ one-hot เป็นอินพุต เราเพียงแค่ต้องกำหนดค่า `X` และ `y` ให้ถูกต้อง:
เพื่อฝึก Linear Regression โดยใช้ข้อมูลพันธุ์ที่ถูก one-hot encode เป็นอินพุต เราเพียงแค่ต้องนิยามข้อมูล `X` และ `y` ให้ถูกต้อง:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
ส่วนที่เหลือของโค้ดยังคงเหมือนกับที่เราใช้ด้านบนในการฝึก Linear Regression หากทำตามนี้ คุณจะเห็นว่า mean squared error ประมาณเท่าเดิม แต่ค่าสัมประสิทธิ์การกำหนดเพิ่มขึ้นสูงมาก (~77%) เพื่อให้ได้การทำนายที่แม่นยำขึ้นอีก เราสามารถนำคุณลักษณะเชิงกลุ่มอื่นๆ รวมทั้งคุณลักษณะเชิงตัวเลข เช่น `Month` หรือ `DayOfYear` มารวมกันได้ โดยใช้ `join`:
ส่วนที่เหลือของโค้ดยังคงเหมือนเดิมกับที่เราใช้ฝึก Linear Regression หากลองทำจะพบว่าค่าเฉลี่ยของความผิดพลาดกำลังสองไม่เปลี่ยนแปลงมากนักแต่ค่าสัมประสิทธิ์การกำหนดสูงขึ้นมาก (~77%) เพื่อให้ทำนายได้แม่นยำยิ่งขึ้น เราสามารถนำคุณสมบัติเชิงหมวดหมู่อื่น ๆ เข้ามาร่วมกับคุณสมบัติตัวเลข เช่น `Month` หรือ `DayOfYear` เพื่อรวมคุณสมบัติทั้งหมดเป็นอาเรย์เดียวโดยใช้ `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -320,62 +341,62 @@ 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 และเชิงตัวเลข) จากตัวอย่างด้านบนร่วมกับ Polynomial Regression นี่คือโค้ดครบถ้วนเพื่อความสะดวกของคุณ:
เพื่อสร้างโมเดลที่ดีที่สุด เราสามารถใช้ข้อมูลรวม (categorical แบบ one-hot encoded + ตัวเลข) จากตัวอย่างข้างต้นร่วมกับ Polynomial Regression นี่คือตัวอย่างโค้ดครบถ้วนเพื่อความสะดวกของคุณ:
```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)
# ตั้งค่าและฝึกท่อประมวลผล
# ตั้งค่าและฝึก pipeline
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# ทำนายผลลัพธ์สำหรับข้อมูลทดสอบ
# ทำนายผลสำหรับข้อมูลทดสอบ
pred = pipeline.predict(X_test)
# คำนวณ MSE และค่าการกำหนด
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# คำนวณค่า RMSE และค่าตัวกำหนด
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
โมเดลนี้ควรให้ค่าสัมประสิทธิ์การกำหนดที่ดีที่สุดเกือบ 97% และ MSE=2.23 (~8% ความผิดพลาดในการทำนาย)
ซึ่งจะให้ค่าสัมประสิทธิ์การกำหนดที่ดีที่สุดเกือบ 97% และ RMSE=2.23 (~8% ความผิดพลาดในการทำนาย)
| โมเดล | MSE | ค่าสัมประสิทธิ์การกำหนด |
|-------|-----|---------------|
| โมเดล | RMSE | ค่าสัมประสิทธิ์การกำหนด |
|-------|-----|---------------------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
| ทุกคุณลักษณะ Linear | 2.84 (10.5%) | 0.94 |
| ทุกคุณลักษณะ Polynomial | 2.23 (8.25%) | 0.97 |
| คุณสมบัติทั้งหมด Linear | 2.84 (10.5%) | 0.94 |
| คุณสมบัติทั้งหมด Polynomial | 2.23 (8.25%) | 0.97 |
🏆 เยี่ยมมาก! คุณสร้างโมเดล Regression สี่โมเดลในบทเรียนเดียว และเพิ่มคุณภาพของโมเดลถึง 97% ในส่วนสุดท้ายของบทเรียน Regression คุณจะได้เรียนรู้ Logistic Regression สำหรับการจำแนกประเภท
🏆 เยี่ยมมาก! คุณสร้างโมเดล Regression ถึงสี่แบบในบทเรียนเดียวและปรับปรุงคุณภาพโมเดลให้ถึง 97% ในส่วนสุดท้ายของบทเรียนเกี่ยวกับ Regression คุณจะได้เรียนรู้ Logistic Regression เพื่อกำหนดประเภท
---
## 🚀ความท้าทาย
ลองทดสอบตัวแปรหลายๆ ตัวในสมุดงานนี้เพื่อดูว่าความสัมพันธ์ส่งผลต่อความแม่นยำของโมเดลอย่างไร
ทดสอบตัวแปรต่าง ๆ หลายตัวในโน้ตบุ๊กนี้เพื่อดูว่า ความสัมพันธ์เชิงสหสัมพันธ์ส่งผลอย่างไรต่อความแม่นยำของโมเดล
## [แบบทดสอบหลังเรียน](https://ff-quizzes.netlify.app/en/ml/)
## [แบบทดสอบหลังบทเรียน](https://ff-quizzes.netlify.app/en/ml/)
## ทบทวน & ศึกษาด้วยตนเอง
ในบทเรียนนี้ เราได้เรียนรู้เกี่ยวกับ Linear Regression ยังมีเทคนิค Regression ประเภทอื่นที่สำคัญ อ่านเกี่ยวกับเทคนิค Stepwise, Ridge, Lasso และ Elasticnet คอร์สดีๆ ที่แนะนำให้อ่านเพิ่มเติมคือ [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
ในบทเรียนนี้เราได้เรียนรู้เกี่ยวกับ Linear Regression ยังมีประเภทสำคัญอื่น ๆ ของ Regression ได้แก่ Stepwise, Ridge, Lasso และ Elasticnet ศึกษาต่อในหลักสูตรที่ดีได้ที่ [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## การบ้าน
## การบ้าน
[สร้างโมเดล](assignment.md)
@ -383,5 +404,5 @@ print('Model determination: ', score)
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ข้อจำกัดความรับผิดชอบ**:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลอัตโนมัติ [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้ข้อมูลถูกต้องที่สุด โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางควรถูกพิจารณาเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลสำคัญแนะนำให้ใช้บริการแปลมืออาชีพโดยมนุษย์ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ [Co-op Translator](https://github.com/Azure/co-op-translator) แม้เราจะพยายามให้มีความถูกต้อง โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลสำคัญ แนะนำให้ใช้บริการแปลโดยผู้เชี่ยวชาญมนุษย์ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดใดๆ ที่เกิดจากการใช้การแปลนี้
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## การวิเคราะห์เชิงเส้นและพหุนามสำหรับการตั้งราคาฟักทอง - บทเรียนที่ 3\n",
"## การถดถอยเชิงเส้นและพหุนามสำหรับการตั้งราคาฟักทอง - บทที่ 3\n",
"\n",
"โหลดไลบรารีและชุดข้อมูลที่จำเป็น จากนั้นแปลงข้อมูลให้เป็น DataFrame ที่มีเพียงส่วนย่อยของข้อมูล:\n",
"โหลดไลบรารีและชุดข้อมูลที่จำเป็น แปลงข้อมูลเป็น dataframe ที่มีข้อมูลย่อยบางส่วน:\n",
"\n",
"- เลือกเฉพาะฟักทองที่ตั้งราคาเป็นหน่วย bushel\n",
"- แปลงวันที่ให้เป็นเดือน\n",
"- คำนวณราคาให้เป็นค่าเฉลี่ยระหว่างราคาสูงสุดและต่ำสุด\n",
"- แปลงราคาให้สะท้อนถึงการตั้งราคาต่อปริมาณในหน่วย bushel\n"
"- ดึงเฉพาะฟักทองที่ตั้งราคาตามบัชเชิล\n",
"- แปลงวันที่เป็นเดือน\n",
"- คำนวณราคาจากค่าเฉลี่ยของราคาสูงสุดและต่ำสุด\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",
@ -661,7 +665,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"ความชันของเส้นสามารถกำหนดได้จากสัมประสิทธิ์การถดถอยเชิงเส้น:\n"
]
},
{
"cell_type": "code",
@ -686,7 +692,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"เราสามารถใช้โมเดลที่ผ่านการฝึกมาแล้วในการทำนายราคาได้:\n"
]
},
{
"cell_type": "code",
@ -714,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### การถดถอยเชิงพหุนาม\n",
"### การถดถอยแบบพหุนาม\n",
"\n",
"บางครั้งความสัมพันธ์ระหว่างคุณลักษณะและผลลัพธ์อาจไม่เป็นเชิงเส้นโดยธรรมชาติ ตัวอย่างเช่น ราคาฟักทองอาจสูงในฤดูหนาว (เดือน 1, 2) จากนั้นลดลงในฤดูร้อน (เดือน 5-7) และกลับมาสูงขึ้นอีกครั้ง การถดถอยเชิงเส้นไม่สามารถจับความสัมพันธ์นี้ได้อย่างแม่นยำ\n",
"บางครั้งความสัมพันธ์ระหว่างคุณลักษณะและผลลัพธ์เป็นแบบไม่เชิงเส้นโดยเนื้อแท้ ตัวอย่างเช่น ราคาฟักทองอาจสูงในฤดูหนาว (เดือน=1,2) จากนั้นลดลงในฤดูร้อน (เดือน=5-7) และจากนั้นก็เพิ่มขึ้นอีกครั้ง การถดถอยเชิงเส้นไม่สามารถหา ความสัมพันธ์นี้ได้อย่างแม่นยำ\n",
"\n",
"ในกรณีนี้ เราอาจพิจารณาเพิ่มคุณลักษณะเพิ่มเติม วิธีง่ายๆ คือการใช้พหุนามจากคุณลักษณะอินพุต ซึ่งจะนำไปสู่ **การถดถอยเชิงพหุนาม** ใน Scikit Learn เราสามารถคำนวณคุณลักษณะพหุนามล่วงหน้าโดยอัตโนมัติด้วยการใช้ pipelines:\n"
"ในกรณีนี้ เราอาจพิจารณาเพิ่มคุณลักษณะเพิ่มเติม วิธีง่ายๆ คือใช้พหุนามจากคุณลักษณะนำเข้า ซึ่งจะทำให้เกิด **การถดถอยแบบพหุนาม** ใน Scikit Learn เราสามารถคำนวณคุณลักษณะพหุนามล่วงหน้าได้โดยอัตโนมัติด้วยการใช้ pipeline: \n"
]
},
{
@ -773,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### การเข้ารหัสชนิดต่าง ๆ\n",
"### Encoding varieties\n",
"\n",
"ในโลกที่สมบูรณ์แบบ เราต้องการที่จะสามารถทำนายราคาของฟักทองชนิดต่าง ๆ โดยใช้โมเดลเดียวกัน เพื่อที่จะนำชนิดของฟักทองมาพิจารณา เราจำเป็นต้องแปลงมันให้อยู่ในรูปแบบตัวเลข หรือที่เรียกว่า **การเข้ารหัส** มีหลายวิธีที่เราสามารถทำได้:\n",
"ในโลกอุดมคติ เราต้องการที่จะสามารถทำนายราคาของฟักทองพันธุ์ต่างๆ โดยใช้โมเดลเดียวกัน เพื่อพิจารณาพันธุ์ เราต้องแปลงข้อูลพันธุ์ให้อยู่ในรูปแบบตัวเลข หรือ **เข้ารหัส** ก่อน มีวิธีการหลายแบบที่เราสามารถทำได้:\n",
"\n",
"* การเข้ารหัสตัวเลขแบบง่าย ซึ่งจะสร้างตารางของชนิดฟักทองต่าง ๆ แล้วแทนชื่อชนิดด้วยดัชนีในตารางนั้น วิธีนี้ไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับการวิเคราะห์ถดถอยเชิงเส้น (linear regression) เพราะการวิเคราะห์ถดถอยเชิงเส้นจะนำค่าตัวเลขของดัชนีมาพิจารณา และค่าตัวเลขนั้นอาจไม่มีความสัมพันธ์เชิงตัวเลขกับราคา\n",
"* การเข้ารหัสแบบ One-hot ซึ่งจะเปลี่ยนคอลัมน์ `Variety` ให้เป็น 4 คอลัมน์ที่แตกต่างกัน โดยแต่ละคอลัมน์จะเป็นตัวแทนของชนิดฟักทองแต่ละชนิด และจะมีค่าเป็น 1 หากแถวที่เกี่ยวข้องเป็นชนิดนั้น และมีค่าเป็น 0 หากไม่ใช่\n",
"* การเข้ารหัสตัวเลขง่ายๆ ที่จะสร้างตารางของพันธุ์ต่างๆ แล้วแทนที่ชื่อพันธุ์ด้วยดัชนีในตารางนั้น วิธีนี้ไม่เหมาะกับการถดถอยเชิงเส้น เพราะการถดถอยเชิงเส้นจะเอาค่าตัวเลขของดัชนีมาใช้ ซึ่งค่าตัวเลขนี้อาจไม่มีความสัมพันธ์เชิงตัวเลขกับราคา\n",
"* การเข้ารหัสแบบ one-hot encoding ที่จะแทนคอลัมน์ `Variety` ด้วยคอลัมน์ 4 คอลัมน์สำหรับแต่ละพันธุ์ โดยแต่ละคอลัมน์จะมีค่า 1 ถ้าแถวที่ตรงกันเป็นพันธุ์นั้น และ 0 ถ้าไม่ใช่\n",
"\n",
"โค้ดด้านล่างแสดงวิธีที่เราสามารถเข้ารหัสชนิดฟักทองแบบ One-hot:\n"
"โค้ดข้างล่างจะแสดงวิธีการเข้ารหัสแบบ one-hot encoding สำหรับพันธุ์:\n"
]
},
{
@ -936,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### การถดถอยเชิงเส้นบนชนิดพันธุ์\n",
"### การถดถอยเชิงเส้นบนพันธุ์\n",
"\n",
"ตอนนี้เราจะใช้โค้ดเดิมเหมือนข้างต้น แต่แทนที่จะใช้ `DayOfYear` เราจะใช้ชนิดพันธุ์ที่ผ่านการเข้ารหัสแบบ one-hot เป็นข้อมูลนำเข้า:\n"
"เราจะใช้โค้ดเดียวกับข้างต้น แต่แทนที่จะใช้ `DayOfYear` เราจะใช้พันธุ์ที่เข้ารหัสแบบวัน-ฮอตเป็นอินพุต:\n"
]
},
{
@ -986,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"เรายังสามารถลองใช้คุณสมบัติอื่นในลักษณะเดียวกัน และรวมเข้ากับคุณสมบัติทางตัวเลข เช่น `Month` หรือ `DayOfYear`:\n"
"เราสามารถลองใช้คุณสมบัติอื่นในลักษณะเดียวกัน และผสมผสานกับคุณสมบัติตัวเลข เช่น `Month` หรือ `DayOfYear`:\n"
]
},
{
@ -1017,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### การถดถอยเชิงพหุนาม\n",
"### การถดถอยพหุนาม\n",
"\n",
"การถดถอยเชิงพหุนามสามารถนำมาใช้กับคุณลักษณะเชิงหมวดหมู่ที่ผ่านการเข้ารหัสแบบ one-hot ได้เช่นกัน โค้ดสำหรับการฝึกการถดถอยเชิงพหุนามจะมีลักษณะเหมือนกับที่เราได้เห็นไปก่อนหน้านี้\n"
"การถดถอยพหุนามสามารถใช้กับคุณลักษณะประเภทตัวแปรตามหมวดหมู่ที่ถูกเข้ารหัสแบบหนึ่งร้อน (one-hot-encoded) ได้เช่นกัน โค้ดสำหรับฝึกอบรมการถดถอยพหุนามจะเหมือนกับที่เราเห็นข้างต้นโดยพื้นฐานแล้ว\n"
]
},
{
@ -1066,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**ข้อจำกัดความรับผิดชอบ**: \nเอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [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"
]
}
],
@ -1096,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-06T13:11:52+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "th"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

Loading…
Cancel
Save