Regressione lineare utilizzando una rete neurale

Contenuti

Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati

15681nn-6593795

In questo articolo, responderemos estas preguntas básicas y construiremos una neuronale rosso básica para realizar la regresión lineal.

Cos'è una rete neurale?

L'unità di base del cervello è nota come neurone, ci sono circa 86 miliardi di neuroni nel nostro sistema nervoso che sono collegati a 10 ^ 14-10 ^ 15 sinapsi. meOgni neurone riceve un segnale dalle sinapsi e lo emette dopo aver elaborato il segnale.. Questa idea viene estratta dal cervello per costruire una rete neurale.

Ogni neurone realizza un prodotto scalare tra gli input e i pesi, aggiungere pregiudizi, aplica una funzione sveglia y emite las salidas. Quando un gran numero di neuroni sono presenti insieme per dare un gran numero di uscite, si forma uno strato neurale. Finalmente, più livelli si combinano per formare una rete neurale.

Architettura dei neuroni rossi

Le reti neurali si formano quando più strati neurali si combinano tra loro per dare una rete, oppure possiamo dire che ci sono dei layer i cui output sono input per altri layer.

Il tipo più comune di livello per costruire una rete neurale di base è il livello completamente connesso, in cui gli strati adiacenti sono completamente accoppiati e i neuroni a strato singolo non sono collegati tra loro.

rete_neurale_artificiale-1161436

En la figura anteriore, le reti neurali vengono utilizzate per classificare i punti dati in tre categorie.

Convenzioni di denominazione. Quando la rete neurale a strati N, no contamos la livello di input. Perciò, una rete neurale a strato singolo descrive una rete senza strati nascosti (l'input è mappato direttamente sull'output). Nel caso del nostro codice, useremo una rete neurale a strato singolo, vale a dire, non abbiamo un livello nascosto.

Livello di output. A differenza di tutti i livelli in una rete neurale, i neuroni nello strato di output comunemente non hanno una funzione di scarica (oppure puoi pensare che abbiano una funzione di attivazione dell'identità lineare). Questo perché l'ultimo livello di output viene solitamente utilizzato per rappresentare i punteggi della classe (ad esempio, in classifica), che sono numeri arbitrari di valore reale o qualche tipo di obiettivo di valore reale (ad esempio, in regressione). Poiché stiamo eseguendo la regressione utilizzando un singolo livello, non abbiamo alcuna funzione di attivazione.

Dimensionamento della rete neurale. Le due metriche che le persone usano comunemente per misurare la dimensione delle reti neurali sono il numero di neuroni o, più comunemente, el número de parametri.

Biblioteche

Useremo tre librerie di base per questo modello, insensibile, matplotlib e TensorFlow.

  • Numpy: questo aggiunge il supporto per array e array di grandi dimensioni e multidimensionali, insieme a una vasta collezione di funzioni matematiche di alto livello. Nel nostro caso, genereremo dati con l'aiuto di Numpy.
  • Matplotlib: questa è una libreria di plottaggio per Python, visualizzeremo i risultati finali utilizzando grafici in Matplotlib.
  • Tensorflow: esta biblioteca tiene un enfoque particular en el addestramento y la inferencia de redes neuronales profundas. Possiamo importare direttamente i livelli e addestrare, funzioni di test senza dover scrivere l'intero programma.
importa numpy come np
importa matplotlib.pyplot come plt
import tensorflow come tf

Generazione di dati

Possiamo generare i nostri dati numerici per questo processo usando la funzione np.unifrom () che genera dati uniformi. Qui, stiamo usando due variabili di input xs e zs, aggiungendo un po' di rumore per randomizzare i punti dati e, Finalmente, il variabile objetivo se define como y = 2 * xs-3 * zs + 5 + rumore. La dimensione del set di dati è 1000.

osservazioni=1000
xs=np.random.uniform(-10,10,(osservazioni,1))
zs=np.random.uniform(-10,10,(osservazioni,1))
generate_inputs=np.column_stack((xs,zs))
noise=np.random.uniform(-10,10,(osservazioni,1))
target_generato=2*xs-3*zs+5+rumore

Dopo aver generato i dati, salvali in un file .npz, in modo che possano essere utilizzati per l'allenamento.

np. so('TF_intro',input=generated_inputs,target=bersaglio_generato)
training_data=np.load('TF_intro.npz')

Il nostro obiettivo è ottenere i pesi finali il più vicino possibile ai pesi effettivi., vale a dire [2,-3].

Definire il modello

Qui, usaremos la capa densa de TensorFlow para hacer el modelo e importar el descenso del gradiente estocástico del optimizador de Keras.

Un gradiente è la pendenza di una funzione. Misura il grado di variazione di una variabile al variare di un'altra variabile. Matematicamente, la discesa del gradiente è una funzione convessa il cui output è la parziale derivazione di un insieme di parametri dai suoi input. Più alta è la pendenza, più ripida è la pendenza.

Partendo da un valore iniziale, Gradient Descent viene eseguito iterativamente per trovare i valori ottimali dei parametri per trovare il valore minimo possibile per la data funzione di costo. La parola “Stocastico” si riferisce a un sistema o processo di probabilità casuale. Perciò, en Discesa gradiente stocastico, alcuni campioni sono selezionati casualmente, invece del set di dati per ogni iterazione.

dato che, l'ingresso ha 2 variabili, dimensione dell'ingresso = 2 e dimensione di uscita = 1.

Impostiamo il tasso di apprendimento a 0.02, che non è né troppo alto né troppo basso, e il valore dell'epoca = 100.

input_size=2
output_size=1
modelli = tf.keras.Sequential([
                             tf.strati.duri.Densi(output_size)
                            ])
custom_optimizer=tf.keras.optimizers.SGD(tasso_di apprendimento=0.02)
modelli.compila(ottimizzatore=ottimizzatore_personalizzato,perdita="mean_squared_error")
modelli.fit(training_data['ingresso'],training_data['obiettivi'],epoche=100,verbose=1)

Ottieni pesi e pregiudizi

Possiamo stampare i valori previsti di pesi e distorsioni e anche memorizzarli.

modelli.strati[0].get_pesi()
[Vettore([[ 1.3665189],
        [-3.1609795]], dtype=float32), Vettore([4.9344487], dtype=float32)]

Qui, la prima matrice rappresenta i pesi e la seconda matrice rappresenta i pregiudizi. Possiamo vedere chiaramente che i valori previsti dei pesi sono molto vicini al valore effettivo dei pesi..

pesi=modelli.strati[0].get_pesi()[0]
bias=modelli.strati[0].get_pesi()[1]

Previsione e precisione

Dopo la previsione utilizzando i pesi e i pregiudizi dati, un punteggio RMSE finale di 0.02866, che è piuttosto basso.

RMSE è definito come la radice dell'errore quadratico medio. La radice dell'errore quadratico medio prende la differenza per ogni valore osservato e previsto. La formula per l'errore RMSE è data come:

https://www.google.com/search?q=rmse+formula&oq=RMSE+forma&aqs=cromo.0.0i433j0j69i57j0l7.4779j0j7&sourceid=chrome&cioè=UTF-8

30971rmse-5564965
io

=

variabile i

{NORD}

=

numero di punti dati non mancanti

X_ {io}

=

osservazioni di serie in tempo reale

cappello {X} _ {io}

=

serie temporali stimate

out=training_data['obiettivi'].il giro(1)
da sklearn.metrics import mean_squared_error
mean_squared_error(generato_target, fuori, quadrato=Falso)

Si trazamos los datos predichos en un Diagramma di dispersione, otteniamo un grafico come questo:

plt.scatter(np.squeeze(models.predict_on_batch(training_data['ingresso'])),np.squeeze(training_data['obiettivi']),c="#88c999")
plt.xlabel('Ingresso')
plt.ylabel('Uscita prevista')
plt.mostra()
29560nn2-9672465

evviva! Il nostro modello è addestrato correttamente con pochissimi errori. Questa è la fine della tua prima rete neurale. Nota che ogni volta che addestriamo il modello possiamo ottenere un valore di precisione diverso, ma non differiranno molto.

Grazie per aver letto! Puoi contattarmi a [e-mail protetta]

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.