Nozioni di base sulle reti neurali | Neuronale rosso en R

Contenuti

introduzione

La rete neurale è una macchina per l'elaborazione delle informazioni e può essere considerata analoga al sistema nervoso umano. Come il sistema nervoso umano, che è costituito da neuroni interconnessi, una rete neurale è costituita da unità di elaborazione delle informazioni interconnesse. Le unità di elaborazione delle informazioni non funzionano in modo lineare. Infatti, la rete neurale trae la sua forza dall'elaborazione parallela delle informazioni, permettendoti di affrontare la non linearità. La rete neurale diventa utile per inferire significati e rilevare schemi da insiemi di dati complessi.

La rete neurale è considerata una delle tecniche più utili nel mondo dell'analisi dei dati. tuttavia, è complesso ed è spesso considerato una scatola nera, vale a dire, gli utenti vedono l'input e l'output di una rete neurale ma non hanno idea del processo di generazione della conoscenza. Speriamo che l'articolo aiuti i lettori a conoscere il meccanismo interno di una rete neurale e ad acquisire esperienza pratica per implementarlo in R.

Sommario

  • Le basi della rete neurale
  • Sintonizzazione della rete neurale in R
  • Convalida incrociata di una rete neurale

Le basi della rete neurale

Una rete neurale è un modello caratterizzato da una funzione di attivazione, che viene utilizzato dalle unità di elaborazione delle informazioni interconnesse per trasformare l'input in output. Una rete neurale è sempre stata paragonata al sistema nervoso umano. Le informazioni passano attraverso unità interconnesse in modo analogo al passaggio delle informazioni attraverso i neuroni negli esseri umani.. Il primo strato della rete neurale riceve l'input grezzo, lo elabora e passa le informazioni elaborate a livelli nascosti. Il livello nascosto passa le informazioni all'ultimo livello, che produce l'output. Il vantaggio della rete neurale è che è di natura adattiva. Impara dalle informazioni fornite, vale a dire, allenati dai dati, che hanno un esito noto e ne ottimizza i pesi per una migliore previsione in situazioni con esito sconosciuto.

un perceptron, vale a dire. rete neurale a strato singolo, è la forma più elementare di una rete neurale. Un perceptron riceve informazioni multidimensionali e le elabora attraverso una somma pesata e una funzione di attivazione. È addestrato da un algoritmo di apprendimento e dai dati taggati che ottimizzano i pesi nel processore di sommatoria. Una delle principali limitazioni del modello perceptron è la sua incapacità di affrontare la non linearità. Una rete neurale multistrato supera questa limitazione e aiuta a risolvere problemi non lineari.. Il livello di input si connette al livello nascosto, che a sua volta si connette al livello di output. Le connessioni sono ponderate e i pesi sono ottimizzati utilizzando una regola di apprendimento.

Ci sono molte regole di apprendimento che vengono utilizzate con la rete neurale:

un) quadratico minimo;
B) discesa del gradiente;
C) regola di Newton;
D) gradiente coniugato, eccetera.

Le regole di apprendimento possono essere utilizzate insieme al metodo dell'errore di propagazione inversa. La regola di apprendimento viene utilizzata per calcolare l'errore nell'unità di output. Questo errore si propaga all'indietro a tutte le unità in modo che l'errore in ciascuna unità sia proporzionale al contributo di tale unità all'errore totale nell'unità di uscita.. Gli errori in ciascuna unità vengono utilizzati per ottimizzare il peso ad ogni connessione. La figura 1 mostra la struttura di un semplice modello di rete neurale per una migliore comprensione.

nn1-2284027

Figura 1 Un semplice modello di rete neurale

Sintonizzazione della rete neurale in R

Ora adatteremo un modello di rete neurale in R. In questo articolo, usiamo un sottoinsieme del set di dati sui cereali condiviso dalla Carnegie Mellon University (CMU). I dettagli del set di dati possono essere trovati al seguente link: http://lib.stat.cmu.edu/DASL/Datafiles/Cereals.html. L'obiettivo è prevedere la classificazione delle variabili dei cereali come calorie, proteina, grassi, eccetera. Lo script R viene fornito fianco a fianco e commentato per una migliore comprensione dell'utente. . I dati sono in formato .csv e possono essere scaricati facendo clic su: cereali.

Imposta la directory di lavoro in R usando set () funzione e mantieni cereal.csv nella directory di lavoro. Usiamo il voto come variabile dipendente e le calorie, proteina, grassi, sodio e fibra come variabili indipendenti. Dividiamo i dati in training e test set. Il training set viene utilizzato per trovare la relazione tra le variabili dipendenti e indipendenti, Mentre il gruppo di test valuta le prestazioni del modello. Usiamo il 60% del set di dati come set di training. L'assegnazione dei dati al set di formazione e test viene effettuata mediante campionamento casuale. Abbiamo eseguito un campionamento casuale in R utilizzando Spettacoli ( ) funzione. Abbiamo usato set.seme () per generare ogni volta lo stesso campione casuale e mantenere la coerenza. Useremo il indice durante la regolazione della rete neurale per creare set di dati di test e training. Lo script R è il seguente:

## Creazione della variabile di indice 

# Read the Data
data = read.csv("cereali.csv", intestazione=T)

# Random sampling
samplesize = 0.60 * ora(dati)
set.seme(80)
indice = campione( seq_len ( ora ( dati ) ), dimensione = dimensione del campione )

# Create training and test set
datatrain = data[ indice, ]
datatest = dati[ -indice, ]

Ora adattiamo una rete neurale ai nostri dati. Noi usiamo neuralnet libreria per l'analisi. Il primo passo è ridimensionare il set di dati sui cereali. La scala dei dati è essenziale perché, altrimenti, una variabile può avere un grande impatto sulla variabile predittiva proprio a causa della sua scala. L'uso senza scala può portare a risultati insignificanti. Le tecniche comuni per ridimensionare i dati sono: normalizzazione minimo-massimo, Normalizzazione del punteggio Z, mediana e MAD e stimatori di tan-h. La normalizzazione minimo-massimo trasforma i dati in un intervallo comune, eliminando così l'effetto scala di tutte le variabili. A differenza della normalizzazione del punteggio Z e del metodo della mediana e MAD, il metodo minimo-massimo conserva la distribuzione originale delle variabili. Utilizziamo la normalizzazione minima-massima per scalare i dati. Lo script R per ridimensionare i dati è il seguente.

## Ridimensiona i dati per la rete neurale

max = applica(dati , 2 , max)
min = applica(dati, 2 , min)
scaled = as.data.frame(scala(dati, centro = min, scala = max - min))

I dati scalati vengono utilizzati per adattarsi alla rete neurale. Visualizziamo la rete neurale con pesi per ciascuna delle variabili. Lo script R è il seguente.

## Adatta la rete neurale 

# install library
install.packages("neuralnet ")

# load library
library(neuralnet)

# creating training and test set
trainNN = scaled[indice , ]
testNN = ridimensionato[-indice , ]

# fit neural network
set.seed(2)
NN = neuralnet(valutazione ~ calorie + proteina + GRASSO + sodio + fibra, trenoNN, nascosto = 3 , linear.output = T )

# plot neural network
plot(NN)

La figura 3 visualizza la rete neurale calcolata. Il nostro modello ha 3 neuroni nel loro strato nascosto. Le linee nere mostrano connessioni con pesi. I pesi sono calcolati utilizzando l'algoritmo di backpropagation spiegato sopra. La linea blu mostra il termine di bias.

fig2-8303713

Figura 2 neuronale rosso

Prevediamo la valutazione utilizzando il modello di rete neurale. Il lettore deve ricordare che la valutazione prevista verrà ridimensionata e dovrà trasformarla per poter effettuare un confronto con la valutazione effettiva. Confrontiamo anche la valutazione prevista con la valutazione effettiva visualizzando. L'RMSE per il modello di rete neurale è 6.05. Il lettore può saperne di più su RMSE in un altro articolo, cui si accede cliccando qui. Lo script R è il seguente:

## Previsione tramite rete neurale

forecast_testNN = calcola(NN, provaNN[,C(1:5)])
predit_testNN = (forecast_testNN$net.result * (max(valutazione dei dati) - min(valutazione dei dati))) + min(valutazione dei dati)

complotto(datatest $ rating, forecast_testNN, col="blu", pch=16, ylab = "valutazione prevista NN", xlab = "valutazione reale")

abline(0,1)

# Calcola Root Mean Square Error (RMSE)
RMSE.NN = (somma((datatest $ rating - forecast_testNN)^2) / ora(datatest)) ^ 0.5

fig3-7425474

Figura 3: Valutazione prevista vs. effettiva utilizzando una rete neurale

Convalida incrociata di una rete neurale

Abbiamo valutato il nostro metodo di rete neurale utilizzando RMSE, cos'è un metodo di valutazione residuo. Il problema principale con i metodi di valutazione residua è che non ci informano sul comportamento del nostro modello quando vengono introdotti nuovi dati.. Cerchiamo di risolvere il problema di “nuovi dati” dividendo i nostri dati in training e test set, costruire il modello nel training set e valutare il modello calcolando RMSE per il test set. La suddivisione del test di addestramento non era altro che la forma più semplice di metodo di convalida incrociata noto come metodo di conservazione. Una limitazione del metodo di conservazione è la varianza della metrica di valutazione delle prestazioni, nel nostro caso RMSE, può essere elevato in base agli elementi assegnati al set di formazione e test.

La seconda tecnica di convalida incrociata comunemente è convalida incrociata di k-fold. Questo metodo può essere visto come ricorrente metodo di conservazione. I dati completi sono divisi in k sottoinsiemi uguali e ogni volta che un sottoinsieme viene assegnato come set di prova, altri servono per addestrare il modello. Ogni punto dati ha la possibilità di trovarsi nel set di test e nel set di allenamento, quindi questo metodo riduce la dipendenza delle prestazioni dalla divisione test-addestramento e riduce la varianza delle metriche delle prestazioni. Il caso estremo di convalida incrociata di k-fold si verificherà quando k è uguale al numero di punti dati. Significherebbe che il modello predittivo viene addestrato su tutti i punti dati tranne un punto dati, che assume il ruolo di test set. Questo metodo per lasciare un punto dati come set di prova è noto come lasciare una convalida incrociata.

Ora ci esibiremo convalida incrociata di k-fold nel modello di rete neurale che abbiamo costruito nella sezione precedente. Il numero di elementi nel training set, J, varia da 10 un 65 e per ogni J, Estratto 100 esempi di set di dati. Il resto degli elementi in ogni caso viene assegnato al set di test. Il modello viene addestrato in ciascuna delle opzioni 5600 Training dei set di dati e quindi testato rispetto ai set di test corrispondenti. Calcoliamo l'RMSE di ciascuno dei set di test. I valori RMSE per ciascuno dei set vengono archiviati in una matrice.[100 X 56]. Questo metodo garantisce che i nostri risultati siano privi di qualsiasi bias del campione e verifica la robustezza del nostro modello.. Usiamo il loop nidificato. Lo script R è il seguente:

## Convalida incrociata del modello di rete neurale

# install relevant libraries
install.packages("Stivale")
install.packages("compensatore")

# Load libraries
library(Stivale)
biblioteca(compensatore)

# Initialize variables
set.seed(50)
k = 100
RMSE.NN = NULL

List = list( )

# Fit neural network model within nested for loop
for(j in 10:65){
    per (io in 1:K) {
        indice = campione(1:ora(dati),J )

        trainNN = scalato[indice,]
        testNN = ridimensionato[-indice,]
        datatest = dati[-indice,]

        NN = neuralnet(valutazione ~ calorie + proteina + GRASSO + sodio + fibra, trenoNN, nascosto = 3, lineare.output= T)
        forecast_testNN = calcola(NN,provaNN[,C(1:5)])
        predit_testNN = (forecast_testNN$net.result*(max(valutazione dei dati)-min(valutazione dei dati)))+min(valutazione dei dati)

        RMSE.NN [io]<- (somma((datatest $ rating - forecast_testNN)^2)/ora(datatest))^ 0,5
    }
    Elenco[[J]] = RMSE.NN
}

Matrix.RMSE = do.call(cbind, Elenco)

I valori RMSE sono accessibili tramite la variabile Matrix.RMSE. La dimensione della matrice è grande; così, cercheremo di dare un senso ai dati attraverso le visualizzazioni. Primo, prepareremo un box plot per una delle colonne in Matrix.RMSE, dove il training set ha una lunghezza pari a 65. Questi box plot possono essere preparati per ciascuna delle lunghezze nel training set. (10 un 65). Lo script R è il seguente.

## Preparare il boxplot
trama a scatole(Matrix.RMSE[,56], ylab = "RMSE", principale = "RMSE BoxPlot (lunghezza del set di allenamento = 65)")

fig4-5044855

Figura 4 Trama scatola

Il box plot di Fig. 4 mostra che l'RMSE mediano in 100 campioni quando la durata del training set è impostata su 65 è 5.70. Nella seguente visualizzazione, studiamo la variazione di RMSE con la durata del training set. Calcoliamo l'RMSE mediano per ciascuna delle lunghezze del training set e le tracciamo utilizzando il seguente script R.

## Variazione dell'RMSE . mediano 
install.packages("matriceStats")
biblioteca(matriceStats)

med = colMedians(Matrix.RMSE)

X = seq(10,65)

complotto (con ~X, tipo = "io", xlab = "durata del set di allenamento", ylab = "RMSE mediano", principale = "Variazione di RMSE con la durata del training set")

fig5-6205114

Figura 5 Variazione RMSE

La figura 5 mostra che l'RMSE mediano del nostro modello diminuisce con la durata dell'addestramento della serie. Questo è un risultato importante. Il lettore dovrebbe ricordare che l'accuratezza del modello dipende dalla durata del training set.. Le prestazioni del modello di rete neurale sono sensibili alla divisione dei test di addestramento.

Note finali

L'articolo analizza gli aspetti teorici di una rete neurale, la sua attuazione nella valutazione R e post-formazione. La rete neurale è ispirata al sistema nervoso biologico. Simile al sistema nervoso, le informazioni passano attraverso strati di processori. L'importanza delle variabili è rappresentata dai pesi di ogni connessione. L'articolo fornisce una comprensione di base dell'algoritmo di backpropagation, che viene utilizzato per assegnare questi pesi. In questo articolo implementiamo anche una rete neurale in R. Utilizziamo un set di dati pubblicamente disponibile condiviso da CMU. L'obiettivo è prevedere la classificazione dei cereali utilizzando informazioni come le calorie, grassi, proteina, eccetera. Dopo aver costruito la rete neurale, valutiamo la precisione e la robustezza del modello. Calcoliamo RMSE ed eseguiamo analisi di convalida incrociata. In convalida incrociata, controlliamo la variazione nella precisione del modello al variare della durata del training set. Consideriamo training set con una lunghezza di 10 un 65. Per ogni lunghezza, sono selezionati casualmente 100 campioni e viene calcolato l'RMSE mediano. Mostriamo che la precisione del modello aumenta quando il training set è grande. Prima di utilizzare il modello per la previsione, è importante verificare la robustezza delle prestazioni mediante la convalida incrociata.

L'articolo fornisce una rapida rassegna della rete neurale ed è un utile riferimento per gli appassionati di dati.. Abbiamo fornito un codice R commentato in tutto l'articolo per aiutare i lettori con un'esperienza pratica utilizzando le reti neurali..

Bio: Chaitanya Sagar è il fondatore e CEO di Analisi percettiva. Perceptive Analytics è una delle principali società di analisi in India. Lavorare in Marketing Analytics per aziende di e-commerce, al dettaglio e farmaceutico.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.