τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Η λογιστική παλινδρόμηση είναι μια ευρέως χρησιμοποιούμενη μέθοδος στατιστικής μάθησης, που χρησιμοποιείται κυρίως για την επίλυση προβλημάτων ταξινόμησης.Παρά τη λέξη "παλινδρόμηση" στο όνομα, είναι στην πραγματικότητα ένας αλγόριθμος ταξινόμησης
Αυτή είναι η πιο βασική και κοινή χρήση της λογιστικής παλινδρόμησης.Μπορεί να προβλέψει εάν ένα συμβάν θα συμβεί και το αποτέλεσμα εξόδου είναι ναι ή όχι
Για παράδειγμα:
Αυτά τα παραδείγματα έχουν όλα ένα κοινό χαρακτηριστικό, δηλαδή, υπάρχουν μόνο δύο αποτελέσματα, true (1) και false (0)
Η λογιστική παλινδρόμηση μπορεί να επεκταθεί σε προβλήματα ταξινόμησης πολλών κατηγοριών μέσω μεθόδων όπως One-vs-Rest ή softmax
Για παράδειγμα:
Αυτά τα παραδείγματα έχουν όλα ένα κοινό χαρακτηριστικό, δηλαδή, το ίδιο αντικείμενο έχει πολλαπλά πιθανά αποτελέσματα, παρόμοια με τις κοινές ερωτήσεις πολλαπλής επιλογής Υπάρχουν πολλές επιλογές, αλλά υπάρχει μόνο μία επιλογή που ταιριάζει καλύτερα στην απάντηση.
Η λογιστική παλινδρόμηση όχι μόνο δίνει αποτελέσματα ταξινόμησης, αλλά εξάγει και τιμές πιθανότητας, κάτι που είναι πολύ χρήσιμο σε πολλά σενάρια.
Για παράδειγμα:
Αυτά τα παραδείγματα έχουν όλα ένα κοινό χαρακτηριστικό, το οποίο είναι η πρόβλεψη, δηλαδή η χρήση γνωστών αποτελεσμάτων για την εξαγωγή άγνωστων αποτελεσμάτων.
Φανταστείτε ότι είστε γιατρός και πρέπει να προσδιορίσετε εάν ένας ασθενής έχει μια συγκεκριμένη ασθένεια. Η λογιστική παλινδρόμηση είναι σαν ένας έξυπνος βοηθός για να σας βοηθήσει να κάνετε αυτή την κρίση. Ακριβώς όπως ένας γιατρός θα εξετάσει διάφορους δείκτες φυσικής εξέτασης ενός ασθενούς, η λογιστική παλινδρόμηση θα λάβει υπόψη πολλούς σχετικούς παράγοντες (τους ονομάζουμε χαρακτηριστικά). Ορισμένες μετρήσεις μπορεί να είναι πιο σημαντικές από άλλες. Η λογιστική παλινδρόμηση αποδίδει ένα «βάρος» σε κάθε παράγοντα, αντανακλώντας τη σημασία του. Τέλος, αντί να πει απλώς «ναι» ή «όχι», δίνει μια πιθανότητα. Για παράδειγμα, "Η πιθανότητα αυτός ο ασθενής να νοσήσει είναι 70%. Μπορείτε να ορίσετε ένα πρότυπο, για παράδειγμα, εάν υπερβαίνει το 50%, θεωρείται "ναι", διαφορετικά θεωρείται "όχι". Η λογιστική παλινδρόμηση «μαθαίνει» από μεγάλο αριθμό γνωστών περιπτώσεων. Ακριβώς όπως ένας γιατρός που αποκτά εμπειρία μέσα από ένα μεγάλο αριθμό περιπτώσεων.
Φυσικά, ο ρόλος της λογιστικής παλινδρόμησης υπερβαίνει κατά πολύ αυτό, περιορισμένος από το χώρο (Στην πραγματικότητα, θέλω απλώς να είμαι τεμπέλης), δεν θα μπω σε πολύ εισαγωγή.
Προσωπικά δεν μου αρέσει να σας δίνω πολλούς μαθηματικούς τύπους με μακροσκελείς τρόπο και μετά να σας λέω ότι οι βασικές αρχές είναι αυτοί οι μαθηματικοί τύποι και να σας αφήνω σιγά σιγά να τους καταλάβετε μόνοι σας.Αυτό που ελπίζω είναι να μπορώ να αναλύσω μερικούς βασικούς τύπους και γιατί είναι απαραίτητο να χρησιμοποιήσω αυτούς τους λίγους τύπους Αυτό είναι κάτι που ελπίζω να μπορώ να εξηγήσω με σαφήνεια στο άρθρο μου.
y = b0 + b1x1 + b2x2 + ... + bn*xn
Δεν έχει σημασία αν δεν καταλαβαίνετε τον κώδικα, απλά κοιτάξτε την εικόνα
- import matplotlib.pyplot as plt
- import numpy as np
- import matplotlib.font_manager as fm
-
- # Generate some simulated house data
- np.random.seed(0)
- area = np.random.rand(100) * 200 + 50 # House area (square meters)
- price = 2 * area + 5000 + np.random.randn(100) * 500 # House price (ten thousand yuan)
-
- # Fit the data using linear regression
- from sklearn.linear_model import LinearRegression
- model = LinearRegression()
- model.fit(area.reshape(-1, 1), price)
-
- # Get the regression coefficients
- b0 = model.intercept_
- b1 = model.coef_[0]
-
- # Plot the scatter plot
- plt.scatter(area, price, label="House Data")
-
- # Plot the regression line
- plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")
-
- # Set the plot title and axis labels
- plt.title("Linear Regression of House Area and Price")
-
- # Set the font to SimSun (楷体)
- font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12) # Replace with your SimSun font path
-
- plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
- plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)
-
- # Add legend
- plt.legend()
-
- # Show the plot
- plt.show()
1. Δημιουργήστε δεδομένα προσομοίωσης 100 σπιτιών
- np.random.seed(0)
- area = np.random.rand(100) * 200 + 50
- price = 2 * area + 5000 + np.random.randn(100) * 500
2. Χρησιμοποιήστε γραμμική παλινδρόμηση για να χωρέσετε τα δεδομένα
- from sklearn.linear_model import LinearRegression
- model = LinearRegression()
- model.fit(area.reshape(-1, 1), price)
3. Λάβετε τον συντελεστή παλινδρόμησης (b0 ~ bn)
- b0 = model.intercept_
- b1 = model.coef_[0]
4. Σχεδιάστε ένα διάγραμμα διασποράς
plt.scatter(area, price, label="House Data")
5. Σχεδιάστε τη γραμμή παλινδρόμησης
plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")
6. Ορίστε τον τίτλο του άρθρου
plt.title("Linear Regression of House Area and Price")
7. Ορίστε τη γραμματοσειρά σε πλάγια γράμματα && μέγεθος γραμματοσειράς (εάν υπάρχει)
- font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12)
- plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
- plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)
8. Προσθέστε ένα υπόμνημα
plt.legend()
9. Εμφάνιση γραφημάτων
plt.show()
Αυτός ο κώδικας χρησιμοποιεί γραμμική παλινδρόμηση για να ταιριάζει στη σχέση μεταξύ της επιφάνειας του σπιτιού και της τιμής (οι οριζόντιοι και κάθετοι τίτλοι περιγράφονται στα Αγγλικά για την αποφυγή σφαλμάτων)
Μερικοί άνθρωποι μπορεί να αναρωτηθούν: Γιατί παράγουμε τόσο μεγάλο όγκο δεδομένων;
Καλή ερώτηση~
Με αυτά τα δεδομένα μπορούμε να υπολογίσουμε χονδρικά y = b0 + b1x1 + b2x2 + ... + bn*xn Τι γίνεται με τον συντελεστή;
ΕΙΔΙΚΑ:
Συλλέγοντας μεγάλο όγκο δεδομένων, μπορούμε να χρησιμοποιήσουμε ένα μοντέλο γραμμικής παλινδρόμησης για να υπολογίσουμε αυτούς τους συντελεστές και να δημιουργήσουμε ένα μοντέλο πρόβλεψης.Αυτό το μοντέλο μπορεί να μας βοηθήσει να κατανοήσουμε την επίδραση διαφορετικών παραγόντων στη μεταβλητή στόχο και να προβλέψουμε την τιμή της μεταβλητής στόχου στο μέλλον (παρόμοια με το y = kx + b στα μαθηματικά. Με συγκεκριμένα k και b, μπορούμε να προβλέψουμε το y παίρνοντας x , η διαφορά είναι ότι υπάρχουν περισσότεροι συντελεστές k εδώ)
σ(x) = 1 / (1 + exp(-x))
Η εικόνα της συνάρτησης sig μοιάζει με αυτό:
Όπως αναφέραμε προηγουμένως, η πιο βασική χρήση της λογιστικής παλινδρόμησης είναι η επίλυση προβλημάτων δυαδικής ταξινόμησης.
Ο στόχος της λογιστικής παλινδρόμησης είναι να μετατρέψει την έξοδο ενός γραμμικού μοντέλου (που μπορεί να είναι οποιοσδήποτε πραγματικός αριθμός) σε μια τιμή πιθανότητας που αντιπροσωπεύει την πιθανότητα να συμβεί ένα γεγονός και η τιμή πιθανότητας θα πρέπει φυσικά να κυμαίνεται από 0 έως 1.
Η σιγμοειδής συνάρτηση ολοκληρώνει αυτή την εργασία τέλεια: συμπιέζει την έξοδο του γραμμικού μοντέλου μεταξύ 0 και 1 και καθώς αυξάνεται η τιμή εισόδου, η τιμή εξόδου σταδιακά αυξάνεται, κάτι που είναι σύμφωνο με τη μεταβαλλόμενη τάση της τιμής πιθανότητας.
Κοιτάξτε τη συνάρτηση του sig όταν πλησιάζει το θετικό άπειρο, όταν πλησιάζει το 0 άπειρα.
Τότε κάποιος θέλει να πει ξανά, τότε κάνετε λάθος Αν και λέγεται ότι οι δύο πλευρές μπορεί να είναι απείρως κοντά, η μέση δεν μπορεί να φτάσει για παράδειγμα, το 0,5 είναι μεταξύ 0 και 1, τότε λέτε ότι το 0,5 είναι κοντά στο 0. Ή πλησιάζει το 1;
Αν και λέγεται ότι οι αριθμοί στη μέση δεν μπορούν να είναι κοντά, μπορώ να το βάλω τεχνητά~
Για παράδειγμα, αν βάλω τους αριθμούς >= 0,5 στην κατηγορία 1 και τους αριθμούς < 0,5 στην κατηγορία 0, το πρόβλημα θα λυθεί~
Επομένως, το 0,5 δεν είναι ένα κρίσιμο σημείο, αλλά ένα κατώφλι που θέσαμε τεχνητά για ταξινόμηση.
p = σ(b0 + b1*x1 + b2*x2 + ... + bn*xn) = 1 / (1 + exp(-(b0 + b1*x1 + b2*x2 + ... + bn*xn) ))
Έχουμε πει τόσα πολλά πριν απλώς για να εισαγάγουμε αυτόν τον τύπο
Σου προκαλεί πονοκέφαλο και μόνο που το κοιτάς; Μου προκαλεί πονοκέφαλο και μόνο που το κοιτάζω, οπότε γιατί να μην το απλοποιήσουμε~
Βλέπετε, αισθάνεται πολύ πιο αναζωογονητικό έτσι, ακριβώς όπως ένας όμορφος τύπος που δεν του αρέσει να ντύνεται, τακτοποίησε λίγο την εμφάνισή του και μετά ανακάλυψες, ουάου, αυτός ο τύπος φαίνεται τόσο όμορφος~
Αχαμ, παρεκκλίνομαι~ ΛοιπόνΗ λογιστική παλινδρόμηση είναι στην πραγματικότητα γραμμική παλινδρόμηση + σιγμοειδής συνάρτηση
Το z στη συνάρτηση σιγμοειδούς χρησιμοποιεί γραμμική παλινδρόμηση y = b0 + b1x1 + b2x2 + ... + bn*xn αντικαθιστώ
Τι κάνει λοιπόν αυτό;
Εντάξει, ας ρίξουμε μια ματιά~
Η ουσία της λογιστικής παλινδρόμησης είναιΠροβλέψτε την πιθανότητα να συμβεί ένα συμβάν .Δεν ταξινομεί άμεσα τα δεδομένα, αλλά αντιστοιχίζει τα αποτελέσματα της γραμμικής παλινδρόμησης στο διάστημα 0~1 μέσω μιας συνάρτησης (Σιγμοειδές συνάρτηση Η τιμή σε αυτό το διάστημα αντιπροσωπεύει την πιθανότητα να συμβεί το συμβάν).
Η βάση της λογιστικής παλινδρόμησης είναι η γραμμική παλινδρόμηση. Η γραμμική παλινδρόμηση δημιουργεί ένα γραμμικό μοντέλο και προσπαθεί να προσαρμόσει τα δεδομένα με μια γραμμική συνάρτηση για να αποκτήσει μια προβλεπόμενη τιμή.Αυτή η προβλεπόμενη τιμή μπορεί να είναι οποιαδήποτε τιμή και δεν περιορίζεται από το διάστημα 0~1.
Η συνάρτηση Sigmoid είναι μια "μαγική" συνάρτηση που μετατρέπει την προβλεπόμενη τιμή που λαμβάνεται με γραμμική παλινδρόμηση στο διάστημα 0~1 και οι τιμές σε αυτό το διάστημα μπορούν να ερμηνευθούν ως η πιθανότητα να συμβεί το συμβάν.
Για να εκτελέσουμε δυαδική ταξινόμηση, πρέπει να ορίσουμε ένα όριο, συνήθως 0,5.Εάν η προβλεπόμενη πιθανότητα είναι μεγαλύτερη από το όριο, προσδιορίζεται ότι είναι θετική τάξη, διαφορετικά προσδιορίζεται ως αρνητική τάξη.
Για παράδειγμα:
Η συνάρτηση στα αριστερά μπορεί να θεωρηθεί ως συνάρτηση γραμμικής παλινδρόμησης και η συνάρτηση στα δεξιά είναι η αντιστοιχισμένη σιγμοειδής συνάρτηση.