Αυτοκινούμενα αυτοκίνητα, λογισμικό ανίχνευσης προσώπου και ηχεία με φωνή, όλα βασίζονται σε τεχνολογίες και πλαίσια μηχανικής μάθησης - και αυτά είναι μόνο το πρώτο κύμα. Κατά την επόμενη δεκαετία, μια νέα γενιά προϊόντων θα μεταμορφώσει τον κόσμο μας, ξεκινώντας νέες προσεγγίσεις για την ανάπτυξη λογισμικού και τις εφαρμογές και τα προϊόντα που δημιουργούμε και χρησιμοποιούμε.
Ως προγραμματιστής Java, θέλετε να ξεπεράσετε αυτήν την καμπύλη, ειδικά επειδή οι εταιρείες τεχνολογίας αρχίζουν να επενδύουν σοβαρά στη μηχανική μάθηση. Αυτό που μαθαίνετε σήμερα, μπορείτε να αξιοποιήσετε τα επόμενα πέντε χρόνια, αλλά πρέπει να ξεκινήσετε κάπου.
Αυτό το άρθρο θα σας ξεκινήσει. Θα ξεκινήσετε με μια πρώτη εντύπωση για το πώς λειτουργεί η μηχανική μάθηση, ακολουθούμενη από έναν σύντομο οδηγό για την εφαρμογή και την κατάρτιση ενός αλγορίθμου μηχανικής μάθησης. Αφού μελετήσετε τα εσωτερικά του αλγορίθμου εκμάθησης και τις δυνατότητες που μπορείτε να χρησιμοποιήσετε για να εκπαιδεύσετε, να βαθμολογήσετε και να επιλέξετε τη βέλτιστη λειτουργία πρόβλεψης, θα λάβετε μια επισκόπηση της χρήσης ενός πλαισίου JVM, Weka, για τη δημιουργία λύσεων μηχανικής μάθησης. Αυτό το άρθρο επικεντρώνεται στην εποπτευόμενη μηχανική μάθηση, η οποία είναι η πιο κοινή προσέγγιση για την ανάπτυξη έξυπνων εφαρμογών.
Μηχανική εκμάθηση για προγραμματιστές Java, Μέρος 2
Είστε έτοιμοι για το επόμενο βήμα; Το δεύτερο μισό αυτού του σεμιναρίου σας δείχνει πώς να αναπτύξετε και να αναπτύξετε τον αγωγό δεδομένων μηχανικής εκμάθησης.
Μηχανική μάθηση και τεχνητή νοημοσύνη
Η μηχανική μάθηση έχει εξελιχθεί από τον τομέα της τεχνητής νοημοσύνης, η οποία επιδιώκει να παράγει μηχανές ικανές να μιμούνται την ανθρώπινη νοημοσύνη. Παρόλο που η μηχανική μάθηση είναι μια αναδυόμενη τάση στην επιστήμη των υπολογιστών, η τεχνητή νοημοσύνη δεν αποτελεί νέο επιστημονικό πεδίο. Το τεστ Turing, που αναπτύχθηκε από τον Alan Turing στις αρχές της δεκαετίας του 1950, ήταν ένα από τα πρώτα τεστ που δημιουργήθηκαν για να προσδιοριστεί εάν ένας υπολογιστής θα μπορούσε να έχει πραγματική νοημοσύνη. Σύμφωνα με το τεστ Turing, ένας υπολογιστής θα μπορούσε να αποδείξει την ανθρώπινη νοημοσύνη, εξαπατώντας έναν άνθρωπο να πιστεύει ότι ήταν επίσης άνθρωπος.
Πολλές σύγχρονες προσεγγίσεις μηχανικής μάθησης βασίζονται σε ιδέες δεκαετιών. Αυτό που άλλαξε την τελευταία δεκαετία είναι ότι οι υπολογιστές (και οι κατανεμημένες υπολογιστικές πλατφόρμες) έχουν πλέον την απαιτούμενη ισχύ επεξεργασίας για αλγόριθμους μηχανικής μάθησης. Οι περισσότεροι αλγόριθμοι μηχανικής μάθησης απαιτούν έναν τεράστιο αριθμό πολλαπλασιασμών μήτρας και άλλων μαθηματικών λειτουργιών για επεξεργασία. Η υπολογιστική τεχνολογία για τη διαχείριση αυτών των υπολογισμών δεν υπήρχε ακόμη και πριν από δύο δεκαετίες, αλλά ισχύει σήμερα.
Η μηχανική μάθηση επιτρέπει στα προγράμματα να εκτελούν διαδικασίες βελτίωσης της ποιότητας και να επεκτείνουν τις δυνατότητές τους χωρίς ανθρώπινη συμμετοχή. Ένα πρόγραμμα που έχει δημιουργηθεί με μηχανική μάθηση είναι ικανό να ενημερώνει ή να επεκτείνει τον δικό του κώδικα.
Εποπτευόμενη μάθηση έναντι μη εποπτευόμενης μάθησης
Η εποπτευόμενη μάθηση και η μη εποπτευόμενη μάθηση είναι οι πιο δημοφιλείς προσεγγίσεις στη μηχανική μάθηση. Και οι δύο απαιτούν να τροφοδοτήσουν τον υπολογιστή ένα τεράστιο αριθμό εγγραφών δεδομένων για να συσχετιστούν και να μάθουν. Τέτοιες συλλεγόμενες εγγραφές δεδομένων είναι συνήθως γνωστές ως διανύσματα χαρακτηριστικών. Στην περίπτωση ενός μεμονωμένου σπιτιού, ένα διάνυσμα χαρακτηριστικών μπορεί να αποτελείται από χαρακτηριστικά όπως το συνολικό μέγεθος του σπιτιού, ο αριθμός των δωματίων και η ηλικία του σπιτιού.
Σε εποπτευόμενη μάθηση, ένας αλγόριθμος μηχανικής μάθησης έχει εκπαιδευτεί για να ανταποκρίνεται σωστά σε ερωτήσεις που σχετίζονται με διανύσματα χαρακτηριστικών. Για να εκπαιδεύσει έναν αλγόριθμο, το μηχάνημα τροφοδοτείται με ένα σύνολο διανυσμάτων χαρακτηριστικών και μια σχετική ετικέτα. Οι ετικέτες παρέχονται συνήθως από έναν ανθρώπινο σχολιαστή και αντιπροσωπεύουν τη σωστή «απάντηση» σε μια δεδομένη ερώτηση. Ο αλγόριθμος μάθησης αναλύει διανύσματα χαρακτηριστικών και τις σωστές ετικέτες τους για να βρει εσωτερικές δομές και σχέσεις μεταξύ τους. Έτσι, η μηχανή μαθαίνει να ανταποκρίνεται σωστά σε ερωτήματα.
Για παράδειγμα, μια έξυπνη εφαρμογή ακινήτων μπορεί να εκπαιδευτεί με διανύσματα χαρακτηριστικών όπως το μέγεθος, ο αριθμός δωματίων και η αντίστοιχη ηλικία για μια σειρά κατοικιών. Ένας ανθρώπινος ετικετογράφος θα σήμαινε κάθε σπίτι με τη σωστή τιμή κατοικίας με βάση αυτούς τους παράγοντες. Αναλύοντας αυτά τα δεδομένα, η εφαρμογή ακινήτων θα εκπαιδεύτηκε για να απαντήσει στην ερώτηση: "Πόσα χρήματα θα μπορούσα να βρω για αυτό το σπίτι;"
Μετά την ολοκλήρωση της διαδικασίας εκπαίδευσης, τα νέα δεδομένα εισόδου δεν θα επισημανθούν. Το μηχάνημα θα είναι σε θέση να ανταποκρίνεται σωστά σε ερωτήματα, ακόμη και για αόρατα, χωρίς σήμανση διανύσματα χαρακτηριστικών.
Σε μη εποπτευόμενη μάθηση, ο αλγόριθμος έχει προγραμματιστεί για την πρόβλεψη απαντήσεων χωρίς ανθρώπινη σήμανση ή ακόμη και ερωτήσεις. Αντί να προκαθοριστούν οι ετικέτες ή ποια είναι τα αποτελέσματα, η μη επιτηρούμενη μάθηση αξιοποιεί τεράστια σύνολα δεδομένων και δύναμη επεξεργασίας για να ανακαλύψει προηγούμενες άγνωστες συσχετίσεις. Στο μάρκετινγκ καταναλωτικών προϊόντων, για παράδειγμα, η μη επιτηρούμενη μάθηση θα μπορούσε να χρησιμοποιηθεί για τον εντοπισμό κρυφών σχέσεων ή ομαδοποίησης καταναλωτών, οδηγώντας τελικά σε νέες ή βελτιωμένες στρατηγικές μάρκετινγκ.
Αυτό το άρθρο επικεντρώνεται στην εποπτευόμενη μηχανική μάθηση, η οποία είναι η πιο κοινή προσέγγιση στη μηχανική μάθηση σήμερα.
Εποπτευόμενη μηχανική μάθηση
Όλη η μηχανική μάθηση βασίζεται σε δεδομένα. Για ένα εποπτευόμενο έργο μηχανικής μάθησης, θα πρέπει να επισημάνετε τα δεδομένα με σημαντικό τρόπο για το αποτέλεσμα που αναζητάτε. Στον Πίνακα 1, σημειώστε ότι κάθε σειρά της εγγραφής κατοικίας περιλαμβάνει μια ετικέτα για "τιμή κατοικίας". Με τη συσχέτιση των δεδομένων σειράς με την ετικέτα τιμής κατοικίας, ο αλγόριθμος τελικά θα είναι σε θέση να προβλέψει την τιμή αγοράς για ένα σπίτι που δεν βρίσκεται στο σύνολο δεδομένων του (σημειώστε ότι το μέγεθος του σπιτιού βασίζεται σε τετραγωνικά μέτρα και η τιμή κατοικίας βασίζεται σε ευρώ).
Πίνακας 1. Οικιακές εγγραφές
ΧΑΡΑΚΤΗΡΙΣΤΙΚΟ | ΧΑΡΑΚΤΗΡΙΣΤΙΚΟ | ΧΑΡΑΚΤΗΡΙΣΤΙΚΟ | ΕΠΙΓΡΑΦΗ |
---|---|---|---|
Μέγεθος σπιτιού | Αριθμός δωματίων | Ηλικία του σπιτιού | Εκτιμώμενο κόστος κατοικίας |
90 m2 / 295 πόδια | 2 δωμάτια | 23 χρόνια | 249,000 € |
101 m2 / 331 πόδια | 3 δωμάτια | α / α | 338,000 € |
1330 m2 / 4363 πόδια | 11 δωμάτια | 12 χρόνια | 6,500,000 € |
Στα αρχικά στάδια, πιθανότατα θα επισημάνετε τις εγγραφές δεδομένων με το χέρι, αλλά θα μπορούσατε τελικά να εκπαιδεύσετε το πρόγραμμά σας για να αυτοματοποιήσετε αυτήν τη διαδικασία. Πιθανότατα το έχετε δει με εφαρμογές email, όπου η μεταφορά email στον φάκελο ανεπιθύμητων μηνυμάτων οδηγεί στο ερώτημα "Είναι αυτό το ανεπιθύμητο;" Όταν απαντάτε, εκπαιδεύετε το πρόγραμμα να αναγνωρίζει μηνύματα που δεν θέλετε να δείτε. Το φίλτρο ανεπιθύμητων μηνυμάτων της εφαρμογής μαθαίνει να επισημαίνει μελλοντικά μηνύματα από την ίδια πηγή ή να φέρει παρόμοιο περιεχόμενο και να τα απορρίπτει.
Τα σύνολα δεδομένων με ετικέτα απαιτούνται μόνο για σκοπούς εκπαίδευσης και δοκιμών. Αφού τελειώσει αυτή η φάση, ο αλγόριθμος μηχανικής εκμάθησης λειτουργεί σε παρουσίες δεδομένων χωρίς ετικέτα. Για παράδειγμα, θα μπορούσατε να τροφοδοτήσετε τον αλγόριθμο πρόβλεψης ένα νέο, χωρίς ετικέτα ρεκόρ σπιτιού και θα προβλέψει αυτόματα την αναμενόμενη τιμή κατοικίας με βάση τα δεδομένα εκπαίδευσης.
Πώς οι μηχανές μαθαίνουν να προβλέπουν
Η πρόκληση της εποπτευόμενης μηχανικής μάθησης είναι η εύρεση της κατάλληλης λειτουργίας πρόβλεψης για μια συγκεκριμένη ερώτηση. Μαθηματικά, η πρόκληση είναι να βρείτε τη συνάρτηση εισόδου-εξόδου που λαμβάνει τις μεταβλητές εισόδου Χ και επιστρέφει την τιμή πρόβλεψης γ. Αυτό λειτουργία υπόθεσης (ηθ) είναι το αποτέλεσμα της εκπαιδευτικής διαδικασίας. Συχνά καλείται επίσης η λειτουργία υπόθεσης στόχος ή προφητεία λειτουργία.

Στις περισσότερες περιπτώσεις, Χ αντιπροσωπεύει ένα σημείο πολλαπλών δεδομένων. Στο παράδειγμά μας, αυτό θα μπορούσε να είναι ένα δισδιάστατο σημείο δεδομένων ενός μεμονωμένου σπιτιού που ορίζεται από το μέγεθος σπιτιού τιμή και το αριθμός δωματίων αξία. Ο πίνακας αυτών των τιμών αναφέρεται ως διάνυσμα χαρακτηριστικών. Λαμβάνοντας υπόψη μια συγκεκριμένη συνάρτηση στόχου, η συνάρτηση μπορεί να χρησιμοποιηθεί για να κάνει μια πρόβλεψη για κάθε διάνυσμα χαρακτηριστικών Χ. Για να προβλέψετε την τιμή ενός μεμονωμένου σπιτιού, μπορείτε να καλέσετε τη συνάρτηση στόχου χρησιμοποιώντας το διάνυσμα χαρακτηριστικών {101.0, 3.0} που περιέχει το μέγεθος της κατοικίας και τον αριθμό δωματίων:
// συνάρτηση στόχου h (που είναι η έξοδος της διαδικασίας εκμάθησης) Συνάρτηση h = ...; // ορίστε το διάνυσμα χαρακτηριστικών με μέγεθος σπιτιού = 101 και αριθμό δωματίων = 3 Διπλό [] x = νέος Διπλό [] {101.0, 3.0}; // και προέβλεπε την τιμή κατοικίας (ετικέτα) διπλό y = h.εφαρμόστε (x);
Στην Λίστα 1, η μεταβλητή πίνακα Χ Η τιμή αντιπροσωπεύει το διάνυσμα χαρακτηριστικών του σπιτιού. ο γ Η τιμή που επιστρέφεται από τη συνάρτηση στόχου είναι η προβλεπόμενη τιμή κατοικίας.
Η πρόκληση της μηχανικής μάθησης είναι να ορίσετε μια συνάρτηση στόχου που θα λειτουργεί όσο το δυνατόν ακριβέστερα για άγνωστες, αόρατες εμφανίσεις δεδομένων. Στη μηχανική μάθηση, η συνάρτηση στόχος (hθκαλείται μερικές φορές a μοντέλο. Αυτό το μοντέλο είναι το αποτέλεσμα της μαθησιακής διαδικασίας.

Με βάση τα επισημασμένα παραδείγματα εκπαίδευσης, ο αλγόριθμος μάθησης αναζητά δομές ή μοτίβα στα δεδομένα εκπαίδευσης. Από αυτά, παράγει ένα μοντέλο που γενικεύεται καλά από αυτά τα δεδομένα.
Συνήθως, η μαθησιακή διαδικασία είναι διερευνητική. Στις περισσότερες περιπτώσεις, η διαδικασία θα εκτελεστεί πολλές φορές χρησιμοποιώντας διαφορετικές παραλλαγές μαθησιακών αλγορίθμων και διαμορφώσεων.
Τελικά, όλα τα μοντέλα θα αξιολογηθούν με βάση τις μετρήσεις απόδοσης και θα επιλεγεί το καλύτερο. Αυτό το μοντέλο θα χρησιμοποιηθεί στη συνέχεια για τον υπολογισμό προβλέψεων για μελλοντικές παρουσίες δεδομένων χωρίς ετικέτα.
Γραμμικής παλινδρόμησης
Για να εκπαιδεύσετε μια μηχανή να σκέφτεται, το πρώτο βήμα είναι να επιλέξετε τον αλγόριθμο εκμάθησης που θα χρησιμοποιήσετε. Γραμμικής παλινδρόμησης είναι ένας από τους απλούστερους και πιο δημοφιλείς αλγόριθμους εποπτευόμενης μάθησης. Αυτός ο αλγόριθμος υποθέτει ότι η σχέση μεταξύ των χαρακτηριστικών εισαγωγής και της εξερχόμενης ετικέτας είναι γραμμική. Η γενική συνάρτηση γραμμικής παλινδρόμησης παρακάτω επιστρέφει την προβλεπόμενη τιμή συνοψίζοντας κάθε στοιχείο του διάνυσμα χαρακτηριστικών πολλαπλασιασμένο με ένα παράμετρος θήτα (θ). Οι παράμετροι θήτα χρησιμοποιούνται στη διαδικασία εκπαίδευσης για να προσαρμόσουν ή να "συντονίσουν" τη λειτουργία παλινδρόμησης με βάση τα δεδομένα εκπαίδευσης.

Στη συνάρτηση γραμμικής παλινδρόμησης, οι παράμετροι θήτα και οι παράμετροι χαρακτηριστικών απαριθμούνται από έναν αριθμό συνδρομής. Ο αριθμός συνδρομής υποδεικνύει τη θέση των παραμέτρων θήτα (θ) και των παραμέτρων χαρακτηριστικών (x) εντός του διανύσματος. Σημειώστε ότι η δυνατότητα x0 είναι ένας σταθερός όρος αντιστάθμισης που ορίζεται με την τιμή 1 για υπολογιστικούς σκοπούς. Ως αποτέλεσμα, το ευρετήριο ενός χαρακτηριστικού για συγκεκριμένο τομέα, όπως το μέγεθος σπιτιού, θα ξεκινήσει με x1. Για παράδειγμα, εάν x1 έχει οριστεί για την πρώτη τιμή του διανύσματος χαρακτηριστικών House, μέγεθος σπιτιού και, στη συνέχεια, x2 θα οριστεί για την επόμενη τιμή, τον αριθμό των δωματίων και ούτω καθεξής.
Η λίστα 2 δείχνει μια εφαρμογή Java αυτής της γραμμικής παλινδρόμησης, που εμφανίζεται μαθηματικά ως hθ(Χ). Για απλότητα, ο υπολογισμός γίνεται χρησιμοποιώντας τον τύπο δεδομένων διπλό
. Μέσα στο ισχύουν()
μέθοδος, αναμένεται ότι το πρώτο στοιχείο του πίνακα έχει οριστεί με τιμή 1,0 εκτός αυτής της συνάρτησης.
Λίστα 2. Γραμμική παλινδρόμηση στην Ιάβα
δημόσια τάξη LinearRegressionFunction υλοποιεί τη λειτουργία {private final double [] thetaVector; LinearRegressionFunction (double [] thetaVector) {this.thetaVector = Arrays.copyOf (thetaVector, thetaVector.length); } δημόσια Διπλή εφαρμογή (Double [] featureVector) {// για υπολογιστικούς λόγους το πρώτο στοιχείο πρέπει να είναι 1,0 assert featureVector [0] == 1.0; // απλή, διαδοχική εφαρμογή διπλή πρόβλεψη = 0; για (int j = 0; j <thetaVector.length; j ++) {prediction + = thetaVector [j] * featureVector [j]; } πρόβλεψη επιστροφής; } δημόσιο διπλό [] getThetas () {return Arrays.copyOf (thetaVector, thetaVector.length); }}
Για να δημιουργήσετε μια νέα παρουσία του LinearRegressionFunction
, πρέπει να ορίσετε την παράμετρο theta. Η παράμετρος θήτα, ή διάνυσμα, χρησιμοποιείται για την προσαρμογή της συνάρτησης γενικής παλινδρόμησης στα υποκείμενα δεδομένα εκπαίδευσης. Οι παράμετροι θήτα του προγράμματος θα συντονιστούν κατά τη διάρκεια της μαθησιακής διαδικασίας, βάσει παραδειγμάτων εκπαίδευσης. Η ποιότητα της εκπαιδευμένης λειτουργίας στόχου μπορεί να είναι τόσο καλή όσο η ποιότητα των δεδομένων εκπαίδευσης.
Στο παρακάτω παράδειγμα το LinearRegressionFunction
θα δημιουργηθεί για την πρόβλεψη της τιμής του σπιτιού με βάση το μέγεθος του σπιτιού. Λαμβάνοντας υπόψη ότι x0 πρέπει να είναι μια σταθερή τιμή 1,0, η συνάρτηση στόχος δημιουργείται χρησιμοποιώντας δύο παραμέτρους θήτα. Οι παράμετροι θήτα είναι το αποτέλεσμα μιας μαθησιακής διαδικασίας. Μετά τη δημιουργία της νέας παρουσίας, η τιμή ενός σπιτιού με μέγεθος 1330 τετραγωνικών μέτρων θα προβλεφθεί ως εξής:
// ο φορέας θήτα που χρησιμοποιήθηκε εδώ ήταν έξοδος από μια διαδικασία αμαξοστοιχίας διπλή [] thetaVector = new double [] {1.004579, 5.286822}; LinearRegressionFunction targetFunction = νέα LinearRegressionFunction (thetaVector); // δημιουργήστε τη συνάρτηση διανυσμάτων χαρακτηριστικών με x0 = 1 (για υπολογιστικούς λόγους) και x1 = οικιακό μέγεθος Διπλό [] featureVector = νέο διπλό [] {1.0, 1330.0}; // κάντε την πρόβλεψη διπλή προβλεπόμενηPrice = targetFunction.apply (featureVector);
Η γραμμή πρόβλεψης της συνάρτησης στόχου εμφανίζεται ως μπλε γραμμή στο παρακάτω γράφημα. Η γραμμή έχει υπολογιστεί εκτελώντας τη συνάρτηση στόχου για όλες τις τιμές μεγέθους σπιτιού. Το γράφημα περιλαμβάνει επίσης τα ζεύγη μεγέθους τιμών που χρησιμοποιούνται για εκπαίδευση.

Μέχρι στιγμής το γράφημα προβλέψεων φαίνεται να ταιριάζει αρκετά καλά. Οι συντεταγμένες γραφήματος (η αναχαίτιση και η κλίση) καθορίζονται από το διάνυσμα θήτα { 1.004579, 5.286822 }
. Αλλά πώς ξέρετε ότι αυτός ο φορέας θήτα είναι ο καταλληλότερος για την εφαρμογή σας; Θα ταιριάζει καλύτερα η λειτουργία εάν αλλάξατε την πρώτη ή τη δεύτερη παράμετρο θήτα; Για να προσδιορίσετε τον καταλληλότερο φορέα παραμέτρων θήτα, χρειάζεστε ένα λειτουργία χρησιμότητας, το οποίο θα αξιολογήσει πόσο καλά αποδίδει η λειτουργία στόχου.
Βαθμολόγηση της συνάρτησης στόχου
Στη μηχανική μάθηση, α συνάρτηση κόστους (J (θ)) χρησιμοποιείται για τον υπολογισμό του μέσου σφάλματος ή του "κόστους" μιας δεδομένης συνάρτησης στόχου.
