  <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ai &#8211; paologironi blog</title>
	<atom:link href="https://www.gironi.it/blog/category/ai-it/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.gironi.it/blog</link>
	<description>Appunti sparsi di (retro) informatica, analisi dei dati, statistica, seo, e cose che cambiano</description>
	<lastBuildDate>Wed, 06 May 2026 13:43:55 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>L&#8217;algoritmo di Discesa del Gradiente spiegato in modo chiaro: dall&#8217;intuizione alla pratica</title>
		<link>https://www.gironi.it/blog/lalgoritmo-di-discesa-del-gradiente-gradient-descent-spiegato-semplice/</link>
					<comments>https://www.gironi.it/blog/lalgoritmo-di-discesa-del-gradiente-gradient-descent-spiegato-semplice/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Mon, 21 Aug 2023 07:44:37 +0000</pubDate>
				<category><![CDATA[statistica]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[discesa gradiente]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=3046</guid>

					<description><![CDATA[Una persona bendata su una montagna Immagina di trovarti su un terreno montagnoso, completamente bendato. Il tuo obiettivo: raggiungere il punto più basso della valle. Non puoi vedere nulla, ma puoi sentire la pendenza del terreno sotto i piedi. Cosa fai? Ti muovi nella direzione in cui il terreno scende, un passo alla volta. Se &#8230; <a href="https://www.gironi.it/blog/lalgoritmo-di-discesa-del-gradiente-gradient-descent-spiegato-semplice/" class="more-link">Leggi tutto<span class="screen-reader-text"> "L&#8217;algoritmo di Discesa del Gradiente spiegato in modo chiaro: dall&#8217;intuizione alla pratica"</span></a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Una persona bendata su una montagna</h2>



<p>Immagina di trovarti su un terreno montagnoso, completamente bendato. Il tuo obiettivo: raggiungere il punto più basso della valle. Non puoi vedere nulla, ma puoi sentire la pendenza del terreno sotto i piedi. Cosa fai? Ti muovi nella direzione in cui il terreno scende, un passo alla volta. Se scende più ripidamente a sinistra, vai a sinistra. Se scende di più a destra, vai a destra. Ad ogni passo, senti di nuovo la pendenza e cambi direzione.</p>



<p>Questa strategia, così semplice e naturale, è esattamente quella che le reti neurali usano per imparare. Ogni volta che un modello di intelligenza artificiale migliora &mdash; che impari a riconoscere un volto, tradurre una frase, o generare un testo &mdash; lo fa scendendo lungo un paesaggio matematico, un passo alla volta, seguendo la pendenza.</p>



<p>Si chiama <strong>discesa del gradiente</strong> (<em>gradient descent</em>), ed è probabilmente l&#8217;algoritmo più importante del machine learning moderno.</p>



<figure style="margin: 1.5em 0;text-align: center"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2026/03/slide-esploratore-bendato.jpg" alt="Infografica: la metafora dell'esploratore bendato che cerca il fondo della valle, con i tre passaggi Sensore, Azione, Ciclo" style="max-width: 100%;border: 1px solid #e0e0e0;border-radius: 6px" /></figure>



<span id="more-3046"></span>



<h2 class="wp-block-heading" id="storia">Da Cauchy alle reti neurali: una breve storia</h2>



<p>L&#8217;idea di seguire la pendenza per trovare un minimo ha radici sorprendentemente antiche. Nel <strong>1847</strong>, il matematico francese Augustin-Louis Cauchy pubblica un metodo per risolvere sistemi di equazioni che, nella sostanza, è già la discesa del gradiente: calcolare la direzione di massima crescita di una funzione e muoversi nella direzione opposta. Cauchy non pensava alle reti neurali &mdash; mancava più di un secolo alla loro comparsa &mdash; ma aveva formalizzato il principio che ancora oggi alimenta l&#8217;intelligenza artificiale.</p>



<p>Per oltre un secolo l&#8217;idea resta confinata alla matematica pura. La svolta arriva nel <strong>1951</strong>, quando Herbert Robbins e Sutton Monro propongono una versione <strong>stocastica</strong> del metodo: invece di calcolare il gradiente sull&#8217;intero problema, lo si stima su un campione casuale. È il seme di quello che oggi chiamiamo <em>Stochastic Gradient Descent</em> (SGD) &mdash; ne parleremo nella sezione finale. Pochi anni dopo, nel <strong>1958</strong>, Frank Rosenblatt costruisce il <strong>perceptron</strong>, il primo modello di apprendimento automatico che usa la discesa del gradiente per imparare dai dati. L&#8217;entusiasmo è enorme, ma dura poco: nel 1969 Minsky e Papert dimostrano i limiti del perceptron, e l&#8217;interesse per le reti neurali crolla. È il cosiddetto <em>inverno dell&#8217;intelligenza artificiale</em>.</p>



<p>La rinascita arriva nel <strong>1986</strong>, quando David Rumelhart, Geoffrey Hinton e Ronald Williams pubblicano l&#8217;algoritmo di <strong>backpropagation</strong>: un modo efficiente per calcolare il gradiente in reti neurali con molti strati. È la chiave che sblocca il deep learning. Da quel momento, la discesa del gradiente non è più un esercizio teorico ma lo strumento pratico con cui si addestrano le reti neurali. L&#8217;ultimo tassello di questa storia lo pongono Diederik Kingma e Jimmy Ba nel <strong>2014</strong>, con l&#8217;ottimizzatore <strong>Adam</strong> &mdash; che ritroveremo nella sezione finale di questo articolo. Quasi due secoli separano Cauchy da Adam, eppure il principio è rimasto lo stesso: senti la pendenza, fai un passo nella direzione opposta.</p>



<div style="border: 1px solid #ccc;padding: 1.2em 1.5em;margin: 1.5em 0;border-radius: 6px">
<h3 style="margin-top: 0">Di cosa parleremo</h3>
<ul>
<li><a href="#storia">Da Cauchy alle reti neurali: una breve storia</a></li>
<li><a href="#matematica">La matematica, spiegata geometricamente</a></li>
<li><a href="#learning-rate">Il learning rate e la convergenza</a></li>
<li><a href="#problemi">Cosa può andare storto: l&#8217;intuizione geometrica</a></li>
<li><a href="#scala">Da una parabola a ChatGPT</a></li>
<li><a href="#evoluzioni">Le evoluzioni: scarpe migliori per il nostro esploratore</a></li>
</ul>
</div>



<h2 class="wp-block-heading" id="matematica">La matematica, spiegata geometricamente</h2>



<h3 class="wp-block-heading">La funzione di costo: misurare quanto sbaglia il modello</h3>



<p>Prima di scendere, dobbiamo sapere <strong>cosa</strong> stiamo minimizzando. La persona bendata cerca il punto più basso della valle &mdash; ma nel machine learning, cos&#8217;è esattamente quella valle?</p>



<p>Facciamo un esempio concreto. Supponiamo di voler prevedere il prezzo di una casa conoscendo solo la sua superficie. Abbiamo cinque case di cui conosciamo superficie e prezzo reale, e il nostro modello è il più semplice possibile: una retta che passa per l&#8217;origine, <strong>prezzo = m &times; superficie</strong>, dove <em>m</em> è l&#8217;unico parametro da regolare.</p>



<p>Per ogni valore di <em>m</em>, il modello fa una previsione. Se <em>m</em> è troppo basso, le previsioni sottostimano i prezzi reali; se è troppo alto, li sovrastimano. Abbiamo bisogno di un numero che ci dica <em>quanto</em> il modello sta sbagliando: è la <strong>funzione di costo</strong> (o <em>loss function</em>, come dicono gli anglosassoni).</p>



<p>La funzione di costo più usata è l&#8217;<strong>errore quadratico medio</strong> (MSE, <em>Mean Squared Error</em>): per ogni casa, calcoliamo la differenza tra il prezzo previsto e quello reale, la eleviamo al quadrato, e facciamo la media di tutti questi errori. In formula:</p>



<p><strong>MSE(m) = (1/n) &sum;<sub>i</sub> (prezzo<sub>i</sub> &minus; m &times; superficie<sub>i</sub>)&sup2;</strong></p>



<p>Se plottiamo MSE(m) al variare di <em>m</em>, otteniamo una curva a forma di parabola: la stessa parabola che useremo tra poco come esempio della discesa del gradiente. Non è una coincidenza &mdash; <strong>la parabola è la funzione di costo</strong>, e il suo punto più basso è il valore di <em>m</em> che rende il modello migliore possibile.</p>



<p>Gli esempi che seguono sono disponibili sia in R che in Python &mdash; ognuno segua il linguaggio con cui ha più familiarità.</p>



<p>Calcoliamo in R la funzione di costo per il nostro esempio delle case:</p>



<pre><code class="language-r"># Funzione di costo: prevedere il prezzo di una casa
superficie &lt;- c(50, 70, 90, 120, 150)
prezzo &lt;- c(150, 200, 260, 340, 400)  # migliaia di euro

# Modello: prezzo = m * superficie
# Funzione di costo MSE al variare di m
m_valori &lt;- seq(1, 4, by = 0.01)
mse &lt;- sapply(m_valori, function(m) mean((prezzo - m * superficie)^2))

plot(m_valori, mse, type = "l", lwd = 2, col = "steelblue",
     xlab = "m (pendenza)", ylab = "MSE",
     main = "Funzione di costo al variare di m")
m_ottimo &lt;- m_valori[which.min(mse)]
abline(v = m_ottimo, col = "red", lty = 2)
cat("Il valore di m che minimizza l'errore:", round(m_ottimo, 2), "\n")</code></pre>



<p>Verifichiamo in Python:</p>



<pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt

# Funzione di costo: prevedere il prezzo di una casa
superficie = np.array([50, 70, 90, 120, 150])
prezzo = np.array([150, 200, 260, 340, 400])  # migliaia di euro

# Modello: prezzo = m * superficie
# Funzione di costo MSE al variare di m
m_valori = np.linspace(1, 4, 301)  # equivalente a seq(1, 4, by=0.01) in R
mse = np.array([np.mean((prezzo - m * superficie)**2) for m in m_valori])

plt.plot(m_valori, mse, lw=2, color="steelblue")
plt.xlabel("m (pendenza)")
plt.ylabel("MSE")
plt.title("Funzione di costo al variare di m")
m_ottimo = m_valori[np.argmin(mse)]
plt.axvline(m_ottimo, color="red", linestyle="--")
plt.show()
print(f"Il valore di m che minimizza l'errore: {m_ottimo:.2f}")</code></pre>



<p>Ora sappiamo cosa minimizzare: la funzione di costo. Il gradiente ci dice <em>come</em>.</p>



<h3 class="wp-block-heading">Derivata: la pendenza sotto i piedi</h3>



<p>Quando hai una funzione di una sola variabile &mdash; pensala come un sentiero che sale e scende &mdash; la <strong>derivata</strong> in un punto ti dice quanto è ripido il sentiero in quel punto. Se la derivata è positiva, stai salendo. Se è negativa, stai scendendo. Se è zero, sei su un tratto piatto: forse una cima, forse un avvallamento.</p>



<p>Esempio concreto: la funzione f(x) = x&sup2; descrive una parabola. La sua derivata è f'(x) = 2x. Se sei nel punto x = 3, la derivata vale 6: stai salendo ripidamente. Se sei in x = -1, la derivata vale -2: stai scendendo. In x = 0, la derivata è zero: sei nel punto più basso.</p>



<figure style="margin: 1.5em 0;text-align: center"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2026/03/slide-derivata-pendenza.jpg" alt="Grafico della parabola f(x)=x² con tre punti annotati: A (x=3, derivata=6, pendenza ripida), B (x=-1, derivata=-2, pendenza dolce), C (x=0, derivata=0, minimo)" style="max-width: 100%;border: 1px solid #e0e0e0;border-radius: 6px" /></figure>



<h3 class="wp-block-heading">Il gradiente: una bussola multidimensionale</h3>



<p>Nella realtà, le funzioni che ci interessano non dipendono da una sola variabile. Un modello di machine learning può avere centinaia, migliaia, o miliardi di parametri. Il paesaggio non è più un sentiero, ma una superficie in uno spazio a molte dimensioni &mdash; impossibile da visualizzare, ma perfettamente gestibile dalla matematica.</p>



<p>Il <strong>gradiente</strong> è il vettore che raccoglie tutte le derivate parziali della funzione rispetto a ciascun parametro. Se la funzione dipende da due variabili (x, y), il gradiente è:</p>



<p><strong>&nabla;f = (&#8706;f/&#8706;x, &#8706;f/&#8706;y)</strong></p>



<p>Se dipende da mille variabili, il gradiente è un vettore con mille componenti. In ogni caso, il gradiente punta nella direzione di massima salita. Per trovare il minimo, basta andare nella direzione opposta: <strong>meno il gradiente</strong>.</p>



<p>Ecco la formula fondamentale della discesa del gradiente:</p>



<p><strong>&theta;<sub>nuovo</sub> = &theta;<sub>vecchio</sub> &minus; &alpha; &middot; &nabla;f(&theta;)</strong></p>



<p>Smontiamola pezzo per pezzo:</p>



<ul class="wp-block-list">
<li><strong>&theta;</strong> rappresenta i parametri del modello &mdash; le &#8220;manopole&#8221; che l&#8217;algoritmo regola per migliorare</li>
<li><strong>&nabla;f(&theta;)</strong> è il gradiente: indica la direzione di massima salita nel punto attuale</li>
<li><strong>&alpha;</strong> (alpha) è il <em>learning rate</em>: la dimensione del passo che facciamo ad ogni iterazione</li>
<li>Il segno <strong>meno</strong> ci fa andare nella direzione opposta al gradiente, cioè in discesa</li>
</ul>



<p>È tutto qui. Calcola dove stai salendo, fai un passo nella direzione opposta, ripeti.</p>



<figure style="margin: 1.5em 0;text-align: center"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2026/03/slide-anatomia-passo.jpg" alt="Schema visuale della formula del gradient descent: theta (manopole del modello), alpha (learning rate come calibro), nabla f (gradiente come bussola), segno meno (direzione opposta)" style="max-width: 100%;border: 1px solid #e0e0e0;border-radius: 6px" /></figure>



<h3 class="wp-block-heading">Un esempio numerico in R</h3>



<p>Vediamo la discesa del gradiente in azione sulla funzione f(x) = x&sup2;. Sappiamo che il minimo è in x = 0. L&#8217;algoritmo riesce a trovarlo partendo da un punto casuale?</p>



<pre><code class="language-r"># Discesa del gradiente su f(x) = x^2
# La derivata e' f'(x) = 2x

f &lt;- function(x) x^2         # funzione obiettivo
grad_f &lt;- function(x) 2 * x  # derivata (gradiente in 1D)

x &lt;- 10              # punto di partenza
alpha &lt;- 0.1          # learning rate
n_iter &lt;- 50          # numero di iterazioni
percorso &lt;- numeric(n_iter)

for (i in 1:n_iter) {
  percorso[i] &lt;- x
  x &lt;- x - alpha * grad_f(x)  # la regola fondamentale
}

cat("Punto di partenza: 10\n")
cat("Dopo 50 iterazioni: x =", round(x, 8), "\n")
cat("Valore della funzione:", round(f(x), 10), "\n")

# Visualizzazione del percorso
curve(x^2, from = -11, to = 11, lwd = 2, col = "steelblue",
      main = "Discesa del gradiente su f(x) = x^2",
      xlab = "x", ylab = "f(x)")
points(percorso, percorso^2, col = "red", pch = 19, cex = 0.7)
lines(percorso, percorso^2, col = "red", lty = 2)</code></pre>



<p>Verifichiamo in Python:</p>



<pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt

# Discesa del gradiente su f(x) = x^2
f = lambda x: x**2           # funzione obiettivo
grad_f = lambda x: 2 * x     # derivata (gradiente in 1D)

x = 10.0            # punto di partenza
alpha = 0.1          # learning rate
n_iter = 50          # numero di iterazioni
percorso = np.zeros(n_iter)

for i in range(n_iter):
    percorso[i] = x
    x = x - alpha * grad_f(x)  # la regola fondamentale

print(f"Punto di partenza: 10")
print(f"Dopo 50 iterazioni: x = {x:.8f}")
print(f"Valore della funzione: {f(x):.10f}")

# Visualizzazione del percorso
xs = np.linspace(-11, 11, 200)
plt.plot(xs, xs**2, lw=2, color="steelblue")
plt.plot(percorso, percorso**2, "ro--", markersize=4)
plt.title("Discesa del gradiente su f(x) = x²")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.show()</code></pre>



<p>Eseguendo questo codice, si vede l&#8217;algoritmo partire da x = 10 e convergere rapidamente verso x = 0. I primi passi sono grandi (la pendenza è ripida), poi si accorciano man mano che ci avviciniamo al fondo della parabola. Dopo 50 iterazioni, x è praticamente zero.</p>



<h2 class="wp-block-heading" id="learning-rate">Il learning rate: passi grandi o passi piccoli?</h2>



<p>Torniamo alla nostra persona bendata. Quant&#8217;è grande il passo che fa ad ogni iterazione? Questa è esattamente la domanda del <strong>learning rate</strong> (&alpha;), e la risposta è meno banale di quanto sembri.</p>



<p><strong>Passi troppo piccoli</strong> (&alpha; molto basso): la persona si muove con cautela estrema, spostando un piede di pochi centimetri alla volta. Alla fine arriverà in fondo alla valle, ma potrebbe impiegare un&#8217;eternità. Nel machine learning, questo significa tempi di addestramento lunghissimi e costi computazionali elevati.</p>



<p><strong>Passi troppo grandi</strong> (&alpha; troppo alto): la persona fa balzi enormi. Invece di scendere dolcemente nella valle, la scavalca, finisce dall&#8217;altra parte, rimbalza indietro, e continua a oscillare senza mai stabilizzarsi. In casi estremi, i salti diventano sempre più grandi e la persona finisce più in alto di dove era partita. Nel machine learning, questo si chiama <em>divergenza</em>: il modello peggiora invece di migliorare.</p>



<p><strong>Passi giusti</strong>: un buon learning rate permette di scendere velocemente senza oscillare. Nella pratica, trovare il valore giusto richiede sperimentazione. È uno degli aspetti più artigianali del machine learning.</p>



<figure style="margin: 1.5em 0;text-align: center"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2026/03/slide-learning-rate.jpg" alt="Confronto visuale di tre learning rate sulla parabola: alpha=0.01 troppo lento con passi pigri, alpha=0.1 convergenza efficiente, alpha=0.9 oscillazione caotica" style="max-width: 100%;border: 1px solid #e0e0e0;border-radius: 6px" /></figure>



<h3 class="wp-block-heading">Convergenza: sapere quando fermarsi</h3>



<p>Come sa la persona bendata di essere arrivata? Sente che il terreno è piatto in tutte le direzioni: il gradiente è (quasi) zero. In pratica, l&#8217;algoritmo si ferma quando il miglioramento tra un&#8217;iterazione e l&#8217;altra diventa trascurabile, o quando ha raggiunto un numero massimo di iterazioni.</p>



<p>I criteri di arresto più comuni sono:</p>



<ul class="wp-block-list">
<li>La norma del gradiente scende sotto una soglia minima (il terreno è quasi piatto)</li>
<li>La differenza tra f(&theta;) di due iterazioni consecutive è minore di una tolleranza fissata</li>
<li>Si è raggiunto il numero massimo di iterazioni (budget computazionale esaurito)</li>
</ul>



<h3 class="wp-block-heading">L&#8217;effetto del learning rate: un confronto visuale</h3>



<p>Questo codice R mostra l&#8217;effetto di tre diversi valori di learning rate sulla stessa funzione:</p>



<pre><code class="language-r"># Confronto di tre learning rate sulla funzione f(x) = x^2
gradient_descent &lt;- function(x0, alpha, n_iter = 30) {
  x &lt;- x0
  percorso &lt;- numeric(n_iter)
  for (i in 1:n_iter) {
    percorso[i] &lt;- x
    x &lt;- x - alpha * 2 * x  # theta_new = theta_old - alpha * grad
  }
  return(percorso)
}

x0 &lt;- 8  # stesso punto di partenza per tutti

# Tre learning rate diversi
lento    &lt;- gradient_descent(x0, alpha = 0.01)   # troppo piccolo
giusto   &lt;- gradient_descent(x0, alpha = 0.1)    # buon compromesso
veloce   &lt;- gradient_descent(x0, alpha = 0.9)    # quasi instabile

# Visualizzazione
par(mfrow = c(1, 3))

# alpha = 0.01 (troppo lento)
curve(x^2, from = -10, to = 10, lwd = 2, col = "steelblue",
      main = expression(paste(alpha, " = 0.01 (troppo lento)")))
points(lento, lento^2, col = "red", pch = 19, cex = 0.6)
lines(lento, lento^2, col = "red", lty = 2)

# alpha = 0.1 (giusto)
curve(x^2, from = -10, to = 10, lwd = 2, col = "steelblue",
      main = expression(paste(alpha, " = 0.1 (buon compromesso)")))
points(giusto, giusto^2, col = "darkgreen", pch = 19, cex = 0.6)
lines(giusto, giusto^2, col = "darkgreen", lty = 2)

# alpha = 0.9 (quasi instabile)
curve(x^2, from = -10, to = 10, lwd = 2, col = "steelblue",
      main = expression(paste(alpha, " = 0.9 (quasi instabile)")))
points(veloce, veloce^2, col = "orange", pch = 19, cex = 0.6)
lines(veloce, veloce^2, col = "orange", lty = 2)

par(mfrow = c(1, 1))</code></pre>



<p>Confrontiamo in Python:</p>



<pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt

def gradient_descent(x0, alpha, n_iter=30):
    x = x0
    percorso = np.zeros(n_iter)
    for i in range(n_iter):
        percorso[i] = x
        x = x - alpha * 2 * x  # theta_new = theta_old - alpha * grad
    return percorso

x0 = 8.0  # stesso punto di partenza per tutti
lento  = gradient_descent(x0, alpha=0.01)   # troppo piccolo
giusto = gradient_descent(x0, alpha=0.1)    # buon compromesso
veloce = gradient_descent(x0, alpha=0.9)    # quasi instabile

fig, axes = plt.subplots(1, 3, figsize=(14, 4))
xs = np.linspace(-10, 10, 200)
for ax, dati, colore, titolo in zip(axes,
        [lento, giusto, veloce],
        ["red", "darkgreen", "orange"],
        ["\u03b1 = 0.01 (troppo lento)", "\u03b1 = 0.1 (buon compromesso)",
         "\u03b1 = 0.9 (quasi instabile)"]):
    ax.plot(xs, xs**2, lw=2, color="steelblue")
    ax.plot(dati, dati**2, "o--", color=colore, markersize=4)
    ax.set_title(titolo)
plt.tight_layout()
plt.show()</code></pre>



<p>Con &alpha; = 0.01 i punti rossi si muovono pigramente: dopo 30 iterazioni siamo ancora lontani dal minimo. Con &alpha; = 0.1 la convergenza è rapida e pulita. Con &alpha; = 0.9 l&#8217;algoritmo oscilla vistosamente a ogni passo, rimbalzando da un lato all&#8217;altro della parabola prima di stabilizzarsi &mdash; un learning rate appena più alto e divergerebbe del tutto.</p>



<h2 class="wp-block-heading" id="problemi">Cosa può andare storto: l&#8217;intuizione geometrica</h2>



<p>Il paesaggio matematico di un modello reale non è una bella parabola simmetrica. È un terreno selvaggio, con valli secondarie, creste, altipiani e forme che sfidano l&#8217;immaginazione. Ecco i problemi classici, spiegati con l&#8217;analogia del paesaggio.</p>



<figure style="margin: 1.5em 0;text-align: center"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2026/03/slide-insidie-topografiche.jpg" alt="Tre insidie della discesa del gradiente visualizzate in 3D: minimo locale (valle secondaria), punto di sella (gradiente zero ma non minimo), valle stretta (zigzag inefficiente)" style="max-width: 100%;border: 1px solid #e0e0e0;border-radius: 6px" /></figure>



<h3 class="wp-block-heading">Minimi locali: le valli secondarie</h3>



<p>Immagina un terreno con più avvallamenti: una valle profonda (il minimo globale) e diverse vallette meno profonde (i minimi locali). La persona bendata non ha modo di sapere se la valle in cui si trova è quella più profonda. Sente il terreno piatto sotto i piedi e si ferma, convinta di essere arrivata. Ma potrebbe trovarsi in una valletta poco profonda, mentre il vero minimo è da tutt&#8217;altra parte.</p>



<p>Nella pratica, questo è un problema meno grave di quanto si pensasse. Le reti neurali moderne hanno così tanti parametri che i minimi locali tendono ad avere valori della funzione obiettivo simili al minimo globale. È come un terreno con molte valli, ma tutte più o meno alla stessa altitudine: finire in una qualsiasi va bene.</p>



<h3 class="wp-block-heading">Punti di sella: la sella di cavallo</h3>



<p>Un problema più insidioso sono i <strong>punti di sella</strong> (<em>saddle points</em>). Immagina di essere seduto su una sella di cavallo: se ti muovi avanti o indietro, scendi; se ti muovi a destra o sinistra, sali. In quel punto il gradiente è zero &mdash; il terreno sembra piatto &mdash; ma non sei in un minimo. Sei su un punto che è minimo in alcune direzioni e massimo in altre.</p>



<p>In spazi ad alta dimensionalità, i punti di sella sono molto più comuni dei minimi locali. Fortunatamente, le varianti moderne della discesa del gradiente (con un po&#8217; di rumore o di momentum, come vedremo) riescono generalmente a sfuggire ai punti di sella.</p>



<h3 class="wp-block-heading">Valli strette: lo zigzag</h3>



<p>Immagina una valle molto stretta e allungata, come un canyon. Il gradiente punta quasi perpendicolarmente alle pareti del canyon, non lungo il canyon verso il fondo. La persona bendata finisce per rimbalzare da una parete all&#8217;altra, facendo uno zigzag inefficiente invece di camminare dritta verso il fondo.</p>



<p>Questo accade quando le variabili del problema hanno scale molto diverse: alcune cambiano rapidamente, altre lentamente. È un problema comune nella pratica, e una delle motivazioni principali per gli ottimizzatori avanzati come Adam, che vedremo nella sezione finale.</p>



<h2 class="wp-block-heading" id="scala">Da una parabola a ChatGPT</h2>



<p>Finora abbiamo visto la discesa del gradiente su una parabola: un problema con una sola variabile. È il caso più semplice possibile. Ma il bello di questo algoritmo è che funziona esattamente allo stesso modo a qualsiasi scala.</p>



<h3 class="wp-block-heading">La scala dei parametri</h3>



<p>Ecco come cresce il numero di parametri man mano che i modelli diventano più complessi:</p>



<ul class="wp-block-list">
<li><strong>Regressione lineare semplice</strong>: 2 parametri (pendenza e intercetta). Il paesaggio è una superficie 3D facile da visualizzare.</li>
<li><strong>Rete neurale per riconoscere cifre scritte a mano</strong>: ~100.000 parametri. Il paesaggio ha 100.000 dimensioni.</li>
<li><strong>ResNet-50</strong> (classificazione immagini, 2015): ~25 milioni di parametri.</li>
<li><strong>GPT-3</strong> (il predecessore di ChatGPT): 175 miliardi di parametri.</li>
<li><strong>GPT-4</strong> e modelli di frontiera (2023-2025): si stima oltre un trilione di parametri.</li>
</ul>



<p>Il principio è identico: calcola il gradiente, fai un passo nella direzione opposta, ripeti. Quello che cambia è la scala del calcolo. Il gradiente di GPT-4 è un vettore con più di mille miliardi di componenti, calcolato su miliardi di frammenti di testo, usando migliaia di processori in parallelo. Ma la formula è la stessa che abbiamo visto sulla parabola.</p>



<h3 class="wp-block-heading">Dove lo vedi in azione (senza saperlo)</h3>



<p>Ogni volta che interagisci con un sistema di intelligenza artificiale, la discesa del gradiente ha lavorato dietro le quinte:</p>



<ul class="wp-block-list">
<li><strong>Netflix e Spotify</strong> che ti consigliano cosa guardare o ascoltare: i modelli di raccomandazione sono addestrati con gradient descent su miliardi di interazioni utente</li>
<li><strong>Google Translate</strong> e i traduttori automatici: reti neurali con centinaia di milioni di parametri, ottimizzate con discesa del gradiente su enormi corpora di testi paralleli</li>
<li><strong>Assistenti vocali</strong> (Siri, Alexa): il riconoscimento vocale usa reti neurali profonde, addestrate con lo stesso algoritmo</li>
<li><strong>Guida autonoma</strong>: le reti che riconoscono pedoni, semafori e corsie stradali sono addestrate con varianti della discesa del gradiente</li>
<li><strong>ChatGPT, Claude, Gemini</strong>: i Large Language Model sono il caso più estremo &mdash; la discesa del gradiente applicata a miliardi di parametri su trilioni di token di testo</li>
</ul>



<p>Il messaggio chiave è questo: <strong>la potenza dell&#8217;AI moderna non sta nella complessità dell&#8217;algoritmo di ottimizzazione, ma nella scala</strong>. La discesa del gradiente è concettualmente semplice. Quello che ha reso possibile la rivoluzione dell&#8217;intelligenza artificiale è la capacità di applicarlo a modelli enormi su quantità enormi di dati, grazie a hardware sempre più potente.</p>



<h2 class="wp-block-heading" id="evoluzioni">Le evoluzioni: scarpe migliori per il nostro esploratore</h2>



<p>La discesa del gradiente &#8220;vanilla&#8221; &mdash; quella che abbiamo visto finora &mdash; funziona, ma ha i limiti che abbiamo descritto: può essere lenta, può oscillare, può restare bloccata. Nel corso degli anni, i ricercatori hanno sviluppato varianti che risolvono questi problemi. Senza entrare nelle formule, ecco le idee chiave.</p>



<h3 class="wp-block-heading">Stochastic Gradient Descent (SGD)</h3>



<p>Invece di calcolare il gradiente sull&#8217;intero dataset ad ogni passo (computazionalmente costosissimo), SGD lo calcola su un piccolo campione casuale (<em>mini-batch</em>). È come se la persona bendata, invece di tastare l&#8217;intero terreno intorno a sé, tastasse solo qualche punto a caso. La stima della pendenza è rumorosa, ma mediamente corretta, e la velocità di calcolo è enormemente maggiore. Il rumore, paradossalmente, è anche utile: aiuta a sfuggire ai minimi locali e ai punti di sella.</p>



<h3 class="wp-block-heading">Momentum</h3>



<p>Immagina una palla che rotola giù per la collina invece di una persona che cammina. La palla accumula velocità: se la pendenza continua nella stessa direzione, accelera. Se la pendenza cambia direzione, la palla rallenta prima di invertire. Questo è il momentum: l&#8217;algoritmo &#8220;ricorda&#8221; la direzione in cui si stava muovendo e ci aggiunge il gradiente attuale. Il risultato è che attraversa più velocemente le zone piatte e oscilla meno nelle valli strette.</p>



<h3 class="wp-block-heading">Adam: il coltellino svizzero</h3>



<p><strong>Adam</strong> (<em>Adaptive Moment Estimation</em>) combina l&#8217;idea del momentum con un learning rate che si adatta automaticamente per ogni parametro. I parametri che cambiano poco ottengono passi più grandi; quelli che cambiano molto ottengono passi più piccoli. È come se la persona bendata avesse scarpe intelligenti che regolano la lunghezza del passo in base al terreno sotto ogni piede.</p>



<p>Adam è diventato lo standard de facto per addestrare la maggior parte delle reti neurali moderne. È robusto, richiede poca regolazione manuale, e funziona bene in una vasta gamma di problemi. Quasi tutti i modelli che usi quotidianamente &mdash; da Spotify a ChatGPT &mdash; sono stati addestrati con Adam o con una sua variante.</p>



<h2 class="wp-block-heading">Ritorno alla montagna</h2>



<p>La persona bendata da cui siamo partiti ora ha scarpe migliori. Ha una palla che accumula velocità invece di gambe che fanno passi rigidi. Ha suole che si adattano automaticamente al terreno. E soprattutto, non cammina su una montagna con due o tre dimensioni: cammina su un paesaggio con miliardi di dimensioni.</p>



<p>Ma il principio è esattamente lo stesso. Senti la pendenza. Fai un passo nella direzione in cui scende. Ripeti.</p>



<p>La discesa del gradiente non è un algoritmo spettacolare. Non ha la complessità elegante di un algoritmo genetico o il fascino narrativo delle reti adversariali. È una procedura meccanica, quasi banale. Ma è la procedura meccanica su cui si regge l&#8217;intera rivoluzione dell&#8217;intelligenza artificiale. Dai suggerimenti di Netflix ai modelli che generano immagini, dalla guida autonoma alla traduzione simultanea, tutto si riduce a questo: una funzione da minimizzare, un gradiente da calcolare, un passo da fare.</p>



<p>La prossima volta che un assistente vocale capisce la tua domanda, o che un traduttore automatico indovina una sfumatura, ricorda: dietro le quinte, una versione molto sofisticata della nostra persona bendata ha camminato per miliardi di passi su un paesaggio con miliardi di dimensioni. E ha trovato una valle abbastanza profonda da essere utile.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/lalgoritmo-di-discesa-del-gradiente-gradient-descent-spiegato-semplice/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>La Discesa del Gradiente: un nuovo studio mette in discussione un assunto base sull&#8217;ottimizzazione</title>
		<link>https://www.gironi.it/blog/la-discesa-del-gradiente-un-nuovo-studio-mette-in-discussione-un-assunto-base-sullottimizzazione/</link>
					<comments>https://www.gironi.it/blog/la-discesa-del-gradiente-un-nuovo-studio-mette-in-discussione-un-assunto-base-sullottimizzazione/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Sun, 20 Aug 2023 13:45:44 +0000</pubDate>
				<category><![CDATA[ai]]></category>
		<category><![CDATA[statistica]]></category>
		<category><![CDATA[algoritmi]]></category>
		<category><![CDATA[discesa del gradiente]]></category>
		<category><![CDATA[machine learning]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=3031</guid>

					<description><![CDATA[Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un metodo comune di ottimizzazione ora noto come discesa del gradiente. Oggi la maggior parte dei programmi di machine learning si basa su questa tecnica, e anche altri campi la usano per analizzare dati e risolvere problemi ingegneristici. I ricercatori hanno &#8230; <a href="https://www.gironi.it/blog/la-discesa-del-gradiente-un-nuovo-studio-mette-in-discussione-un-assunto-base-sullottimizzazione/" class="more-link">Leggi tutto<span class="screen-reader-text"> "La Discesa del Gradiente: un nuovo studio mette in discussione un assunto base sull&#8217;ottimizzazione"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un metodo comune di ottimizzazione ora noto come <strong><em>discesa del gradiente</em></strong>. Oggi la maggior parte dei programmi di <em>machine learning</em> si basa su questa tecnica, e anche altri campi la usano per analizzare dati e risolvere problemi ingegneristici.</p>



<span id="more-3031"></span>



<p>I ricercatori hanno perfezionato la discesa del gradiente per oltre 150 anni, ma un recente studio ha dimostrato che un suo presupposto di base potrebbe essere sbagliato. Il lavoro ha mostrato che <strong>la tecnica può funzionare quasi 3 volte più velocemente se infrange una regola accettata da tempo su come trovare la soluzione ottimale</strong>.</p>



<p>La discesa del gradiente usa una &#8220;<em>funzione di costo</em><sup data-fn="72f4e4ff-094b-4fbe-bb32-129bd1819921" class="fn"><a href="#72f4e4ff-094b-4fbe-bb32-129bd1819921" id="72f4e4ff-094b-4fbe-bb32-129bd1819921-link">1</a></sup>&#8221; per capire dove si trova il punto ottimo. Gli algoritmi si muovono seguendo il gradiente più ripido della curva per raggiungere il minimo della funzione.</p>



<p>La saggezza consolidata è che l&#8217;algoritmo debba muoversi con piccoli passi per non &#8220;oltrepassare&#8221; la soluzione. Ma il nuovo studio ha scoperto che <strong>una sequenza con un grande passo al centro converge più velocemente</strong>. Questo approccio ciclico con un &#8220;salto gigante&#8221; può arrivare al punto ottimo 3 volte più rapidamente.</p>



<p>La ricerca rimette in discussione l&#8217;intuizione su come funziona al meglio la discesa del gradiente. Anche se difficilmente cambierà l&#8217;uso pratico della tecnica, costringe a riconsiderare la teoria che vi è dietro.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Fonte: <a href="https://www.quantamagazine.org/risky-giant-steps-can-solve-optimization-problems-faster-20230811/" target="_blank" rel="noreferrer noopener">Quanta Magazine</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<ol class="wp-block-footnotes"><li id="72f4e4ff-094b-4fbe-bb32-129bd1819921">Una &#8220;funzione di costo&#8221; è una misura quantitativa che valuta l&#8217;adeguatezza delle previsioni generate da un modello rispetto ai dati di addestramento. In termini più precisi, una funzione di costo assegna un valore numerico a ciascuna previsione del modello in base alla discrepanza tra la previsione e il valore reale associato. L&#8217;obiettivo della funzione di costo è minimizzare questo valore numerico, indicando una migliore aderenza del modello ai dati di addestramento. In molti algoritmi di apprendimento automatico, la scelta della funzione di costo influisce sulla capacità del modello di apprendere e generalizzare correttamente dai dati. <a href="#72f4e4ff-094b-4fbe-bb32-129bd1819921-link" aria-label="Salta al riferimento nella nota a piè di pagina 1">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/la-discesa-del-gradiente-un-nuovo-studio-mette-in-discussione-un-assunto-base-sullottimizzazione/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Regressione Logistica: prevedere il risultato di un evento</title>
		<link>https://www.gironi.it/blog/la-regressione-logistica/</link>
					<comments>https://www.gironi.it/blog/la-regressione-logistica/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 12 Jan 2023 14:47:03 +0000</pubDate>
				<category><![CDATA[ai]]></category>
		<category><![CDATA[statistica]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=2631</guid>

					<description><![CDATA[La regressione logistica è un modello statistico utilizzato per prevedere la probabilità di un evento in base a un insieme di variabili indipendenti.E&#8217; particolarmente utile quando si vuole classificare un evento come appartenente o meno ad una determinata categoria (ad esempio, un cliente che acquisterà o meno un prodotto, un paziente che svilupperà o meno &#8230; <a href="https://www.gironi.it/blog/la-regressione-logistica/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Regressione Logistica: prevedere il risultato di un evento"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>La regressione logistica è un modello statistico utilizzato per prevedere la probabilità di un evento in base a un insieme di variabili indipendenti.<br>E&#8217; particolarmente utile quando si vuole classificare un evento come appartenente o meno ad una determinata categoria (ad esempio, un cliente che acquisterà o meno un prodotto, un paziente che svilupperà o meno una malattia).</p>



<p>Si tratta di un algoritmo di <strong><em>Apprendimento Automatico Supervisionato</em></strong> che può essere utilizzato per modellare la probabilità di una determinata classe o evento. <strong>Viene utilizzato quando i dati sono linearmente separabili</strong> &#8211; cioè se esiste una linea o un piano che possono essere utilizzati per separare i dati in diverse classi in modo univoco &#8211; <strong>e l&#8217;esito è binario o dicotomico</strong>.<br>Ciò significa che la regressione logistica viene solitamente utilizzata per problemi di <strong><em>classificazione binaria </em></strong>(Sì/No, Corretto/Sbagliato, Vero/Falso, ecc.),</p>



<p>Nel corso di questo post mostrerò come eseguire una regressione logistica binomiale per creare un modello di classificazione, al fine di prevedere risposte binarie su un determinato insieme di predittori.</p>



<span id="more-2631"></span>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-8db1afac      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							Di cosa parleremo						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#come-funziona-la-regressione-logistica-e-i-passi-per-costruirla" class="uagb-toc-link__trigger">Come funziona la regressione logistica e i passi per costruirla</a><li class="uagb-toc__list"><a href="#un-esempio-in-r-calcolare-la-probabilità-di-sopravvivenza-sul-titanic" class="uagb-toc-link__trigger">Un esempio in R: calcolare la probabilità di sopravvivenza sul Titanic</a><li class="uagb-toc__list"><a href="#un-po-di-matematica-lequazione-logit" class="uagb-toc-link__trigger">Un po&#039; di matematica: l&#039;equazione logit</a><li class="uagb-toc__list"><a href="#tiriamo-le-somme" class="uagb-toc-link__trigger">Tiriamo le somme</a><li class="uagb-toc__list"><a href="#risorse-per-approfondire" class="uagb-toc-link__trigger">Risorse per approfondire</a></ol>					</div>
									</div>
				</div>
			


<h2 class="wp-block-heading">Come funziona la regressione logistica e i passi per costruirla</h2>



<p>La regressione logistica è una<strong> tecnica di modellizzazione statistica</strong> utilizzata per <strong>prevedere la probabilità di un evento binario</strong> (ad esempio, sì/no, vero/falso) <strong>in base a un insieme di variabili indipendenti</strong>.</p>



<p>A differenza della <a href="https://www.gironi.it/blog/regressione-lineare-semplice/" data-type="post" data-id="1807">regressione lineare</a>, che è utilizzata per prevedere valori continui, la regressione logistica utilizza la funzione logistica per &#8220;modellizzare&#8221; la probabilità dell&#8217;evento osservato.</p>



<p>La regressione logistica utilizza la<strong> funzione logistica</strong>, anche conosciuta come <strong><em>sigmoide</em></strong>, per produrre la probabilità di un evento. <br>La funzione logistica <strong>produce un valore compreso tra 0 e 1</strong>, che può essere interpretato come una probabilità. <br>Dopo che il modello è stato addestrato, si può utilizzare per fare previsioni su nuovi dati, fornendo una stima della probabilità di un evento.</p>



<div class="wp-block-uagb-image aligncenter uagb-block-c2155627 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-center"><figure class="wp-block-uagb-image__figure"><img decoding="async" srcset="https://www.gironi.it/blog/wp-content/uploads/2023/01/sigmoide.png " src="https://www.gironi.it/blog/wp-content/uploads/2023/01/sigmoide.png" alt="grafico sigmoide" class="uag-image-2632" width="630" height="401" title="" loading="lazy"/><figcaption class="uagb-image-caption">La funzione sigmoide è utile per mappare qualsiasi valore previsto di probabilità: il valore previsto è sempre compreso tra 0 e 1</figcaption></figure></div>



<p>I passi per costruire una regressione logistica sono i seguenti:</p>



<ol class="wp-block-list">
<li><strong>Selezionare e raccogliere i dati</strong>: raccogli i dati che desideri utilizzare per prevedere l&#8217;evento binario e seleziona le variabili indipendenti che ritieni pertinenti per la tua analisi.</li>



<li><strong>Pulire e preparare i dati</strong>: controlla i dati per eventuali valori mancanti o errati e assicurati che i dati siano adeguatamente formattati per l&#8217;analisi.</li>



<li><strong>Costruire il modello</strong>: utilizza la funzione logistica per costruire il modello sui dati di training. La funzione logistica è una funzione &#8220;S-shaped&#8221; che restituisce valori compresi tra 0 e 1, che possono essere interpretati come probabilità.</li>



<li><strong>Valutare il modello</strong>: Utilizza i dati di test per valutare l&#8217;accuratezza del modello. Ci sono varie metriche che si possono utilizzare per la valutazione, come l&#8217;accuratezza, la precisione e il recall.</li>



<li><strong>Interpretare i risultati</strong>: analizza i coefficienti del modello per capire l&#8217;importanza relativa delle variabili indipendenti e per capire meglio come i valori delle variabili influiscono sulla probabilità dell&#8217;evento.</li>



<li><strong>Utilizzare il modello per fare previsioni</strong>: utilizza il modello per fare previsioni sui nuovi dati in base alle variabili indipendenti fornite.</li>
</ol>



<p>Questi sono ovviamente i passi generali per costruire una regressione logistica. Tuttavia, in alcune situazioni potrebbe essere necessario fare ulteriori operazioni o aggiustamenti, come ad esempio utilizzare metodi di regularizzazione per evitare problemi di <em>overfitting</em>, oppure utilizzare la <em>cross-validation</em> per avere una stima più affidabile dell&#8217;accuratezza del modello.</p>



<h2 class="wp-block-heading">Un esempio in R: calcolare la probabilità di sopravvivenza sul Titanic</h2>



<p>Pe fare un esempio pratico molto semplificato, ho scaricato un dataset tra i più noti e usati, quello relativo ai passeggeri del Titanic, che contiene informazioni sui passeggeri del famoso naufragio del Titanic, tra cui età, sesso, classe sociale e se i passeggeri sopravvissero o meno all&#8217;incidente.<br><br>Io l&#8217;ho preso da <a href="https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv" target="_blank" rel="noopener">questo indirizzo</a> e l&#8217;ho salvato in locale come <em>titanic.csv</em></p>



<p>nb: il dataset Titanic è disponibile anche nella biblioteca di dati di Kaggle (<a href="https://www.kaggle.com/" target="_blank" rel="noreferrer noopener">kaggle.com</a>) e nella raccolta di dataset UCI Machine Learning (<a href="http://archive.ics.uci.edu/ml/datasets.php" target="_blank" rel="noreferrer noopener">archive.ics.uci.edu/ml/datasets.php</a>).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://www.gironi.it/blog/wp-content/uploads/2023/03/eb2df3e4-514b-423a-86be-9eb08458d104-1024x1024.jpeg" alt="eb2df3e4 514b 423a 86be 9eb08458d104" class="wp-image-2920" srcset="https://www.gironi.it/blog/wp-content/uploads/2023/03/eb2df3e4-514b-423a-86be-9eb08458d104.jpeg 1024w, https://www.gironi.it/blog/wp-content/uploads/2023/03/eb2df3e4-514b-423a-86be-9eb08458d104-300x300.jpeg 300w, https://www.gironi.it/blog/wp-content/uploads/2023/03/eb2df3e4-514b-423a-86be-9eb08458d104-150x150.jpeg 150w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>
</div>


<p>Non ho bisogno in questo caso di pulire i dati, perchè utilizzo un set di dati &#8220;sicuro&#8221; e ampiamente testato. <br>Ovviamente, in un caso d&#8217;uso &#8220;reale&#8221; i dati andranno accuratamente esaminati, studiati, e &#8220;trattati&#8221; in fase preliminare…</p>



<p>Ecco allora un codice d&#8217;esempio in R:</p>



<pre class="wp-block-preformatted"># Carico le librerie
library(ggplot2)
library(caret)

# Carico i dati nel dataset titanic
# Sostituisco il percorso con quello nel mio pc
titanic &lt;- read.csv("/ilmiopath/titanic.csv")

# Visualizzo le prime 10 righe
head(titanic, 10)

# Creo le variabili dummy per i campi categorici
titanic$Sex &lt;- as.factor(titanic$Sex)
titanic$Survived &lt;- as.factor(titanic$Survived)

# Creo un model di regressione logistica
model &lt;- glm(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, data = titanic, family = binomial(link = "logit"))

# Mostro il modello
summary(model)


# Come predire la probabilita' di sopravvivenza di un caso di esempio
example &lt;- data.frame(Pclass = 3, Sex = "male", Age = 32, SibSp = 0, Parch = 0, Fare = 8.05, Embarked = "S")
predict(model, newdata = example, type = "response")

# Visualizzo graficamente le probabilita' di sopravvivenza in base alla classe
ggplot(titanic, aes(x = Pclass, fill = factor(Survived))) + 
  geom_bar(position = "fill") +
  labs(x = "Classe", y = "Probabilita' di sopravvivenza") +
  scale_fill_discrete(name = "Sopravvissuto", labels = c("No", "Si"))</pre>



<p>In questo caso, notiamo come un uomo di 32 anni in terza classe avrebbe avuto l&#8217;8,5% circa di probabilità di sopravvivere.<br>Graficamente, abbiamo poi modo di visualizzare la probabilità di sopravvivenza in base alla classe del posto.</p>



<div class="wp-block-uagb-image uagb-block-6e99849a wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none"><figure class="wp-block-uagb-image__figure"><img decoding="async" srcset="https://www.gironi.it/blog/wp-content/uploads/2023/01/sopravvivenza-classe.png " src="https://www.gironi.it/blog/wp-content/uploads/2023/01/sopravvivenza-classe.png" alt="grafico che rappresenta la probabilità di sopravvivenza al naufragio del Titanic in base alla Classe del viaggio" class="uag-image-2642" width="" height="" title="" loading="lazy"/></figure></div>



<h2 class="wp-block-heading">Un po&#8217; di matematica: l&#8217;equazione logit</h2>



<p>Come abbiamo visto, l&#8217;equazione logit è un&#8217;equazione matematica che viene usata nella regressione logistica per descrivere la relazione tra la variabile dipendente (che può assumere solo valori binari) e una o più variabili indipendenti (chiamate anche predittori o covariate).<br><br>In generale la forma dell&#8217;equazione logit è la seguente:</p>



\(
logit(p) = \ln\left(\frac{p}{1-p}\right) = b_0 + b_1x_1 + b_2x_2 + &#8230; + b_n*x_n \\ \\
\)



<p>dove:<br><br><strong>p</strong> è la probabilità che la variabile dipendente assuma il valore &#8220;1&#8221;<br><strong>logit(p)</strong> è chiamato logaritmo del rapporto di probabilità (<em>log-odds</em>)<br><strong>b_0, b_1, b_2, …, b_n</strong> sono i <strong>coefficienti del modello</strong> (chiamati anche pesi o parametri)<br><strong>x_1, x_2, …, x_n</strong> sono le <strong>variabili indipendenti</strong> (predittori o covariate)</p>



<p class="has-light-gray-background-color has-background">In sintesi, l&#8217;equazione logit descrive come la probabilità di un evento (es. una risposta binaria) dipenda dai valori delle variabili indipendenti, attraverso i pesi del modello.</p>



<h2 class="wp-block-heading">Tiriamo le somme</h2>



<p><strong>La regressione logistica è un potente modello statistico che può aiutare a prevedere il risultato di un evento in base a un insieme di variabili indipendenti.</strong> E&#8217; facile da usare ed interpretare, e può essere utilizzato in molti ambiti, dalla medicina alla finanza.</p>



<p><strong>Rappresenta uno strumento efficace per risolvere problemi di classificazione binaria</strong> perché consente di modellare la relazione tra la variabile dipendente binaria e una o più variabili indipendenti.</p>



<p>Consente di:</p>



<ul class="wp-block-list">
<li>Modellare la relazione tra una variabile dipendente binaria e una o più variabili indipendenti.</li>



<li>Prevedere la probabilità che la variabile dipendente assuma un valore specifico (es. 1 o 0) in base ai valori delle variabili indipendenti.</li>



<li>Utilizzare queste previsioni di probabilità per classificare nuovi casi in base a una soglia predefinita (ad esempio, se la probabilità di un caso di essere classificato come 1 è superiore a 0.5, allora viene classificato come 1, altrimenti come 0)</li>



<li>Interpretare i pesi del modello (coefficienti) per comprendere quali variabili indipendenti sono più importanti per la classificazione.</li>
</ul>



<h2 class="wp-block-heading">Risorse per approfondire</h2>



<p>I titoli e le risorse a disposizione sono innumerevoli. Qualche segnalazione:</p>



<ul class="wp-block-list">
<li>&#8220;<a href="https://www.amazon.it/David-Hosmer-Stanley-Lemeshow-probability/dp/B004GMJ022" target="_blank" rel="noreferrer noopener">Applied Logistic Regression</a>&#8221; di David W. Hosmer, Jr., Stanley Lemeshow, Rodney X. Sturdivant (in lingua inglese)</li>



<li>&#8220;<a href="https://www.amazon.it/Introduction-Statistical-Learning-Applications/dp/1461471370" target="_blank" rel="noreferrer noopener">Introduction to Statistical Learning</a>&#8221; di Gareth James, Daniela Witten, Trevor </li>



<li><a href="https://www.analyticsvidhya.com/blog/2015/10/basics-logistic-regression/" target="_blank" rel="noreferrer noopener">https://www.analyticsvidhya.com/blog/2015/10/basics-logistic-regression/</a></li>



<li><a href="https://machinelearningmastery.com/logistic-regression-for-machine-learning/" target="_blank" rel="noreferrer noopener">https://machinelearningmastery.com/logistic-regression-for-machine-learning/</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/la-regressione-logistica/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Capire i concetti di base del Machine Learning: una guida per principianti</title>
		<link>https://www.gironi.it/blog/machine-learning-una-guida-per-i-principianti/</link>
					<comments>https://www.gironi.it/blog/machine-learning-una-guida-per-i-principianti/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Tue, 10 Jan 2023 14:34:20 +0000</pubDate>
				<category><![CDATA[ai]]></category>
		<category><![CDATA[statistica]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=2594</guid>

					<description><![CDATA[Introduzione Il Machine Learning sta cambiando il modo in cui vediamo il mondo intorno a noi.Dalla previsione del tempo alla diagnosi medica, dalla raccomandazione di contenuti su una piattaforma di streaming all&#8217;identificazione di frodi finanziarie, il Machine Learning è sempre più presente nella nostra vita quotidiana. Ma cos&#8217;è esattamente e come funziona? In questo post &#8230; <a href="https://www.gironi.it/blog/machine-learning-una-guida-per-i-principianti/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Capire i concetti di base del Machine Learning: una guida per principianti"</span></a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduzione</h2>



<p>Il Machine Learning sta cambiando il modo in cui vediamo il mondo intorno a noi.<br>Dalla previsione del tempo alla diagnosi medica, dalla raccomandazione di contenuti su una piattaforma di streaming all&#8217;identificazione di frodi finanziarie, il Machine Learning è sempre più presente nella nostra vita quotidiana.</p>



<p>Ma cos&#8217;è esattamente e come funziona? In questo post ti <strong>guiderò attraverso i concetti fondamentali del Machine Learning e ti mostrerò come può essere utilizzato per risolvere problemi reali</strong>. Ti mostrerò anche come iniziare ad apprendere il Machine Learning, quali sono le risorse disponibili e come utilizzare questa tecnologia per migliorare la tua vita e il tuo lavoro.</p>



<span id="more-2594"></span>



<p class="has-light-gray-background-color has-background"><strong><em>Caveat</em></strong>: Questo articolo è una semplice introduzione a un argomento vastissimo. E&#8217; stato scritto per chi vuole comprendere i concetti di base del Machine Learning, senza necessità di conoscenze tecniche o matematiche avanzate. Al termine del post fornirò una serie di risorse utili a chiunque volesse approfondire l&#8217;argomento e continuare un percorso straordinariamente affascinante…</p>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-aee46d0d      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							Di cosa parleremo						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#introduzione" class="uagb-toc-link__trigger">Introduzione</a><li class="uagb-toc__list"><a href="#cosè-il-machine-learning" class="uagb-toc-link__trigger">Cos&#039;è il Machine Learning</a><li class="uagb-toc__list"><a href="#tipi-di-machine-learning-machine-learning-supervisionato-e-non-supervisionato" class="uagb-toc-link__trigger">Tipi di Machine Learning: Machine Learning supervisionato e non supervisionato</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#i-principali-algoritmi-di-machine-learning-supervisionato" class="uagb-toc-link__trigger">I principali algoritmi di Machine Learning supervisionato</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#i-principali-algoritmi-di-machine-learning-non-supervisionato" class="uagb-toc-link__trigger">I principali algoritmi di Machine Learning non supervisionato</a></li></ul></li><li class="uagb-toc__list"><a href="#le-fasi-principali-del-processo-di-utilizzo-del-machine-learning" class="uagb-toc-link__trigger">Le fasi principali del processo di utilizzo del Machine Learning</a><li class="uagb-toc__list"><a href="#come-iniziare-ad-apprendere-il-machine-learning-tutorial-e-risorse" class="uagb-toc-link__trigger">Come iniziare ad apprendere il Machine Learning: tutorial e risorse</a><li class="uagb-toc__list"><a href="#sperimentare-con-il-codice-jupyter-lab-e-google-colab" class="uagb-toc-link__trigger">Sperimentare con il codice: Jupyter Lab e Google Colab</a></ul></ol>					</div>
									</div>
				</div>
			


<h2 class="wp-block-heading">Cos&#8217;è il Machine Learning</h2>



<p>Il Machine Learning, o apprendimento automatico, è una tecnologia che permette alle macchine di &#8220;imparare&#8221; dai dati e migliorare le proprie prestazioni senza essere esplicitamente programmate. In altre parole, il Machine Learning consente alle macchine di &#8220;imparare&#8221; dall&#8217;esperienza, proprio come fanno gli esseri umani.</p>



<pre class="wp-block-verse">Esistono due tipi principali di Machine Learning: il <strong>Machine Learning supervisionato</strong> e il <strong>Machine Learning non supervisionato</strong>.</pre>



<p>Nel Machine Learning supervisionato, il modello è &#8220;allenato&#8221; su un insieme di dati che include esempi di input e output desiderati. Il modello utilizza quindi questi esempi per fare previsioni sui nuovi dati.<br>Nel Machine Learning non supervisionato, invece, il modello deve &#8220;scoprire&#8221; da solo le strutture e le relazioni all&#8217;interno dei dati senza essere guidato da esempi pre-definiti.</p>



<p>Il Machine Learning è utilizzato in una vasta gamma di applicazioni, dalla previsione del tempo alla diagnosi medica, dalla raccomandazione di contenuti alla identificazione di frodi finanziarie. In generale, l&#8217;obiettivo del Machine Learning è quello di automatizzare decisioni e previsioni basate sui dati, migliorando l&#8217;efficienza e la precisione del processo.</p>



<h2 class="wp-block-heading">Tipi di Machine Learning: Machine Learning supervisionato e non supervisionato</h2>



<p>Come abbiamo già visto, il Machine Learning può essere suddiviso in due categorie principali: il Machine Learning supervisionato e il Machine Learning non supervisionato.</p>



<p>Il <strong>Machine Learning supervisionato è il tipo più comune di apprendimento automatico</strong> e si basa su un<strong> insieme di dati già etichettati</strong>. In altre parole, il modello di apprendimento automatico è &#8220;allenato&#8221; su un insieme di dati che include esempi di input e output desiderati. Il modello utilizza quindi questi esempi per imparare a fare inferenze su nuovi dati. Ad esempio, un classificatore di posta indesiderata potrebbe essere allenato su un insieme di e-mail etichettate come &#8220;<em>spam</em>&#8221; o &#8220;<em>non spam</em>&#8220;, e quindi utilizzato per classificare nuove e-mail in arrivo.</p>



<p><strong>Il Machine Learning non supervisionato</strong>, invece, <strong>si basa su un insieme di dati non etichettati</strong>. In altre parole, il modello di apprendimento automatico deve &#8220;imparare&#8221; da solo a scoprire strutture e relazioni all&#8217;interno dei dati. Un esempio tipico di questo tipo di apprendimento automatico è il clustering, in cui i dati vengono suddivisi in gruppi (<em>cluster</em>) in base alle loro somiglianze.</p>



<p class="has-light-gray-background-color has-background">In generale possiamo dire che il Machine Learning supervisionato utilizza dati etichettati per fare predizioni/classificazioni mentre il Machine Learning non supervisionato utilizza dati non etichettati per fare scoperte o identificare relazioni all&#8217;interno dei dati.</p>



<h3 class="wp-block-heading">I principali algoritmi di Machine Learning supervisionato</h3>



<p>I principali algoritmi di Machine Learning supervisionato sono:</p>



<ul class="elencospaziato wp-block-list">
<li><strong>Regressione lineare</strong>: utilizzata per <strong>previsioni quantitative</strong> su una variabile continua. Ad esempio, per previsioni del prezzo di un&#8217;abitazione in base alla sua metratura. <br><br>Ho scritto dei post specifici sull&#8217;argomento, che ritengo possano essere molto utili per una corretta comprensione:<br><strong><a href="https://www.gironi.it/blog/regressione-lineare-semplice/" data-type="post" data-id="1807" target="_blank" rel="noreferrer noopener">Correlazione e regressione lineare</a><br><a href="https://www.gironi.it/blog/lanalisi-di-regressione-multipla-spiegata-semplice/" data-type="post" data-id="2225" target="_blank" rel="noreferrer noopener">L&#8217;analisi di regressione multipla spiegata semplice</a></strong><br></li>



<li><strong>Regressione logistica</strong>: utilizzata per <strong>previsioni di variabili categoriche</strong>, ovvero quando l&#8217;output è una classe tra due o più possibili. Ad esempio, la previsione per un paziente: soffre di una determinata malattia o meno?<br></li>



<li><strong>Alberi di decisione</strong>: utilizzati per la classificazione e la regressione. Consistono in un grafico di decisione in cui ogni nodo rappresenta una decisione e ogni ramo rappresenta un esito.<br></li>



<li><strong>Random Forest</strong>: una variante degli alberi di decisione dove vengono utilizzati più alberi per fare la previsione e poi si utilizza la media delle previsioni degli alberi.<br></li>



<li><strong>Gradient Boosting</strong>: un algoritmo che utilizza una serie di alberi di decisione in successione per migliorare la previsione.<br></li>



<li><strong>Support Vector Machine (SVM)</strong>: utilizzato per la classificazione in cui i dati sono separabili linearmente.<br></li>



<li><strong>k-Nearest Neighbors (k-NN)</strong>: utilizzato per la classificazione basato sulla similarità dei dati rispetto ad un punto di riferimento.<br></li>



<li><strong>Naive Bayes</strong>: utilizzato per la classificazione basato su probabilità.</li>
</ul>



<h3 class="wp-block-heading">I principali algoritmi di Machine Learning non supervisionato</h3>



<ul class="elencospaziato wp-block-list">
<li><strong>Clustering</strong>: utilizzato per suddividere i dati in gruppi o cluster in base alle loro somiglianze. L&#8217;algoritmo più comune di clustering è l&#8217;algoritmo k-means.<br></li>



<li><strong>Analisi delle componenti principali (PCA)</strong>: utilizzato per ridurre la dimensionalità dei dati, ovvero per trasformare un insieme di variabili correlate in un insieme di variabili non correlate.<br></li>



<li><strong>Analisi della densità del dato (DBSCAN)</strong>: utilizzato per trovare i cluster in base alla densità dei dati.<br></li>



<li><strong>Analisi delle associazioni (Apriori, FP-Growth)</strong>: utilizzato per trovare regole di associazione tra le variabili.<br></li>



<li><strong>Algoritmi di rilevamento di anomalie (One-class SVM, Isolation Forest)</strong>: utilizzato per rilevare gli elementi che si discostano dalla norma<br></li>



<li><strong>Analisi della mappa auto-organizzativa (SOM)</strong>: utilizzato per visualizzare la struttura nascosta nei dati.<br></li>



<li><strong>Algoritmi di rilevamento di struttura (Spectral Clustering, Hierarchical Clustering)</strong>: utilizzato per trovare relazioni gerarchiche nei dati.</li>
</ul>



<p>Questi sono alcuni dei principali algoritmi di Machine Learning non supervisionato, ma ce ne sono molti altri.<br>Come per il Machine Learning supervisionato, la scelta dell&#8217;algoritmo dipende dalle caratteristiche del problema specifico e dalle caratteristiche dei dati.</p>



<p class="has-dark-gray-color has-light-gray-background-color has-text-color has-background has-medium-font-size"><strong>In pratica, scegliere il giusto algoritmo da applicare alla specifica soluzione è una decisione delicatissima che può segnare il successo o il completo fallimento di un&#8217;attività di analisi dati.</strong></p>



<h2 class="wp-block-heading">Le fasi principali del processo di utilizzo del Machine Learning</h2>



<ol class="wp-block-list">
<li><strong>Raccolta dei dati</strong>: La prima fase consiste nel raccogliere i dati necessari per il problema da risolvere. Questi dati devono essere puliti, formattati e preparati per l&#8217;elaborazione.</li>



<li><strong>Analisi dei dati</strong>: Una volta che i dati sono stati raccolti, è importante esplorarli per capire meglio il problema e identificare eventuali relazioni o caratteristiche interessanti.</li>



<li><strong>Scelta del modello</strong>: La fase successiva consiste nella scelta del modello di apprendimento automatico più appropriato per il problema da risolvere. Esistono molti algoritmi di Machine Learning disponibili, tra cui alberi di decisione, reti neurali e support vector machine (SVM).</li>



<li><strong>Addestramento del modello</strong>: Una volta selezionato il modello, questo deve essere &#8220;allenato&#8221; utilizzando i dati di addestramento. Questo processo permette al modello di &#8220;imparare&#8221; dai dati e di essere in grado di fare previsioni sui dati nuovi.</li>



<li><strong>Valutazione del modello</strong>: Una volta allenato, il modello deve essere valutato su un insieme di dati di prova per verificare la sua accuratezza.</li>



<li><strong>Deploy del modello</strong>: Se il modello ha mostrato buone prestazioni, può essere utilizzato per risolvere il problema in questione e portato in ambiente di produzione.</li>



<li><strong>Monitoraggio e manutenzione</strong>: il modello deve essere monitorato per garantire che continui a funzionare correttamente e eventualmente essere aggiornato o sostituito se le prestazioni diminuiscono.</li>
</ol>



<h2 class="wp-block-heading">Come iniziare ad apprendere il Machine Learning: tutorial e risorse</h2>



<p>L&#8217;apprendimento automatico (Machine Learning) è un campo in rapida evoluzione e ci sono molte risorse disponibili per coloro che vogliono iniziare ad apprenderlo.<br>Un elenco risulta necessariamente incompleto e soggetto a &#8220;gusti&#8221; personali, tuttavia si può partire da:</p>



<p><strong>Tutorial:</strong> Ci sono numerosissimi tutorial disponibili online che coprono i concetti di base del Machine Learning.<br>Ad esempio, il sito di scienza dei dati di scikit-learn ha una sezione di tutorial che spiega come utilizzare la libreria per creare alcuni dei modelli più comuni.<br><a href="https://scikit-learn.org/stable/tutorial/index.html" target="_blank" rel="noreferrer noopener">https://scikit-learn.org/stable/tutorial/index.html</a></p>



<p><strong>Libri: </strong>Ci sono molti libri sull&#8217;argomento, ma alcuni dei classici del settore sono:<br>&#8220;<em>Introduction to Machine Learning</em>&#8221; di Alpaydin: <a href="https://www.amazon.com/Introduction-Machine-Learning-Adaptive-Computation/dp/0262028182" target="_blank" rel="noreferrer noopener">https://www.amazon.com/Introduction-Machine-Learning-Adaptive-Computation/dp/0262028182</a><br>&#8220;<em>Python Machine Learning</em>&#8221; di Raschka e Mirjalili: <a href="https://www.packtpub.com/data/python-machine-learning-third-edition" target="_blank" rel="noreferrer noopener">https://www.packtpub.com/data/python-machine-learning-third-edition</a></p>



<p><strong>Corsi online</strong>: Ci sono molti corsi online che coprono i concetti di base del Machine Learning, come quello eccellente di Andrew Ng su Coursera:<br><a href="https://www.coursera.org/learn/machine-learning" target="_blank" rel="noopener">https://www.coursera.org/learn/machine-learning</a><br>o il corso di Machine Learning di fast.ai:<br><a href="https://www.fast.ai/" target="_blank" rel="noreferrer noopener">https://www.fast.ai/</a></p>



<p><strong>Tool</strong>: Ci sono molti strumenti e librerie che possono essere utilizzati per esplorare i dati e costruire modelli. Alcuni dei più popolari includono:</p>



<p><strong>scikit-learn</strong>: una libreria di apprendimento automatico per Python<br><a href="https://scikit-learn.org/stable/" target="_blank" rel="noopener">https://scikit-learn.org/stable/</a><br><strong>TensorFlow</strong>: una libreria di apprendimento automatico sviluppata da Google<br><a href="https://www.tensorflow.org/" target="_blank" rel="noopener">https://www.tensorflow.org/</a><br><strong>Keras</strong>: un&#8217;interfaccia di alto livello per costruire reti neurali in TensorFlow<br><a href="https://keras.io/" target="_blank" rel="noopener">https://keras.io/</a><br><strong>PyTorch</strong>: una libreria di apprendimento automatico open-source sviluppata da Facebook<br><a href="https://pytorch.org/" target="_blank" rel="noreferrer noopener">https://pytorch.org/</a></p>



<p>In generale, consiglio di iniziare con tutorial e corsi online per familiarizzare con i concetti di base e poi di continuare con l&#8217;esplorazione di libri e strumenti per sviluppare la comprensione e le abilità. <br>Per diventare un buon data scientist è importante anche lavorare su dati reali e non solo su tutorial o esercizi. Cercare progetti o competizioni di machine learning può aiutare ad acquisire esperienza concreta.</p>



<h2 class="wp-block-heading">Sperimentare con il codice: Jupyter Lab e Google Colab</h2>



<p>Jupyter Lab e Google Colab sono entrambi<strong> strumenti gratuiti e potenti per l&#8217;esplorazione dei dati</strong>, l&#8217;apprendimento e il test di codice per il Machine Learning. </p>



<p>Come utilizzare entrambi i tool per creare ambienti di sviluppo e condividere il proprio lavoro con altri?</p>



<p><strong>Jupyter Lab</strong> è la nuova interfaccia per <strong>Jupyter Notebook</strong> che fornisce un ambiente di sviluppo integrato per lavorare con i notebook. <strong>E&#8217; un ambiente di sviluppo interattivo che ti consente di scrivere, eseguire e documentare il codice Python e R all&#8217;interno di un browser web</strong>. <br>È particolarmente utile per l&#8217;analisi dei dati e per l&#8217;apprendimento del Machine Learning. </p>



<p>Per iniziare, devi installare Jupyter Lab sul tuo computer. Può essere fatto facilmente utilizzando <strong>Anaconda</strong>, una distribuzione Python che include Jupyter Lab e molte altre librerie di scienze dei dati. Una volta installato, puoi avviare Jupyter Lab dalla riga di comando e aprire un nuovo notebook in cui scrivere e eseguire il tuo codice. Jupyter Lab si può usare al link: <a href="https://jupyter.org/" target="_blank" rel="noopener">https://jupyter.org/</a></p>



<p>Esiste anche la possibilità di testare l&#8217;ambiente direttamente nel browser con JupiterLite:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="459" src="https://www.gironi.it/blog/wp-content/uploads/2023/01/jubyterLite-1024x459.png" alt="jubyterLite" class="wp-image-2602" srcset="https://www.gironi.it/blog/wp-content/uploads/2023/01/jubyterLite-1024x459.png 1024w, https://www.gironi.it/blog/wp-content/uploads/2023/01/jubyterLite-300x135.png 300w, https://www.gironi.it/blog/wp-content/uploads/2023/01/jubyterLite-1536x689.png 1536w, https://www.gironi.it/blog/wp-content/uploads/2023/01/jubyterLite-1200x538.png 1200w, https://www.gironi.it/blog/wp-content/uploads/2023/01/jubyterLite.png 1855w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">JupyterLite : prova l&#8217;ambiente Jupyter nel browser</figcaption></figure>



<p><strong>Google Colab</strong>, invece, è un ambiente di sviluppo<strong> basato sul cloud</strong>, che consente di scrivere e eseguire il codice Python e R all&#8217;interno di un browser web <strong>senza alcuna installazione</strong>. È un&#8217;opzione molto comoda, perché puoi accedere a Colab da qualsiasi dispositivo con una connessione a Internet e puoi condividere il tuo lavoro con altri semplicemente fornendo un link. Inoltre ti permette di utilizzare una GPU o un TPU per rendere il tuo calcolo più potente. Google Colab si può usare al link: <a href="https://colab.research.google.com/" target="_blank" rel="noopener">https://colab.research.google.com/</a></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="506" src="https://www.gironi.it/blog/wp-content/uploads/2023/01/google-colab-1024x506.png" alt="google colab" class="wp-image-2603" srcset="https://www.gironi.it/blog/wp-content/uploads/2023/01/google-colab-1024x506.png 1024w, https://www.gironi.it/blog/wp-content/uploads/2023/01/google-colab-300x148.png 300w, https://www.gironi.it/blog/wp-content/uploads/2023/01/google-colab-1536x759.png 1536w, https://www.gironi.it/blog/wp-content/uploads/2023/01/google-colab-1200x593.png 1200w, https://www.gironi.it/blog/wp-content/uploads/2023/01/google-colab.png 1546w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">Google Colab: testa e condividi il codice in cloud</figcaption></figure>



<p>Entrambi gli strumenti ti consentono di creare una sequenza di celle che contengono codice e testo. <strong>Il codice può essere eseguito all&#8217;interno delle celle e i risultati visualizzati direttamente nel notebook</strong>. Ciò rende Jupyter Lab e Google Colab ideali per l&#8217;esplorazione dei dati, l&#8217;apprendimento del Machine Learning, la condivisione e la documentazione del proprio lavoro.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/machine-learning-una-guida-per-i-principianti/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
