2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
lineare Regression: Bei begrenzten Daten wird durch Anpassen der Parameter eine gerade Linie angepasst und diese gerade Linie (Modell) wird verwendet, um Experimente mit unbekannten Daten durchzuführen.vorhersagen。
Geradegenerelle Form:
y = w × x + by = w mal x + bj=m×X+B
Der Zustand der gesamten Geraden ist gegeben durch w und sw und bmUndBEntscheiden, wwmBestimmen Sie die GeradeNeigung(das heißt der Neigungswinkel), bbBBestimmen Sie die Gerade auf der Y-Achseabfangen(Steuern Sie die Auf- und Abwärtsverschiebung einer geraden Linie, auch bekannt alsVoreingenommenheit ).Daher müssen wir nur rechnen wwmUnd bbBDer Wert von kann eine bestimmte gerade Linie bestimmen. Als nächstes werden wir untersuchen, wie man sie findet wwmUnd bbB。
Eigenname
Substantiv | Definition |
---|---|
Trainingsset | Datensatz, der zum Trainieren des Modells verwendet wird |
Testsatz | Datensatz, der zum Testen der Qualität des Modells verwendet wird |
Trainingsbeispiel/Trainingspunkt (Trainingsbeispiel) | Jedes Datenelement im Trainingssatz |
Merkmale | Die in das Modell eingegebenen Daten können numerische Werte, Kategoriebezeichnungen, Bildpixelwerte usw. sein. |
Etikett | Das Modell muss den Zielwert vorhersagen. Bei Klassifizierungsproblemen ist die Bezeichnung normalerweise der Klassenname; bei Regressionsproblemen ist die Bezeichnung ein kontinuierlicher Wert. |
Lassen Sie uns zunächst die univariate lineare Regression untersuchen. Die sogenannte univariate lineare Regression bezieht sich auf eine lineare Funktion mit nur einer unabhängigen Variablen, wie zum Beispiel: y = w ⋅ x + by = wcdot x +bj=m⋅X+BDas istUnivariate Gerade, hat nur eine Eingabevariable xxX . Diese gerade Linie kann auf einer zweidimensionalen Ebene ausgedrückt werden (die horizontale Achse ist X und die vertikale Achse ist Y).
Wenn wir einen Satz ungeteilter Daten erhalten, teilen wir die Daten normalerweise in einen Trainingssatz und einen Testsatz auf. Eine einfache Teilungsmethode ist: Nehmen Sie die ersten 80 % der Stichproben als Trainingssatz und die restlichen 20 % als das Testset.
Angenommen, wir haben es herausgefunden wwmUnd bbBDann haben wir eine gerade Linie bestimmt und können diese Gerade verwenden, um Vorhersagen zu treffen, um die Beurteilung des von uns vorhergesagten Werts zu erleichternjamit echtem WertjzwischenFehlerWie viel wollen wir *„ein Lineal“* definieren, mit dem der vorhergesagte Wert gemessen wird j ′ j‘j′mit wahrem Wert JJj Fehler zwischen.Hier verwenden wirmittlerer quadratischer FehlerdefinierenKostenfunktion:
J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sumlimits_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2J(m,B)=2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
Formelabbau:
fw , b ( x ( i ) ) − y ( i ) f_{w,b}(x^{(i)}) - y^{(i)}Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch):In fw , b ( x ( i ) ) f_{w,b}(x^{(i)})Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))stellt den mit dem trainierten Modell vorhergesagten Wert dar, while y ( ich ) y^{(i)}j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)stellt das wahre Ergebnis jeder Trainingsprobe dar, und die Differenz zwischen den beiden stellt den Fehler zwischen dem vom Modell vorhergesagten Wert und dem wahren Wert dar.
Warum den Fehler quadrieren?
In allen Stichprobensätzen kann jeder Fehler positiv oder negativ sein, und es besteht eine gewisse Wahrscheinlichkeit eines Versatzes während des Summierungsprozesses. Dies führt dazu, dass der Fehler jedes Elements sehr groß ist (z. B. -100, + 90). -25, +30), nach der Summierung wird ein kleiner Wert (-5) erhalten, und schließlich wird eine falsche Beurteilung erhalten.
1 2 m frac{1}{2m}2M1: Stellt den Durchschnitt der Summe aller Datenfehler dar (dieser Durchschnitt kann gewissermaßen den Fehler des gesamten Modells darstellen) und ermittelt den mittleren quadratischen Fehler.
Warum durch 2 teilen??
Denn wenn der Gradientenabstieg später durchgeführt wird, wird die Ableitung den Index 2 in Koeffizienten aufteilen, da eine Konstante bei einer großen Datenmenge nur geringe Auswirkungen auf das Modell hat. Um die Ableitungsformel einzuführen, teilen Sie sie im Voraus durch 2. , für späteren Offset.
Wenn wir die Kostenfunktion kennen, müssen wir nur Wege finden, die Kosten zu senken. Je niedriger die Kosten, desto näher liegt unser vorhergesagter Wert am wahren Wert.
Durch Beobachtung der Fehlerkostenfunktion können wir erkennen, dass die Fehlerkostenfunktion eine quadratische Funktion ist, nämlich akonvexe Funktion, eine Eigenschaft der konvexen Funktion ist:Der Extrempunkt ist der Maximalpunkt , Da die Kostenfunktion eine quadratische Funktion ist, die sich nach oben öffnet (die Formel kann erweitert werden, und Sie können intuitiv spüren, dass der Koeffizient des Quadratterms größer als 0 ist), hat die konvexe Funktion nur einen Minimalwert und wir nur Der Mindestwert muss gefunden werden.Für die Fehlerkostenfunktion J ( w , b ) J(w,b)J(m,B) , seine Formelerweiterung kann wie folgt geschrieben werden:
J ( w , b ) = 1 2 m ∑ i = 1 m ( ( wx ( i ) + b ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sumlimits_{i = 1}^m((wx^{(i)}+b) - y^{(i)})^2J(m,B)=2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M((mX(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)+B)−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
JJJDie Größe hängt von den Parametern ab wwmUnd bbB, die durch Gradientenabstieg gelöst werden kann. Die Form der Kostenfunktion ist ungefähr wie folgt:
Die Idee des Gradientenabstiegs läuft hauptsächlichFinden Sie die partielle AbleitungMethode, die mit der Biologie verwandt istSteuervariablenDie Methode ist sehr ähnlich, z. B. im Controlling bbBUpdate ohne Änderung wwm(Sichtbar bbBist eine Konstante), Formel: w ′ = w − α ∂ J ( w ) ∂ ww' = w - alpha frac{partielles J(w)}{partielles w}m′=m−α∂m∂J(m) Zeigt an, dass es nacheinander aktualisiert wurde wwm,In α alphaα repräsentiertLernrate Wird zur Darstellung der Schrittgröße verwendet, die auch als Abstiegsgeschwindigkeit verstanden werden kann. ∂ J ( w ) ∂ w frac{partielles J(w)}{partielles w}∂m∂J(m) drückt Recht aus wwmSuchen wir nach der partiellen Ableitung, erhalten wir W − JW - JB−J(GewichteBund PreisJFunktion) Eine Tangente an eine konvexe Funktion, die zur Darstellung des am schnellsten abnehmenden Funktionswerts verwendet wirdRichtung, das Produkt der beiden darstelltGehen Sie einen Schritt in die Richtung, in der der Funktionswert am schnellsten abnimmt .Dieser Abstand muss entsprechend dem Datensatz angepasst werden α alphaαWenn es zu groß ist (die Schrittgröße ist zu groß), führt dies dazu wwmgeht direkt über den tiefsten Punkt zum höchsten Punkt auf der anderen Seite, so dass er nie in die Nähe des Minimums kommt, wenn α alphaαWenn es zu klein ist (die Schrittgröße ist zu klein), führt dies dazu wwmEs wird immer langsamer, je mehr es sich dem Minimum nähert, was zu einem hohen Rechenaufwand führt.
Lernrate ( α alphaα) Anpassungsmethode:
Stellen Sie zuerst ein kleineres ein α alphaα Wie zum Beispiel: 0,001.
Dann erhöht er sich jedes Mal um das Zehnfache, bis zu einem Maximum von 1.
Nachdem Sie einen bestimmten Wert ermittelt haben, z. B.: 0,01.
Führen Sie dann die Verarbeitung dreimal durch, z. B.: 0,01 × 3 = 0,03 , 0,03 × 3 = 0,09 0,01 mal 3 = 0,03 , 0,03 mal 3 = 0,090.01×3=0.03,0.03×3=0.09 (Der Zweck besteht darin, die Konvergenz zu beschleunigen).
Der Prozess der Lösung partieller Ableitungen (Ermitteln der Richtung des Gradientenabfalls):
bitten ∂ J ( w ) ∂ w frac{partielles J(w)}{partielles w}∂m∂J(m) :
∂ J ( w ) ∂ w frac{partielles J(w)}{partielles w}∂m∂J(m) = ∂ ∂ w 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{partiell}{partiell w}frac{1}{2m}sumlimits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2∂m∂2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
= ∂ ∂ w 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{partiell}{partiell w}frac{1}{2m}sumlimits_{i = 1}^{m}wx^{(i)} - y^{(i)})^2∂m∂2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑MmX(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
= 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 x ( i ) frac{1}{2m}sumlimits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot2x^{(i)}2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))⋅2X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)
= 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) x ( i ) frac{1}{m}sumlimits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)}M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)
bitten ∂ J ( w ) ∂ b frac{partielles J(w)}{partielles b}∂B∂J(m) :
∂ J ( w ) ∂ b frac{partielles J(w)}{partielles b}∂B∂J(m) = ∂ ∂ b 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{partiell}{partiell b}frac{1}{2m}sumlimits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2∂B∂2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
= ∂ ∂ b 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{partiell}{partiell b}frac{1}{2m}sumlimits_{i = 1}^{m}wx^{(i)} - y^{(i)})^2∂B∂2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑MmX(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
= 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 frac{1}{2m}sumlimits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot22M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))⋅2
= 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) frac{1}{m}sumlimits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))
Finden Sie bestimmte durch Schleifeniteration wwmWert mit bbBWert:
während ( ) : während():mHimt():
w ∗ = w − α ∂ ∂ w J ( w , b ) w^* = w - alpha frac{partiell}{partiell w}J(w,b)m∗=m−α∂m∂J(m,B)
b ∗ = b − α ∂ ∂ b J ( w , b ) b^* = b - alpha frac{partiell}{partiell b}J(w,b)B∗=B−α∂B∂J(m,B)
w = w ∗ w = w^*m=m∗
b = b ∗ b = b^*B=B∗
Zu Beginn bewerten wir w und b nach dem Zufallsprinzip und iterieren dann. Wir können den Gradientenabstieg so einstellen, dass er endet, wenn der Fehler unter einem bestimmten Schwellenwert liegt, oder die Anzahl der Iterationen anpassen wwmWertsumme bbBWert.
Die multivariable lineare Regression erweitert die Dimensionen auf drei Dimensionen und sogar mehrdimensionale Zustände, wie z y = w 1 x 1 + w 2 x 2 + by = w_1 x_1 + w_2 x_2 + bj=m1X1+m2X2+B kann verstanden werden alsXAchse undYDie Achsen sind x 1 und x 2 x_1 und x_2X1UndX2 ZDie Achse ist JJjDies ist ein dreidimensionaler Zustand. Jede Trainingsprobe ist ein Punkt im dreidimensionalen Raum. Es ist notwendig, eine geeignete gerade Linie zu finden, um den Probenpunkt in den dreidimensionalen Raum zu passen.
Methode: Für jede Variable separat ( w1, w2, …, wn, b w_1,w_2,Punkte,w_n,bm1,m2,…,mN,B) für die Gradientenabstiegsverarbeitung
Hauptpunkte: Bei der multivariablen linearen Regression sind die Wertebereiche verschiedener Merkmalswerte unterschiedlich, wie zum Beispiel: der Wertebereich des Altersmerkmals: 0 0 0 ~ 100 100 100, Abdeckfläche: 0 m 2 0m^20M2 ~ 10000 m 2 10000m^210000M2 , kann es auch gebenSeltsame ProbeDas Vorhandensein einzelner Beispieldaten führt zu einer Verlängerung der Trainingszeit und kann auch dazu führen, dass die Konvergenz fehlschlägt. Daher ist es erforderlich, die Daten vor dem Training vorzuverarbeiten.Normalisiert ; Im Gegenteil, wenn keine einzelnen Beispieldaten vorhanden sind, muss keine Normalisierung durchgeführt werden.Um dieses Problem anzugehen, müssen wir Leistung erbringenFeatures werden skaliert (normalisiert)。
Datennormalisierungsverarbeitung
erreichenDatennormalisierungEs gibt drei Methoden:
Identisch mit der Division durch den Maximalwert:
Teilen Sie alle Werte in jedem Feature durch den Maximalwert in diesem Feature.
Mittelwertnormalisierung:
Subtrahieren Sie den Wert jedes Features vom Wert dieses Featuresbedeuten, und dann durch die Differenz zwischen dem Maximal- und Minimalwert des Merkmals dividiert.
Z-Score-Normalisierung:
Berechnen Sie jedes MerkmalStandardabweichungUndbedeuten
Subtrahieren Sie den Wert jedes Merkmals von allen Werten dieses MerkmalsDurchschnittswertund dann durch die Funktion dividiertbedeuten
Wenn keine Normalisierung durchgeführt wird, ändert sich die Kostenfunktion aufgrund großer Unterschiede in den Werten verschiedener Merkmale im Merkmalsvektor. "Wohnung" .Auf diese Weise weicht die Richtung des Gradienten beim Durchführen eines Gradientenabstiegs von der Richtung des Minimalwerts ab und geht stark zurückUmleitung, wodurch die Trainingszeit zu lang wird.
Nach der Normalisierung zeigt die Zielfunktion einen Vergleich an "runden", sodass die Trainingsgeschwindigkeit stark beschleunigt wird und viele Umwege vermieden werden.
Vorteile der Datennormalisierung:
J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sumlimits_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2J(m,B)=2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,B(X(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))2
Gradientenabstieg für multiple lineare Regression:
w_1 = W_1 - α1 m∑i = 1 m(fw⃗, bx⃗(i)−y(i)) x1(i) w_1 = W_1 - alpha frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_1^{(i)}m1=B1−αM1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,BX(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))X1(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)
⋮ vPunkte⋮
wn = W n − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) xn ( i ) w_n = W_n - alpha frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_n^{(i)}mN=BN−αM1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,BX(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))XN(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)
b = b − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) b = b - alpha frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})B=B−αM1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(Fm,BX(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)−j(ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch))
erklären: w 1 ⋯ wn w_1cdots w_nm1⋯mN stellt den Koeffizienten jeder Variablen dar und b stellt den konstanten Term der linearen Funktion dar.
Auslassen...
Mathematische Ableitung:
J = 1 2 m ∑ i = 1 m ( θ ⃗ ix ⃗ i − yi ) 2 J = frac{1}{2m}sumlimits_{i = 1}^{m}(vec{theta}_i vec{x}_i - y_i)^2J=2M1ichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch=1∑M(θichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchXichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch−jichchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch)2
= 1 2 m ∣ ∣ θ ⃗ x ⃗ − y ∣ ∣ 2 frac{1}{2m}||vec{theta} vec{x} - y||^22M1∣∣θX−j∣∣2
= 1 2 m ( θ ⃗ x ⃗ − y ) T ( θ ⃗ x ⃗ − y ) frac{1}{2m}(vec{theta} vec{x} - y)^T(vec{theta} vec{x} - y)2M1(θX−j)T(θX−j)
= 1 2 m ( θ ⃗ T x ⃗ T − y T ) ( θ ⃗ x ⃗ − y ) frac{1}{2m}(vec{theta}^T vec{x}^T - y^T)(vec{theta} vec{x} - y)2M1(θTXT−jT)(θX−j)
= 1 2 m ( θ ⃗ T x ⃗ T x ⃗ θ ⃗ − y T x ⃗ θ ⃗ − θ ⃗ T x ⃗ T y + y T y ) frac{1}{2m}(vec{theta}^T vec{x}^Tvec{x}vec{theta} - y^Tvec{x}vec{theta} -vec{theta}^Tvec{x}^Ty +y^Ty )2M1(θTXTXθ−jTXθ−θTXTj+jTj)
Rechts θ ThetaθFinden Sie die partielle Ableitung: Δ = ∂ J ∂ θ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) Delta =frac{partiell J}{partiell theta}= frac{1}{2m}(frac{partiell vec{theta}^T vec{x}^Tvec{x}vec{theta}}{partiell theta} - frac{partiell y^Tvec{x}vec{theta}}{partiell theta} - frac{partiell vec{theta}^Tvec{x}^Ty}{partielles Theta} + frac{y^Ty}{partielles Theta})Δ=∂θ∂J=2M1(∂θ∂θTXTXθ−∂θ∂jTXθ−∂θ∂θTXTj+∂θjTj)
Matrixableitungsregel:
∂ θ TA θ ∂ θ = ( A + AT ) θ frac{partielles Theta^{T}Atheta}{partielles Theta} = (A + A^T)theta∂θ∂θTAθ=(A+AT)θ
∂ XTA ∂ X = A frac{partielles X^{T}A}{partielles X} = A∂X∂XTA=A
∂ AX ∂ X = AT frac{partielles AX}{partielles X} = A^T∂X∂AX=AT
∂ A ∂ X = 0 frac{partiell A}{partiell X} = 0∂X∂A=0
Verfügbar Δ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) = 1 2 m ⋅ ( 2 x T x θ − 2 x T y ) = 1 m ⋅ ( x T x θ − x T y ) Delta = frac{1}{2m}(frac{partial vec{theta}^T vec{x}^Tvec{x}vec{theta}}{partial theta} - frac{partial y^Tvec{x}vec{theta}}{partielles Theta} - frac{partielles vec{theta}^Tvec{x}^Ty}{partielles Theta} + frac{y^Ty}{partielles Theta}) = frac{1}{2m}cdot (2x^Txtheta - 2x^Ty) = frac{1}{m} cdot (x^Txtheta - x^Ty)Δ=2M1(∂θ∂θTXTXθ−∂θ∂jTXθ−∂θ∂θTXTj+∂θjTj)=2M1⋅(2XTXθ−2XTj)=M1⋅(XTXθ−XTj)
Wann Δ = 0 Delta = 0Δ=0 Stunde: x T x θ = x T yx^Tx theta = x^TyXTXθ=XTj , θ = ( x T x ) − 1 x T y theta = (x^Tx)^{-1}x^Tyθ=(XTX)−1XTj berechnet werden kann θ Thetaθ Wert.
Vergleich von Gradientenabstiegs- und Normalgleichungen:
Gradientenabstieg: Es ist notwendig, die Lernrate α auszuwählen, die mehrere Iterationen erfordert. Sie kann auch besser angewendet werden, wenn die Anzahl der Merkmale n groß ist und für verschiedene Modelltypen geeignet ist.
Normalgleichung: Die Lernrate α muss nicht ausgewählt werden. Sie wird einmal berechnet und muss berechnet werden. ( x T x ) − 1 (x^Tx)^{-1}(XTX)−1 , wenn die Anzahl der Features neinNWenn es größer ist, sind die Betriebskosten größer, da die Berechnungszeit der Matrix invers ist O ( n 3 ) O(n^3)Ö(N3) , normalerweise wann neinNBei weniger als 10.000 ist es noch akzeptabel.Nur für lineare Modelle verfügbar, nicht für andere Modelle wie logistische Regressionsmodelle geeignet.
Da es in manchen Fällen für eine gerade Linie schwierig ist, alle Daten anzupassen, sind Kurven erforderlich, um die Daten anzupassen, z. B. quadratische Modelle, kubische Modelle usw.
Im Allgemeinen ist die Regressionsfunktion der Daten unbekannt. Selbst wenn sie bekannt ist, ist es schwierig, sie mit einer einfachen Funktionstransformation in ein lineares Modell umzuwandeln, daher ist der übliche AnsatzPolynomielle Regression(Polynomiale Regression), d. h. die Verwendung einer Polynomfunktion zur Anpassung der Daten.
So wählen Sie den Grad eines Polynoms:
Es gibt viele Arten von Polynomfunktionen. Im Allgemeinen müssen Sie zunächst die Form der Daten beobachten und dann entscheiden, welche Form von Polynomfunktionen zur Lösung des Problems verwendet werden soll. Wenn beispielsweise aus dem Streudiagramm der Daten ein „biegen ", können Sie die Verwendung eines quadratischen Polynoms in Betracht ziehen (d. h. die Quadrierung der Eigenschaften); es gibt zwei "biegen ", können Sie die Verwendung eines kubischen Polynoms in Betracht ziehen (wobei die kubische Potenz des Merkmals verwendet wird); es gibt drei "biegen “, dann erwägen Sie die Verwendung eines Polynoms vierter Ordnung (unter Verwendung der vierten Potenz des Merkmals) und so weiter.
Obwohl die reale Regressionsfunktion nicht unbedingt ein Polynom eines bestimmten Grades ist, ist es bei guter Anpassung möglich, ein geeignetes Polynom zu verwenden, um die reale Regressionsfunktion anzunähern.
Der Anhang am Ende des Artikels enthält alle im Experiment verwendeten Originaldaten.ex1data1.txt
ist das Verhältnis zwischen Bevölkerung und Profit, ex1data2.txt
Es ist der Einfluss der Größe des Hauses und der Anzahl der Schlafzimmer auf den Preis des Hauses.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = "ex1data1.txt"
data = pd.read_csv(path,header = None,names=['Population','Profit'])
data.head() # 预览数据
data.describe() # 更加详细的数据描述
# 可视化训练数据
data.plot(kind = 'scatter',x = 'Population',y = 'Profit',figsize = (12,8))
plt.show()
def computerCost(X,y,theta): # 定义代价函数
inner = np.power(((X*theta.T)-y),2) # theta.T表示theta的转置
return np.sum(inner)/(2*len(X))
data.insert(0,"One",1) # 表示在第0列前面插入一列数,其表头为One,其值为1
In die erste Spalte des Datensatzes einfügen 1 1 1Die Funktion besteht darinErleichtert Matrixberechnungen, wenn Matrizen multipliziert werden, sind Gewichte beteiligt wwmund Voreingenommenheit bbB,Weil bbBwird nicht mit der Variablen multipliziert, also a 1 1 1, benutzt mit bbBMultiplizieren.
cols = data.shape[1]
X = data.iloc[:,0:cols - 1] #“,”前只有“:”,表示所有的行,“,”后表示抽取数据中第[0列~第cols-1列)(左闭右开),去掉最后一列,最后一列为预测值
y = data.iloc[:,cols - 1:cols] #只取最后一列的值,表示预测值
X.head()
y.head()
X = np.matrix(X.values)
y = np.matrix(y.values) #只将表格中的值装换为矩阵而不是包括序号与标题
#初始化theta
theta = np.matrix(np.array([0,0])) #先是一个一维的数据,然后在转换为一个二维的矩阵
theta
# => matrix([[0, 0]])
X.shape,theta.shape,y.shape # 此时theta为一行列,需要进行转置
# => ((97, 2), (1, 2), (97, 1))
computerCost(X,y,theta)
# => 32.072733877455676
def gradientDecent(X,y,theta,alpha,iters): #iters为迭代次数
temp = np.matrix(np.zeros(theta.shape)) #构造一个与theta大小一样的零矩阵,用于存储更新后的theta
parmaters = int (theta.ravel().shape[1]) #.ravel()的功能是将多维数组降至一维,用于求需要求的参数个数
cost = np.zeros(iters) #构建iters个0的数组,相当于对每次迭代的cost进行记录
for i in range(iters):
error = (X * theta.T - y) #记录误差值,结果为一个数组
for j in range(parmaters): #对每一个参数进行更新,j用于表示每一个参数
term = np.multiply(error,X[:,j]) #.multiply 是对矩阵当中的数对应相乘,这里表示与X矩阵的第j列相乘。
temp[0,j] = theta[0,j] - ((alpha/len(X))*np.sum(term)) #存储更行后的theta的值,.sum()表示将矩阵中的数进行求和
theta = temp #更新theta
cost[i] = computerCost(X,y,theta) #计算此时的代价,并记录在cost中。
return theta,cost
alpha = 0.01 # 学习率
iters = 1000 # 迭代次数
g,cost = gradientDecent(X,y,theta,alpha,iters)
g
# => matrix([[-3.24140214, 1.1272942 ]])
computerCost(X,y,g)
# => 4.515955503078914
x = np.linspace(data.Population.min(),data.Population.max(),100) #抽取100个样本 (从data数据集中的最小值到最大值之间抽取100个样本)
f = g[0,0] + (g[0,1] * x) #f = ax + b
fig,ax = plt.subplots(figsize = (12,8)) #figsize表示图的大小
ax.plot(x,f,'r',label = "Prediction") #绘制直线,横坐标,纵坐标,直线名称
ax.scatter(data.Population,data.Profit,label = 'Training data') #绘制点,横坐标,纵坐标,点的名称
ax.legend(loc = 4) #显示图例位置
ax.set_xlabel('Population') #设置x轴的名称
ax.set_ylabel('Profit') #设置y轴的名称
ax.set_title('Predicted Profit vs. Population Size') #设置标题的名称
plt.show()
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost,'r')
ax.set_xlabel('Interations')
ax.set_ylabel('Cost')
ax.set_title("Error vs. Training Epoc")
plt.show()
path = "ex1data2.txt"
data2 = pd.read_csv(path,header = None,names=["Size","Bedroom","Price"])
data2.head()
data2 = (data2 - data2.mean())/data2.std()
data2.head()
data2.insert(0,'Ones',1) #在x的第一列插入1
clos = data2.shape[1] #存储第二维(列)的数据量
X2 = data2.iloc[:,0:clos-1] #对X2进行赋值
y2 = data2.iloc[:,clos-1:clos] #对y2进行赋值
X2 = np.matrix(X2.values) #将X2转为矩阵
y2 = np.matrix(y2.values) #将y2转为矩阵
theta2 = np.matrix(np.array([0,0,0])) #初始化theta2为0矩阵
computerCost(X2, y2, theta2)
# => 0.48936170212765967
g2,cost2 = gradientDecent(X2,y2,theta2,alpha,iters) #记录放回值g2(theta2)和cost2
g2
# => matrix([[-1.10868761e-16, 8.78503652e-01, -4.69166570e-02]])
computerCost(X2,y2,g2)
# => 0.13070336960771892
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost2,'x')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
#正规方程
def normalEqn(X,y):
theta = np.linalg.inv(X.T@X)@X.T@y #.linalg中包含线性代数中的函数,求矩阵的逆(inv)、特征值等。@表示矩阵相乘
return theta
final_theta2 = normalEqn(X,y)
final_theta2
# => matrix([[-3.89578088], [ 1.19303364]])
Allgemeine Schritte zum Trainieren eines Modells:
ex1data1.txt
6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705
ex1data2.txt
2104,3,399900
1600,3,329900
2400,3,369000
1416,2,232000
3000,4,539900
1985,4,299900
1534,3,314900
1427,3,198999
1380,3,212000
1494,3,242500
1940,4,239999
2000,3,347000
1890,3,329999
4478,5,699900
1268,3,259900
2300,4,449900
1320,2,299900
1236,3,199900
2609,4,499998
3031,4,599000
1767,3,252900
1888,2,255000
1604,3,242900
1962,4,259900
3890,3,573900
1100,3,249900
1458,3,464500
2526,3,469000
2200,3,475000
2637,3,299900
1839,2,349900
1000,1,169900
2040,4,314900
3137,3,579900
1811,4,285900
1437,3,249900
1239,3,229900
2132,4,345000
4215,4,549000
2162,4,287000
1664,2,368500
2238,3,329900
2567,4,314000
1200,3,299000
852,2,179900
1852,4,299900
1203,3,239500