Apprendimento automatico senza Python, Anaconda e altre schifezze

No, ovviamente non lo dico sul serio. Deve esserci un limite a quanto un argomento possa essere semplificato. Ma per le prime fasi, per comprendere concetti di base e per un rapido «ambientamento» nel tema, potrebbe essere accettabile. Discuteremo come nominare correttamente questo materiale (opzioni: «Apprendimento automatico per principianti», «Analisi dei dati dalla culla», «Algoritmi per i più piccoli») alla fine.

Venendo al dunque. Ho scritto alcuni programmi applicativi in MS Excel per visualizzare e presentare in modo evidente i processi che avvengono nei diversi metodi di apprendimento automatico durante l'analisi dei dati. Seeing is believing, dicono alla fine, come direbbero i portatori della cultura che ha sviluppato la maggior parte di questi metodi (tra l'altro, non tutti. Il potente «metodo dei vettori di supporto», o SVM, support vector machine – è un'invenzione del nostro compatriota Vladimir Vapnik, Istituto di gestione di Mosca. Anno 1963, tra l'altro! Adesso, però, insegna e lavora negli Stati Uniti).

Tre file per la visione

1. Clustering con il metodo k-means

I compiti di questo tipo appartengono all'«apprendimento non supervisionato», quando dobbiamo suddividere i dati di partenza in un certo numero di categorie di cui conosciamo in anticipo il numero, ma non abbiamo alcuna «risposta corretta» a disposizione, che dobbiamo estrarre dai dati stessi. Il classico problema fondamentale di trovare sottovarietà dei fiori di iris (Ronald Fisher, 1936!) è proprio di questa natura ed è considerato il primo passo in questo campo di conoscenza.

Il metodo è piuttosto semplice. Abbiamo un insieme di oggetti, rappresentati come vettori (insiemi di N numeri). Negli iris, questi sono insiemi di 4 numeri che caratterizzano il fiore: la lunghezza e la larghezza del calice interno ed esterno, rispettivamente (Iris di Fisher — Wikipedia). Come distanza, o misura di prossimità tra gli oggetti, si utilizza la normale metrica euclidea.

Successivamente, vengono scelti in modo arbitrario (o meno, guardate più avanti) i centri dei cluster e vengono calcolate le distanze da ogni oggetto ai centri dei cluster. Ogni oggetto in questo passaggio di iterazione viene contrassegnato come appartenente al centro più vicino. Poi, il centro di ogni cluster viene spostato alla media aritmetica delle coordinate dei propri membri (in fisica viene chiamato anche «centro di massa»), e la procedura viene ripetuta.

Il processo converge abbastanza rapidamente. Nelle immagini in due dimensioni appare così:

1. Distribuzione casuale iniziale dei punti sul piano e numero di cluster

Apprendimento automatico senza Python, Anaconda e altre schifezze

2. Assegnazione dei centri dei cluster e attribuzione dei punti ai propri cluster

Apprendimento automatico senza Python, Anaconda e altre schifezze

3. Trasferimento delle coordinate dei centri dei cluster, ricalcolo dell'appartenenza dei punti, fino a quando i centri non si stabilizzano. È visibile la traiettoria di movimento del centro del cluster verso la posizione finale.

Apprendimento automatico senza Python, Anaconda e altre schifezze

In qualsiasi momento è possibile impostare nuovi centri dei cluster (senza generare una nuova distribuzione dei punti!) e vedere che il processo di suddivisione non è sempre univoco. Matematicamente, questo significa che della funzione ottimizzata (la somma dei quadrati delle distanze dai punti ai centri dei propri cluster) troviamo un minimo locale, non globale. Questo problema può essere affrontato sia con una scelta non casuale dei centri iniziali dei cluster, sia con il calcolo dei possibili centri (a volte è vantaggioso posizionarli esattamente in uno dei punti, così almeno c'è la garanzia di non ottenere cluster vuoti). In ogni caso, un insieme finito ha sempre un confine inferiore esatto.

Puoi giocare con questo file a questo link (non dimenticare di abilitare il supporto per le macro. I file sono stati controllati per virus)

Descrizione del metodo su Wikipedia — Metodo k-means

2. Approssimazione con polinomi e suddivisione dei dati. Overfitting

Il rinomato scienziato e divulgatore della scienza dei dati K.V. Voron'kov descrive brevemente i metodi di apprendimento automatico come "l'arte di adattare curve ai punti". In questo esempio, cercheremo di trovare una regolarità nei dati con il metodo dei minimi quadrati.

È mostrata la tecnica di suddivisione dei dati di origine in "dati di addestramento" e "dati di controllo", così come il fenomeno dell'overfitting o del "re-adattamento" ai dati. Con una corretta approssimazione avremo un certo errore sui dati di addestramento e un errore. Quando la prestazione è errata, si verificherà un adattamento esatto ai dati di addestramento e un enorme errore sui dati di controllo.

(È un fatto noto che attraverso N punti si può tracciare un'unica curva di grado N-1, e questo metodo, nel caso generale, non fornisce il risultato desiderato. Polinomio di interpolazione di Lagrange su Wikipedia)

1. Impostiamo la distribuzione iniziale

Apprendimento automatico senza Python, Anaconda e altre schifezze

2. Suddividiamo i punti in "dati di addestramento" e "dati di controllo" in un rapporto di 70 a 30.

Apprendimento automatico senza Python, Anaconda e altre schifezze

3. Tracciamo una curva approssimante attraverso i punti di addestramento e vediamo l'errore che genera sui dati di controllo.

Apprendimento automatico senza Python, Anaconda e altre schifezze

4. Tracciamo una curva precisa attraverso i punti di addestramento, e vediamo un errore mostruoso sui dati di controllo (e zero su quelli di addestramento, ma a che serve?).

Apprendimento automatico senza Python, Anaconda e altre schifezze

Ovviamente, viene mostrata la variante più semplice con una singola suddivisione in sottogruppi "di addestramento" e "di controllo"; in generale, questo viene fatto più volte per una migliore adattamento dei coefficienti.

Il file è disponibile qui, verificato con l'antivirus. Attiva le macro per un funzionamento corretto.

3. Discesa del gradiente e dinamica della variazione dell'errore.

Qui ci sarà un caso a 4 dimensioni e una regressione lineare. I coefficienti della regressione lineare verranno determinati passo dopo passo utilizzando il metodo della discesa del gradiente, inizialmente tutti i coefficienti sono zero. In un grafico separato è visibile la dinamica del calo dell'errore man mano che i coefficienti vengono adattati con maggiore precisione. È possibile visualizzare tutte e quattro le proiezioni in 2 dimensioni.

Se impostiamo un passo di discesa del gradiente troppo grande, vedremo che ogni volta saltiamo il minimo e che arriveremo al risultato in un numero maggiore di passi, anche se alla fine ci arriveremo (se non aumentiamo troppo il passo di discesa — allora l'algoritmo andrà "fuori controllo"). E il grafico della dipendenza dell'errore dal passo dell'iterazione non sarà fluido, ma "a scatti".

1. Generiamo dati, impostiamo il passo della discesa del gradiente.

Apprendimento automatico senza Python, Anaconda e altre schifezze

2. Con la giusta scelta del passo della discesa del gradiente arriviamo al minimo in modo fluido e abbastanza veloce.

Apprendimento automatico senza Python, Anaconda e altre schifezze

3. Con una scelta errata del passo della discesa del gradiente saltiamo il massimo, il grafico dell'errore è "a scatti", la convergenza richiede un numero maggiore di passi.

Apprendimento automatico senza Python, Anaconda e altre schifezze
e

Apprendimento automatico senza Python, Anaconda e altre schifezze

4. Con una scelta completamente sbagliata del passo della discesa del gradiente ci allontaniamo dal minimo.

Apprendimento automatico senza Python, Anaconda e altre schifezze

(Per riprodurre il processo utilizzando i valori mostrati nelle immagini per il passo della discesa del gradiente, spunta la casella "dati di riferimento").

Il file è disponibile a questo link, è necessario attivare le macro, non ci sono virus.

Cosa ne pensa la rispettata comunità, è accettabile questa semplificazione e il metodo di presentazione del materiale? Vale la pena tradurre l'articolo in inglese?

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster