le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
regressione lineare: Nei dati limitati, regolando i parametri, viene adattata una linea retta e questa linea retta (modello) viene utilizzata per eseguire esperimenti su dati sconosciuti.prevedere。
Drittoforma generale:
y = w × x + by = w volte x + be=io×X+B
Lo stato dell'intera retta è dato da w e bw e bioEBDecidere, tutto beneiodeterminare la rettapendenza(ovvero, l'angolo di inclinazione), bbBDetermina la retta sull'asse Yintercettare(Controlla la traslazione su e giù di una linea retta, nota anche comepregiudizio ).Pertanto, dobbiamo solo calcolare tutto beneioE bbBIl valore di può determinare una linea retta specifica Successivamente, studieremo come trovarla tutto beneioE bbB。
nome proprio
sostantivo | Definizione |
---|---|
Set di allenamento | Set di dati utilizzato per addestrare il modello |
set di prova | Set di dati utilizzato per testare la qualità del modello |
Esempio di addestramento/Punto di addestramento (Esempio di addestramento) | Ogni elemento di dati nel set di training |
Caratteristiche | I dati immessi nel modello possono essere valori numerici, etichette di categoria, valori di pixel di immagine, ecc. |
Etichetta | Il modello deve prevedere il valore target. Per i problemi di classificazione, l'etichetta è solitamente il nome della classe; per i problemi di regressione, l'etichetta è un valore continuo. |
Studiamo prima la regressione lineare univariata La cosiddetta regressione lineare univariata si riferisce a una funzione lineare con una sola variabile indipendente, come: y = w ⋅ x + by = wcdot x + be=io⋅X+BQuesto èRetta univariata, ha una sola variabile di input XXIX . Questa retta può essere espressa su un piano bidimensionale (l'asse orizzontale è X e l'asse verticale è Y).
Quando otteniamo un insieme di dati indivisi, di solito dividiamo i dati in un set di addestramento e un set di test. Un metodo di divisione semplice è: prendere il primo 80% dei campioni come set di addestramento e il restante 20% come set. il set di prova.
Supponiamo di averlo scoperto tutto beneioE bbB, quindi abbiamo determinato una linea retta e possiamo utilizzare questa linea retta per fare previsioni per facilitare il giudizio del valore che prevediamoio'con valore realeefraerroreQuanto, vogliamo definire *"un righello"*, utilizzato per misurare il valore predetto e ′ e'e′con vero valore aa ...e errore tra.Qui usiamoerrore quadratico mediodefinirefunzione di costo:
J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w, b) = frac{1}{2m}sommalimiti_{i = 1}^m(f_{w, b}(x^{(i)}) - y^{(i)})^2J(io,B)=2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
Smantellamento della formula:
fw , b ( x ( i ) ) − y ( i ) f_{w,b}(x^{(i)}) - y^{(i)}Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo):In fw , b ( x ( i ) ) f_{w,b}(x^{(i)})Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))rappresenta il valore previsto utilizzando il modello addestrato, mentre e (io) y^{(io)}e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)rappresenta il risultato reale di ciascun campione di addestramento e la differenza tra i due rappresenta l'errore tra il valore previsto dal modello e il valore reale.
Perché quadrare l'errore?
In tutti i set di campioni, ogni errore può essere positivo o negativo e ci sarà una certa probabilità di compensazione durante il processo di somma. Ciò porterà a quando l'errore di ciascun elemento sarà molto grande (ad esempio: -100, + 90,). -25, +30), dopo aver sommato si ottiene un valore piccolo (-5) e infine si ottiene un giudizio errato.
1 2 m frattura{1}{2m}2M1: Rappresenta la media della somma di tutti gli errori dei dati (questa media può rappresentare in un certo senso l'errore dell'intero modello) e ottiene l'errore quadratico medio.
Perché dividere per 2?
Perché quando la discesa del gradiente viene eseguita successivamente, la derivazione dividerà l'indice 2 in coefficienti, poiché per una grande quantità di dati, una costante ha un impatto minimo sul modello. Per introdurre la formula di derivazione, dividerla per 2 in anticipo. , per la successiva compensazione.
Conoscendo la funzione di costo, dobbiamo solo trovare modi per ridurre il costo. Quanto più basso è il costo, tanto più vicino è il valore previsto al valore reale.
Osservando la funzione del costo dell'errore, possiamo vedere che la funzione del costo dell'errore è una funzione quadratica, cioè afunzione convessa, una proprietà della funzione convessa è:Il punto estremo è il punto massimo , poiché la funzione di costo è una funzione quadratica che si apre verso l'alto (la formula può essere espansa e si può intuitivamente sentire che il coefficiente del termine quadrato è maggiore di 0), quindi la funzione convessa ha solo un valore minimo e noi solo è necessario trovare il Il valore minimo è il valore minimo.Per la funzione del costo dell'errore J ( w , b ) J( w , b )J(io,B) , la sua formula di sviluppo può essere scritta come:
J ( w , b ) = 1 2 m ∑ i = 1 m ( ( wx ( i ) + b ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sommalimiti_{i = 1}^m((wx^{(i)}+b) - y^{(i)})^2J(io,B)=2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M((ioX(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)+B)−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
Il mio nome è J.J.JLa dimensione dipende dai parametri tutto beneioE bbB, che può essere risolto mediante la discesa del gradiente. La forma della funzione di costo è approssimativamente la seguente:
L'idea della discesa del gradiente funziona principalmenteTrova la derivata parzialemetodo, che è legato al biologicovariabili di controlloIl metodo è molto simile, ad esempio: nel controllo bbBAggiorna senza modifiche tutto beneio(Visibile bbBè una costante), formula: w ′ = w − α ∂ J ( w ) ∂ ww' = w - alfa frac{J(w) parziale}{w parziale}io′=io−α∂io∂J(io) Indica che è stato aggiornato in sequenza tutto beneio,In alfa alfaα rappresentatasso di apprendimento Utilizzato per rappresentare la dimensione del passo, che può essere intesa anche come velocità di discesa, ∂ J ( w ) ∂ w frac{J(w) parziale}{w parziale}∂io∂J(io) esprime ragione tutto beneioCercando la derivata parziale otteniamo W − JW - JL'−J(PesiL'e prezzoJfunzione) Una linea tangente su una funzione convessa, utilizzata per rappresentare il valore della funzione che diminuisce più rapidamentedirezione, il prodotto dei due rappresentaMuoversi di un passo nella direzione in cui il valore della funzione diminuisce più velocemente .Questa distanza deve essere regolata in base al set di dati alfa alfaαSe è troppo grande (la dimensione del passo è troppo grande), porterà a tutto beneiova direttamente sopra il punto più basso fino al punto più alto sull'altro lato, in modo che non si avvicini mai al minimo, se alfa alfaαSe è troppo piccolo (la dimensione del passo è troppo piccola), porterà a tutto beneioDiventa sempre più lento man mano che si avvicina al minimo, consumando costi computazionali.
tasso di apprendimento ( alfa alfaα) metodo di regolazione:
Impostane prima uno più piccolo alfa alfaα Ad esempio: 0,001.
Poi aumenta ogni volta di 10 volte, fino ad un massimo di 1.
Dopo aver determinato un determinato valore, ad esempio: 0,01.
Quindi eseguire 3 volte l'elaborazione, ad esempio: 0,01 × 3 = 0,03, 0,03 × 3 = 0,09 0,01 volte 3 = 0,03, 0,03 volte 3 = 0,090.01×3=0.03,0.03×3=0.09 (Lo scopo è quello di rendere la convergenza più veloce).
Il processo di risoluzione delle derivate parziali (trovare la direzione della discesa del gradiente):
elemosinare ∂ J ( w ) ∂ w frac{J(w) parziale}{w parziale}∂io∂J(io) :
∂ J ( w ) ∂ w frac{J(w) parziale}{w parziale}∂io∂J(io) = ∂ ∂ w 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{parziale}{parziale w}frac{1}{2m}sommalimiti_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2∂io∂2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
= ∂ ∂ w 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{parziale}{parziale w}frac{1}{2m}sommalimiti_{i = 1}^{m}wx^{(i)} - y^{(i)})^2∂io∂2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑MioX(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
= 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 x ( i ) frac{1}{2m}sommalimiti_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot2x^{(i)}2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))⋅2X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)
= 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) x ( i ) frac{1}{m}sommalimiti_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)}M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)
elemosinare ∂ J ( w ) ∂ b frac{J(w) parziale}{b parziale}∂B∂J(io) :
∂ J ( w ) ∂ b frac{J(w) parziale}{b parziale}∂B∂J(io) = ∂ ∂ b 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{parziale}{parziale b}frac{1}{2m}sommalimiti_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2∂B∂2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
= ∂ ∂ b 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{parziale}{parziale b}frac{1}{2m}sommalimiti_{i = 1}^{m}wx^{(i)} - y^{(i)})^2∂B∂2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑MioX(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
= 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 frac{1}{2m}sommalimiti_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot22M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))⋅2
= 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) frac{1}{m}sommalimiti_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))
Trova quelli specifici attraverso l'iterazione del ciclo tutto beneiovalore con bbBvalore:
mentre() : mentre() :ioCIAOle():
w ∗ = w − α ∂ ∂ w J ( w , b ) w^* = w - alfa frac{parziale}{w parziale}J(w,b)io∗=io−α∂io∂J(io,B)
b ∗ = b − α ∂ ∂ b J ( w , b ) b^* = b - alfa frac{parziale}{parziale b}J(w,b)B∗=B−α∂B∂J(io,B)
la = la ∗ la = la^*io=io∗
b = b ∗ b = b^*B=B∗
All'inizio valorizziamo w e b in modo casuale, quindi iteriamo. Possiamo impostare la discesa del gradiente per uscire quando l'errore è inferiore a una determinata soglia o personalizzare il numero di iterazioni. Attraverso passaggi limitati, possiamo ottenere un valore più ideale tutto beneiosomma di valore bbBvalore.
La regressione lineare multivariabile espande le dimensioni a tre dimensioni e persino a stati multidimensionali, come ad esempio y = w 1 x 1 + w 2 x 2 + di = w_1 x_1 + w_2 x_2 + be=io1X1+io2X2+B può essere inteso comeXAsse eEGli assi sono x1 e x2 x_1 e x_2X1EX2 LaL'asse è aa ...e, questo è uno stato tridimensionale. Ogni campione di addestramento è un punto nello spazio tridimensionale. È necessario trovare una linea retta adatta per adattare il punto campione nello spazio tridimensionale.
Metodo: per ciascuna variabile separatamente ( w 1 , w 2 , … , wn , b w_1,w_2,punti,w_n,bio1,io2,…,ioN,B) per l'elaborazione della discesa del gradiente
Punti principali: Per la regressione lineare multivariabile, gli intervalli di valori dei diversi valori delle caratteristiche sono diversi, ad esempio: l'intervallo di valori della caratteristica età: 0 0 0 ~ 100 100 100, coprendo l'area: 0 metri 2 0 metri ^ 20M2 ~ 10000 metri quadrati 10000 metri quadrati10000M2 , potrebbe anche esserciStrano campione, l'esistenza di dati campione singolari causerà un aumento del tempo di addestramento e potrebbe anche portare alla mancata convergenza. Pertanto, quando sono presenti dati campione singolari, è necessario preelaborare i dati prima dell'addestramento.Normalizzato ; Al contrario, quando non esistono dati campione singolari, non è necessario eseguire la normalizzazione.Per affrontare questo problema, dobbiamo eseguireLe caratteristiche sono ridimensionate (normalizzate)。
Elaborazione della normalizzazione dei dati
compiereNormalizzazione dei datiEsistono tre metodi:
Equivale a dividere per il valore massimo:
Dividi tutti i valori in ciascuna caratteristica per il valore massimo in quella caratteristica.
Normalizzazione media:
Sottrai il valore di ciascuna caratteristica dal valore di quella caratteristicaSignificare, e poi diviso per la differenza tra i valori massimo e minimo della caratteristica.
Normalizzazione del punteggio Z:
Calcola ciascuna caratteristicadeviazione standardESignificare
Sottrai il valore di ciascuna caratteristica da tutti i valori di quella caratteristicavalore medioe poi diviso per la funzionalitàSignificare
Se la normalizzazione non viene eseguita, la funzione di costo cambierà a causa delle grandi differenze nei valori delle diverse caratteristiche nel vettore delle caratteristiche. "Piatto" .In questo modo, quando si esegue la discesa del gradiente, la direzione del gradiente si discosterà dalla direzione del valore minimo e andrà moltodeviazione, il che renderà il tempo di allenamento troppo lungo.
Dopo la normalizzazione, la funzione obiettivo mostrerà un confronto "girare", in modo che la velocità di allenamento sia notevolmente accelerata e si evitino molte deviazioni.
Vantaggi della normalizzazione dei dati:
J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w, b) = frac{1}{2m}sommalimiti_{i = 1}^m(f_{w, b}(x^{(i)}) - y^{(i)})^2J(io,B)=2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,B(X(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))2
Discesa del gradiente per la regressione lineare multipla:
w 1 = W 1 − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) x 1 ( i ) w_1 = W_1 - alfa frac{1}{m}sommalimiti_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_1^{(i)}io1=L'1−αM1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,BX(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))X1(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)
⋮ puntini⋮
wn = W n − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) xn ( i ) w_n = W_n - alfa frac{1}{m}sommalimiti_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_n^{(i)}ioN=L'N−αM1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,BX(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))XN(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)
b = b − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) b = b - alfa frac{1}{m}sommalimiti_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})B=B−αM1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(Fio,BX(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo)−e(ioooooooooooooooooooooooooooooooooooooooooooooooooooooo))
spiegare: w 1 ⋯ wn w_1cpuntini w_nio1⋯ioN rappresenta il coefficiente di ciascuna variabile e b rappresenta il termine costante della funzione lineare.
Omettere...
Derivazione matematica:
J = 1 2 m ∑ i = 1 m ( θ ⃗ ix ⃗ i − yi ) 2 J = frac{1}{2m}sommalimiti_{i = 1}^{m}(vec{theta}_i vec{x}_i - y_i)^2J=2M1ioooooooooooooooooooooooooooooooooooooooooooooooooooooo=1∑M(θiooooooooooooooooooooooooooooooooooooooooooooooooooooooXioooooooooooooooooooooooooooooooooooooooooooooooooooooo−eioooooooooooooooooooooooooooooooooooooooooooooooooooooo)2
= 1 2 m ∣ ∣ θ ⃗ x ⃗ − y ∣ ∣ 2 frac{1}{2m}||vec{theta} vec{x} - y||^22M1∣∣θX−e∣∣2
= 1 2 m ( θ ⃗ x ⃗ − y ) T ( θ ⃗ x ⃗ − y ) frazione{1}{2m}(vec{theta} vec{x} - y)^T(vec{theta} vec{x} - y)2M1(θX−e)T(θX−e)
= 1 2 m ( θ ⃗ T x ⃗ T − y T ) ( θ ⃗ x ⃗ − y ) frazione{1}{2m}(vec{theta}^T vec{x}^T - y^T)(vec{theta} vec{x} - y)2M1(θTXT−eT)(θX−e)
= 1 2 m ( θ ⃗ T x ⃗ T x ⃗ θ ⃗ − y T x ⃗ θ ⃗ − θ ⃗ T x ⃗ T y + y T y ) frazione{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θ−eTXθ−θTXTe+eTe)
Giusto θ-tetaθTrova la derivata parziale: Δ = ∂ J ∂ θ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) Delta =frac{J parziale}{theta parziale}= frac{1}{2m}(frac{vec{theta parziale}^T vec{x}^Tvec{x}vec{theta}}{theta parziale} - frac{y parziale^Tvec{x}vec{theta}}{theta parziale} - frac{ vec{theta}^Tvec{x}^Ty}{theta parziale} + frac{y^Ty}{theta parziale})Δ=∂θ∂J=2M1(∂θ∂θTXTXθ−∂θ∂eTXθ−∂θ∂θTXTe+∂θeTe)
Regola di derivazione della matrice:
∂ θ TA θ ∂ θ = ( A + AT ) θ frac{theta parziale^{T}Atheta}{theta parziale} = (A + A^T)theta∂θ∂θTUNθ=(UN+UNT)θ
∂ XTA ∂ X = A frac{X parziale^{T}A}{X parziale} = A∂X∂XTUN=UN
∂ AX ∂ X = AT frac{AX parziale}{X parziale} = A^T∂X∂UNX=UNT
∂ A ∂ X = 0 frac{A parziale}{X parziale} = 0∂X∂UN=0
Disponibile Δ = 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{vec{theta}^T vec{x}^Tvec{x}vec{theta}}{theta parziale} - frac{theta y^Tvec{x}vec{theta}}{theta parziale} - frac{vec{theta parziale}^Tvec{x}^Ty}{theta parziale} + frac{y^Ty}{theta parziale}) = frac{1}{2m}cdot (2x^Txtheta - 2x^Ty) = frac{1}{m} cdot (x^Txtheta - x^Ty)Δ=2M1(∂θ∂θTXTXθ−∂θ∂eTXθ−∂θ∂θTXTe+∂θeTe)=2M1⋅(2XTXθ−2XTe)=M1⋅(XTXθ−XTe)
Quando Δ = 0 Delta = 0Δ=0 ora: x T x θ = x T yx^Tx theta = x^TyXTXθ=XTe , θ = ( x T x ) − 1 x T y theta = (x^Tx)^{-1}x^Tyθ=(XTX)−1XTe può essere calcolato θ-tetaθ valore.
Confronto tra la discesa del gradiente e le equazioni normali:
discesa del gradiente: È necessario selezionare la velocità di apprendimento α, che richiede più iterazioni. Può anche essere applicata meglio quando il numero di caratteristiche n è elevato ed è adatta a vari tipi di modelli.
equazione normale: Non è necessario selezionare il tasso di apprendimento α Viene calcolato una volta e deve essere calcolato. ( x T x ) − 1 (x^Tx)^{-1}(XTX)−1 , se il numero di funzionalità non-negligenzaNSe è maggiore, il costo dell'operazione sarà maggiore, poiché la complessità del tempo di calcolo della matrice è inversa O(n3) O(n^3)Lo(N3) , di solito quando non-negligenzaNÈ ancora accettabile quando è inferiore a 10.000.Disponibile solo per i modelli lineari, non adatto per altri modelli come i modelli di regressione logistica.
Poiché in alcuni casi è difficile che una linea retta possa adattare tutti i dati, sono necessarie delle curve per adattare i dati, come i modelli quadratici, i modelli cubici, ecc.
In generale, la funzione di regressione dei dati è sconosciuta. Anche se è nota, è difficile trasformarla in un modello lineare con una semplice trasformazione di funzione, quindi è l'approccio comuneregressione polinomiale(Regressione polinomiale), ovvero utilizzando una funzione polinomiale per adattare i dati.
Come scegliere il grado di un polinomio:
Esistono molti tipi di funzioni polinomiali. In generale, è necessario prima osservare la forma dei dati e poi decidere quale forma di funzione polinomiale utilizzare per risolvere il problema. Ad esempio, dal grafico a dispersione dei dati, se è presente un "curva ", puoi considerare l'utilizzo di un polinomio quadratico (cioè elevando al quadrato le caratteristiche); ce ne sono due "curva ", puoi considerare l'utilizzo di un polinomio cubico (prendendo la potenza cubica della caratteristica); ce ne sono tre "curva ”, quindi considera l'utilizzo di un polinomio del quarto ordine (prendendo la quarta potenza della caratteristica) e così via.
Sebbene la funzione di regressione reale non sia necessariamente un polinomio di un certo grado, purché l'adattamento sia buono, è possibile utilizzare un polinomio appropriato per approssimare la funzione di regressione reale.
L'appendice alla fine dell'articolo contiene tutti i dati originali utilizzati nell'esperimento.ex1data1.txt
è il rapporto tra popolazione e profitto, ex1data2.txt
È l’impatto delle dimensioni della casa e del numero di camere da letto sul prezzo della casa.
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
Inserisci nella prima colonna del set di dati 1 1 1La funzione è quella diFacilita i calcoli con matrici, quando le matrici vengono moltiplicate, entrano in gioco i pesi tutto beneioe pregiudizio bbB,Perché bbBnon viene moltiplicato per la variabile, quindi a 1 1 1, usato con bbBMoltiplicare.
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]])
Passaggi generali per l'addestramento di un modello:
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