Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
1.1 Panoramica del corso (L01: Che cos'è l'apprendimento automatico)
1.1 Panoramica del corso (L01: Che cos'è l'apprendimento automatico)
Ciao a tutti!
Bentornati al nuovo semestre. Spero che abbiate passato una meravigliosa pausa estiva. In questo video, voglio prendere un momento per esaminare il materiale del corso e discutere di come lavoreremo insieme in questo corso, poiché sarà un po' diverso dalle solite sessioni di persona.
Per questo corso, il mio piano è registrare le lezioni in modo asincrono. Ciò significa che pre-registrerò le lezioni e le condividerò con te all'inizio di ogni settimana. In questo modo, puoi guardare il materiale a tuo piacimento, quando preferisci. Questo approccio ti offre la flessibilità di guardare i video più volte, se necessario. Inoltre, se disponi di una connessione Internet lenta, puoi scaricare i video sul tuo computer per evitare problemi di streaming durante la visione.
Per facilitare la navigazione tra le lezioni, suddividerò ogni lezione in più video basati su argomenti diversi. Ad esempio, nella lezione 1, avrò video separati che discutono del corso in generale, introduzione al machine learning, categorie di machine learning, notazione e applicazioni di machine learning. Questa ripartizione ti aiuterà a concentrarti su argomenti specifici e a rivedere facilmente il contenuto.
Sebbene l'apprendimento asincrono abbia i suoi vantaggi, capisco che abbia anche i suoi svantaggi, come non poter fare domande durante la lezione. Per risolvere questo problema, ospiterò orari d'ufficio dal vivo in cui potremo avere discussioni in tempo reale. A breve fornirò maggiori dettagli sugli orari di ufficio.
Ora, iniziamo con la lezione 1. In questa lezione tratteremo la panoramica del corso, il programma e gli argomenti che tratteremo durante il semestre. Esaminerò le mie diapositive e fornirò maggiori dettagli sul corso e altri argomenti relativi al machine learning.
Parlando di contenuto del corso, ho diviso il semestre in sette parti o moduli. Questa divisione ci aiuterà a strutturare il nostro percorso di apprendimento. Nella prima parte, inizieremo con un'introduzione all'apprendimento automatico, dove spiegherò i concetti di base e fornirò un semplice esempio di un algoritmo di apprendimento automatico chiamato K-nearest neighbors.
Dopo l'introduzione, passeremo alle basi computazionali, che include una breve introduzione a Python e alla sua rilevanza per l'apprendimento automatico. Sebbene una precedente esperienza con Python non sia obbligatoria, avere una conoscenza di base sarà utile poiché in questo corso utilizzeremo Python in modo estensivo. Ci concentreremo su librerie specifiche come NumPy per l'algebra lineare e scikit-learn, la principale libreria di machine learning.
Nelle parti seguenti tratteremo i metodi basati su albero, la valutazione del modello, la riduzione della dimensionalità, l'apprendimento non supervisionato e l'apprendimento bayesiano. Questi argomenti sono fondamentali per comprendere vari algoritmi di apprendimento automatico e le loro applicazioni. Se il tempo lo consente, approfondiremo l'apprendimento bayesiano, che comprende metodi basati sul teorema di Bayes.
Verso la fine del semestre, avremo presentazioni di progetti di classe. Fornirò maggiori informazioni sui progetti di classe man mano che avanziamo nel semestre.
Per informazioni dettagliate su ogni lezione e il suo contenuto, ho creato un sito web del corso su Canvas. Troverai tutte le risorse, inclusi video delle lezioni, diapositive, appunti delle lezioni e compiti su questa piattaforma. Consiglio di scaricare le diapositive prima di guardare i video in modo da poter prendere appunti e interagire con il materiale in modo più efficace.
Mentre procediamo con il corso, pubblicherò moduli settimanali su Canvas, dove potrai accedere a lezioni, diapositive e altre risorse pertinenti. Inoltre, farò annunci su Canvas per tenerti informato su eventuali aggiornamenti o informazioni importanti relative al corso. Assicurati di aver abilitato le notifiche per gli annunci e ti invito a controllare regolarmente la tua posta elettronica per rimanere aggiornato.
Quindi probabilmente dovrò ricaricare i video e controllare se si caricano correttamente. Mi scuso per l'inconveniente e apprezzo la tua pazienza mentre risolviamo questi problemi tecnici.
Oltre ai video delle lezioni, fornirò anche materiali supplementari come esempi di codice e compiti a casa su GitHub. Troverai i collegamenti a queste risorse nel modulo della settimana corrispondente su Canvas. GitHub è ampiamente utilizzato nella comunità di machine learning per condividere codice e collaborare a progetti, quindi sarà utile per te familiarizzare con questa piattaforma.
Voglio sottolineare l'importanza di controllare regolarmente gli annunci su Canvas. Mentre invierò notifiche e-mail per aggiornamenti importanti, è essenziale abilitare le notifiche per gli annunci per assicurarti di ricevere tutte le informazioni. Utilizzerò la funzione di annuncio di Canvas per comunicare eventuali modifiche, promemoria o risorse aggiuntive relative al corso.
Ora, discutiamo la struttura del corso in modo più dettagliato. Come accennato in precedenza, il semestre è suddiviso in sette parti o moduli, ciascuno dei quali copre argomenti specifici relativi all'apprendimento automatico. Questi moduli sono progettati per fornire un'esperienza di apprendimento progressiva, basandosi su concetti precedenti e introducendone di nuovi.
Nella prima parte, inizieremo con un'introduzione all'apprendimento automatico, dove spiegherò i fondamenti del campo e fornirò un semplice esempio di un algoritmo di apprendimento automatico chiamato K-Nearest Neighbors. Questo ti darà un assaggio di come funziona l'apprendimento automatico e getterà le basi per i prossimi moduli.
La seconda parte si concentra sui fondamenti computazionali, dove tratteremo la programmazione Python di base e le librerie essenziali utilizzate nell'apprendimento automatico, come NumPy per l'algebra lineare e scikit-learn per l'implementazione di algoritmi di apprendimento automatico. Sebbene una precedente esperienza con Python non sia obbligatoria, consiglio di completare gli esercizi interattivi che fornirò su Canvas per familiarizzare con Python, se necessario.
Nelle parti successive, approfondiremo argomenti specifici all'interno del machine learning. La terza parte coprirà i metodi basati sugli alberi, inclusi gli alberi decisionali, le foreste casuali e il potenziamento del gradiente. Questi metodi sono ampiamente utilizzati in varie applicazioni di apprendimento automatico e ti forniranno strumenti preziosi per la creazione di modelli predittivi.
La quarta parte sarà incentrata sulla valutazione del modello, un aspetto essenziale dell'apprendimento automatico. Discuteremo le tecniche per confrontare e valutare diversi algoritmi e modelli di apprendimento automatico, consentendoti di prendere decisioni informate durante la selezione e la distribuzione di modelli in scenari del mondo reale.
La quinta parte esplorerà la riduzione della dimensionalità e l'apprendimento senza supervisione. Non lasciarti intimidire dal termine "apprendimento senza supervisione"; lo spiegheremo in dettaglio durante le lezioni. Questa parte si concentra sui metodi che analizzano ed estraggono modelli dai dati senza etichette esplicite, aprendo nuove possibilità per l'esplorazione e l'analisi dei dati.
Se il tempo lo consente, nella sesta parte approfondiremo l'apprendimento bayesiano, che prevede metodi basati sul teorema di Bayes. Discuteremo classificatori bayesiani, classificatori bayesiani ingenui e potenzialmente reti bayesiane. L'apprendimento bayesiano fornisce un quadro probabilistico per comprendere e modellare l'incertezza nell'apprendimento automatico.
Infine, alla fine del semestre, avremo presentazioni di progetti di classe. Fornirò maggiori informazioni sui progetti di classe man mano che il semestre avanza, ma questa sarà un'opportunità per te di applicare le tue conoscenze e abilità a un problema specifico o a un set di dati di interesse. Sarà un'occasione per mostrare la tua comprensione del materiale del corso e dimostrare la tua capacità di implementare tecniche di apprendimento automatico.
Per tutto il semestre, terrò orari d'ufficio dal vivo dove potremo impegnarci in discussioni in tempo reale sul materiale del corso o su qualsiasi domanda tu possa avere. I dettagli di questi orari di ricevimento saranno forniti a tempo debito e ti incoraggio a sfruttare questa opportunità per interagire con me e i tuoi compagni di classe.
Per facilitare la comunicazione e la collaborazione, utilizzeremo anche Piazza, una piattaforma online in cui è possibile pubblicare domande, partecipare a discussioni e ricevere risposte tempestive da me o dai tuoi colleghi. Ti incoraggio a partecipare attivamente a Piazza, poiché non solo ti avvantaggerà, ma contribuirà anche all'esperienza di apprendimento collettivo della classe.
In conclusione, ho delineato la struttura del corso e le varie risorse a tua disposizione. Spero che questa panoramica vi abbia fornito una chiara comprensione di come procederemo durante il semestre. Se hai domande o dubbi, non esitare a contattarmi durante l'orario di ufficio o postare su Piazza. Sono qui per supportare il tuo percorso di apprendimento e sono entusiasta di intraprendere questa avventura di apprendimento automatico con tutti voi.
Grazie e iniziamo con la lezione 1 sulla panoramica del corso e sul programma.
1.2 Cos'è l'apprendimento automatico (L01: Cos'è l'apprendimento automatico)
1.2 Cos'è l'apprendimento automatico (L01: Cos'è l'apprendimento automatico)
Vorrei porgere un caloroso benvenuto a tutti voi all'inizio del nuovo semestre. Spero che abbiate passato una fantastica vacanza estiva.
In questo video, voglio prendere un momento per discutere alcuni aspetti importanti del corso e come lavoreremo insieme. Questo corso sarà leggermente diverso dal formato tradizionale in cui abbiamo sessioni di persona. Sfrutteremo l'apprendimento asincrono, il che significa che pre-registrerò le lezioni e le condividerò con te all'inizio di ogni settimana. Ciò ti consente di guardare il materiale a tuo piacimento, ogni volta che ti si addice meglio. Inoltre, puoi guardare i video più volte se necessario e, per chi ha connessioni Internet più lente, puoi anche scaricare i video per la visualizzazione offline.
Per facilitare la navigazione tra le lezioni, suddividerò ogni lezione in più video basati su argomenti diversi. Ad esempio, nella prima lezione tratterò vari argomenti come una panoramica del corso, il programma e le diverse categorie di machine learning. Questa conferenza sarà divisa in sei video.
Mentre uno degli svantaggi dell'apprendimento asincrono è che non puoi fare domande durante la lezione, ospiterò ore d'ufficio dal vivo dove possiamo discutere di qualsiasi domanda o dubbio tu possa avere. Fornirò maggiori dettagli sugli orari di ufficio in seguito.
Ora, tuffiamoci nel contenuto del corso. Il semestre sarà suddiviso in sette parti o moduli. Nella prima parte, inizieremo con un'introduzione all'apprendimento automatico e un semplice esempio di un algoritmo di apprendimento automatico chiamato K vicini più vicini. Successivamente, tratteremo le basi computazionali, inclusa una breve introduzione a Python, così come l'algebra lineare e la principale libreria di machine learning, scikit-learn. Se non hai precedenti esperienze con Python, non preoccuparti. È facile da imparare e fornirò esercizi interattivi facoltativi su Canvas per aiutarti a metterti al passo.
Dopo le basi computazionali, esploreremo metodi basati su alberi come alberi decisionali, foreste casuali e gradient boosting. Quindi, approfondiremo la valutazione del modello, un argomento essenziale che ci consente di confrontare diversi algoritmi e modelli di machine learning. Questa parte del corso ti fornirà le competenze per valutare e scegliere i migliori modelli per applicazioni nel mondo reale.
Successivamente, tratteremo la riduzione della dimensionalità e l'apprendimento senza supervisione. Le tecniche di riduzione della dimensionalità sono fondamentali per la gestione di set di dati complessi e l'apprendimento senza supervisione ti introdurrà a metodi in cui non disponiamo di dati etichettati per addestrare i nostri modelli.
Se il tempo lo consente, toccheremo anche l'apprendimento bayesiano, che comprende tecniche come i classificatori Naive Bayes e le reti bayesiane. Questo argomento fornisce una comprensione dei metodi di classificazione basati sul teorema di Bayes.
Alla fine del semestre, avremo presentazioni di progetti di classe. Fornirò maggiori informazioni sui progetti di classe più avanti nel semestre. Puoi trovare ulteriori dettagli e risorse sul sito web del corso, che ho caricato su Canvas. Vi incoraggio a esplorare il sito Web e leggere le informazioni fornite.
Per quanto riguarda la comunicazione e le risorse, utilizzeremo principalmente Canvas per tutte le attività relative al corso. Video delle lezioni, diapositive e materiali aggiuntivi saranno disponibili su Canvas. Utilizzerò anche gli annunci di Canvas per condividere aggiornamenti e informazioni importanti. Assicurati che le tue impostazioni di notifica siano abilitate per ricevere questi annunci via e-mail.
Per migliorare la tua esperienza di apprendimento, ti consiglio di scaricare le diapositive prima di guardare i video in modo da poter prendere appunti direttamente su di esse. Prendere appunti può essere utile per una migliore comprensione e memorizzazione del materiale.
Se riscontri difficoltà tecniche durante l'accesso ai materiali del corso, ti consiglio di utilizzare Firefox o Chrome come browser, poiché tendono a funzionare meglio con Canvas.
1.3 Categorie di Machine Learning (L01: Cos'è Machine Learning)
1.3 Categorie di Machine Learning (L01: Cos'è Machine Learning)
Approfondiamo ulteriormente le diverse categorie o tipi di machine learning. La categoria più ampia è l'apprendimento supervisionato, che si occupa di dati etichettati. Nell'apprendimento supervisionato, miriamo a prevedere un output sulla base di dati di input dati. Ad esempio, nella classificazione della posta indesiderata, le etichette sarebbero "spam" e "non spam". L'obiettivo è prevedere se un'e-mail è spam o meno per le e-mail future. Questa categoria comporta un ciclo di feedback in cui vengono utilizzate previsioni corrette o errate per migliorare l'algoritmo e aumentare l'accuratezza della classificazione.
All'interno dell'apprendimento supervisionato, una sottocategoria è la classificazione. La classificazione si concentra sull'assegnazione di etichette di classe, come spam e non spam. Ad esempio, possiamo avere etichette di classe come "meno" e "più", con l'obiettivo di differenziare tra queste due classi in base alle informazioni di input rappresentate da X1 e X2. Un algoritmo di apprendimento automatico esamina le misurazioni e fa previsioni, imparando continuamente ad assegnare etichette corrette. Addestrando l'algoritmo su un set di dati con numerosi esempi, può imparare a disegnare un confine decisionale, che è la linea che separa le classi. I nuovi punti dati che cadono su un lato del confine decisionale sono probabilmente classificati come una classe specifica.
Un altro tipo di apprendimento supervisionato è la regressione, che si occupa di assegnare un obiettivo continuo o un valore di output. L'analisi di regressione si concentra sulla previsione di un risultato continuo in base alle caratteristiche di input. Ad esempio, la regressione lineare è un modello semplice con una variabile di input, che mira a prevedere un valore di output (Y) inserendo una linea attraverso i punti dati per ridurre al minimo gli errori.
Passando all'apprendimento non supervisionato, questa categoria prevede l'analisi di dati non etichettati per scoprire schemi o strutture nascosti. Senza etichette o feedback, l'apprendimento senza supervisione mira a trovare intuizioni significative all'interno del set di dati. Il clustering è un esempio di apprendimento non supervisionato, in cui punti dati simili vengono raggruppati in base a modelli o densità. Vari algoritmi di clustering come k-means, DBSCAN o clustering gerarchico possono essere utilizzati per identificare e raggruppare punti dati simili.
La riduzione della dimensionalità è un altro esempio di apprendimento non supervisionato. Implica la riduzione del numero di caratteristiche o dimensioni nel set di dati. L'estrazione e la selezione delle caratteristiche sono tecniche comuni utilizzate nella riduzione della dimensionalità. Questi metodi aiutano a comprimere o trasformare le funzionalità per acquisire le informazioni più rilevanti riducendo al contempo la complessità.
L'ultima categoria di apprendimento automatico è l'apprendimento per rinforzo. Nell'apprendimento per rinforzo, un agente apprende una serie di azioni per raggiungere un obiettivo specifico o massimizzare i premi in un dato ambiente. Questo tipo di apprendimento prevede un sistema di ricompensa, in cui l'agente riceve un feedback in base al risultato delle sue azioni. Per tentativi ed errori, l'agente impara a prendere decisioni migliori e ottimizzare le sue prestazioni. L'apprendimento per rinforzo è comunemente applicato in robotica, giochi e scenari decisionali complessi.
È importante notare che mentre l'apprendimento per rinforzo è un argomento significativo, non sarà ampiamente trattato in questo corso. Tuttavia, sono disponibili risorse dedicate per coloro che sono interessati a esplorare ulteriormente l'apprendimento per rinforzo.
Queste diverse categorie di apprendimento automatico forniscono un ampio quadro per la comprensione e l'applicazione di varie tecniche e algoritmi per risolvere diversi tipi di problemi.
Ora, approfondiamo un aspetto diverso dell'apprendimento automatico chiamato apprendimento semi-supervisionato. Come suggerisce il nome, rientra tra l'apprendimento supervisionato e non supervisionato. Nell'apprendimento semi-supervisionato, abbiamo un mix di dati etichettati e non etichettati. I dati etichettati sono simili a quelli discussi nell'apprendimento supervisionato, dove abbiamo input e etichette di classe corrispondenti. Tuttavia, nell'apprendimento semi-supervisionato, abbiamo anche una grande quantità di dati non etichettati senza etichette di classe.
L'obiettivo dell'apprendimento semi-supervisionato è sfruttare i dati aggiuntivi non etichettati per migliorare il processo di apprendimento. Combinando i dati etichettati e quelli non etichettati, l'algoritmo può scoprire schemi e relazioni nei dati che potrebbero non essere stati evidenti solo con i dati etichettati. Ciò può portare a previsioni più accurate e a una migliore generalizzazione.
L'apprendimento semi-supervisionato può essere particolarmente utile in scenari in cui ottenere dati etichettati è costoso o richiede tempo. Invece di etichettare manualmente una grande quantità di dati, possiamo utilizzare un set più piccolo di dati etichettati insieme a un set più ampio di dati non etichettati per ottenere buoni risultati.
Un approccio all'apprendimento semi-supervisionato consiste nell'utilizzare tecniche come l'autoformazione o la co-formazione. Nell'autoapprendimento, l'algoritmo esegue inizialmente il training sui dati etichettati e quindi utilizza le sue previsioni per generare pseudo-etichette per i dati senza etichetta. Queste pseudo-etichette vengono quindi combinate con i dati etichettati originali per riaddestrare il modello. Questo processo viene ripetuto più volte, affinando le previsioni del modello e sfruttando i dati senza etichetta per migliorare le prestazioni.
Nel co-training, l'algoritmo apprende da più visualizzazioni dei dati. Più classificatori vengono addestrati su diversi sottoinsiemi di funzionalità o diverse rappresentazioni dei dati. Inizialmente, ogni classificatore viene addestrato sui dati etichettati. Quindi, scambiano le loro previsioni sui dati senza etichetta, consentendo a ciascun classificatore di apprendere dalle previsioni dell'altro. Questo processo iterativo continua, con ciascun classificatore che perfeziona le proprie previsioni in base al consenso degli altri.
L'apprendimento semi-supervisionato è un'area di ricerca in crescita e sono disponibili vari algoritmi e tecniche per affrontare la sfida di sfruttare efficacemente i dati non etichettati. È un campo entusiasmante che offre opportunità promettenti per migliorare le prestazioni di apprendimento automatico quando i dati etichettati sono limitati.
Abbiamo discusso le diverse categorie di machine learning, tra cui l'apprendimento supervisionato, l'apprendimento non supervisionato, l'apprendimento per rinforzo e l'apprendimento semi-supervisionato. Ogni categoria ha le sue caratteristiche e applicazioni. L'apprendimento supervisionato si occupa di dati etichettati e si concentra sulla creazione di previsioni o sull'assegnazione di etichette di classe. L'apprendimento non supervisionato mira a trovare strutture o modelli nascosti in dati non etichettati. L'apprendimento per rinforzo implica l'apprendimento di una serie di azioni attraverso un sistema di ricompensa. Infine, l'apprendimento semi-supervisionato combina dati etichettati e non etichettati per migliorare le prestazioni di apprendimento.
1.4 Notazione (L01: Che cos'è l'apprendimento automatico)
1.4 Notazione (L01: Che cos'è l'apprendimento automatico)
Ora che abbiamo discusso il concetto di machine learning e le principali categorie di machine learning, approfondiamo l'apprendimento supervisionato. Come accennato in precedenza, l'apprendimento supervisionato è la categoria più ampia del machine learning. In questa sezione esploreremo la notazione, la terminologia e i concetti associati all'apprendimento supervisionato.
L'apprendimento supervisionato segue un flusso di lavoro specifico. Iniziamo con un set di dati di addestramento che contiene esempi di funzioni di input e le corrispondenti informazioni o etichette di destinazione. Le caratteristiche di input possono anche essere chiamate osservazioni. Il set di dati viene quindi fornito a un algoritmo di apprendimento automatico. Esistono vari tipi di algoritmi di apprendimento automatico che esploreremo più avanti in questo corso. L'algoritmo apprende dai dati di addestramento e genera un modello predittivo.
Il modello rappresenta la conoscenza appresa dai dati di addestramento e può essere utilizzato per fare previsioni su dati nuovi e invisibili. Se i nuovi dati hanno lo stesso formato dei dati di addestramento, incluse le stesse caratteristiche, il modello addestrato può essere utilizzato per fare previsioni. Questo è il flusso di lavoro principale dell'apprendimento supervisionato.
Ora, approfondiamo gli aspetti formali della notazione dell'apprendimento supervisionato. Indichiamo il set di dati di addestramento come D, che consiste in N esempi di addestramento. Ogni esempio di addestramento include un vettore di caratteristiche (X) e un'etichetta corrispondente (Y). L'apice 'i' rappresenta l'indice del punto di addestramento, indicando la sua posizione nel set di dati. L'apice è usato qui per differenziarlo dal pedice che introdurremo in seguito.
Il set di dati di addestramento viene generato in base a una funzione sottostante, spesso sconosciuta, che assegna etichette alle funzionalità. Questa funzione in genere non è definita in modo esplicito e può essere un fenomeno naturale o un processo di etichettatura umano. Nell'apprendimento automatico, il nostro obiettivo è approssimare questa funzione (F(X)) utilizzando un modello o un'ipotesi. Il modello dovrebbe acquisire la mappatura tra le caratteristiche di input (X) e le etichette (Y) in modo simile alla funzione sconosciuta.
Tradizionalmente, l'ipotesi o il modello appreso dall'algoritmo di apprendimento automatico viene indicato come H. Il modello prende in considerazione il vettore di caratteristiche (X) e produce un'etichetta prevista (Y hat). Nei problemi di regressione, l'etichetta prevista è un valore continuo, mentre nei problemi di classificazione l'etichetta prevista appartiene a un insieme di possibili valori. Nella classificazione, l'insieme delle possibili etichette è tipicamente rappresentato utilizzando numeri interi, ma potrebbe anche essere rappresentato utilizzando altri simboli o lettere.
Durante la valutazione del modello, viene utilizzato un set di dati separato per valutare le prestazioni del modello. Le previsioni fatte dal modello vengono confrontate con le vere etichette per misurare l'accuratezza del modello. Nella regressione viene valutata la vicinanza delle previsioni alle etichette vere, mentre nella classificazione viene esaminata la concordanza tra le etichette previste e le etichette vere.
Per illustrare questi concetti, consideriamo un vero esempio di set di dati, il set di dati Iris. Questo set di dati è costituito da misurazioni di diverse caratteristiche dei fiori di iris, come le dimensioni dei sepali e dei petali. L'obiettivo è prevedere le specie del fiore sulla base di queste misurazioni. Ne esistono tre specie: setosa, versicolor e virginica.
Nel dataset Iris, ogni esempio di addestramento corrisponde a una misura del fiore, con le caratteristiche che rappresentano le dimensioni e l'etichetta che rappresenta la specie del fiore. Il set di dati contiene 150 esempi di addestramento, indicati come N=150, e quattro funzionalità, indicate come M=4.
L'apprendimento supervisionato prevede l'uso di un set di dati di addestramento per apprendere un modello che approssima una funzione sottostante sconosciuta. Il modello accetta le funzionalità di input e genera previsioni. L'accuratezza del modello viene valutata utilizzando dati separati. La notazione e la terminologia discusse in questa sezione forniscono una base per comprendere e lavorare con gli algoritmi di apprendimento supervisionato.
Applicazione 1.5 ML (L01: Che cos'è l'apprendimento automatico)
Applicazione 1.5 ML (L01: Che cos'è l'apprendimento automatico)
Dopo aver discusso la notazione e il formalismo che circondano l'apprendimento supervisionato, rivisitiamo la pipeline dell'apprendimento supervisionato ed esploriamo come affrontiamo i problemi di apprendimento automatico nella pratica. Esamineremo anche i singoli componenti che normalmente consideriamo durante il processo.
La figura semplificata che abbiamo esaminato in precedenza rappresentava il flusso di lavoro dell'apprendimento supervisionato. In questo flusso di lavoro, iniziamo con un set di dati di addestramento etichettato, in cui abbiamo etichette per le funzionalità. Quindi applichiamo un algoritmo di apprendimento automatico che impara ad adattare un modello ai dati di addestramento. Il modello risultante può essere utilizzato per fare previsioni su dati nuovi e invisibili. È importante notare che questo processo presuppone che i nuovi dati provengano dalla stessa distribuzione dei dati di addestramento.
Ora, esaminiamo un diagramma di flusso più dettagliato che illustra i vari componenti coinvolti nell'apprendimento automatico pratico. I componenti fondamentali rimangono gli stessi della figura precedente: un set di dati di addestramento, un algoritmo di apprendimento e un modello risultante. Tuttavia, ci sono ulteriori dettagli da considerare.
In pratica, prima di ottenere i dati di addestramento, in genere eseguiamo alcuni passaggi di pre-elaborazione. A meno che non acquisiamo un set di dati pre-preparato, dobbiamo determinare le caratteristiche da estrarre dai dati. Ciò è particolarmente importante nell'apprendimento automatico tradizionale. Ad esempio, nel caso di classificare i fiori di iris in base a misurazioni, potremmo avere dati di immagini o dati osservativi da scenari del mondo reale. In entrambi i casi, dobbiamo estrarre le funzionalità rilevanti da fornire all'algoritmo di apprendimento automatico. Invece di utilizzare pixel non elaborati dalle immagini, spesso è più efficace utilizzare funzionalità pre-elaborate o estratte. Per l'esempio del fiore dell'iride, queste caratteristiche possono includere la lunghezza del sepalo, la larghezza del sepalo e così via. È comune coinvolgere esperti di dominio che possiedono conoscenze sul problema, come i botanici nel caso della classificazione dei fiori. La loro esperienza può aiutare a selezionare caratteristiche utili per la classificazione.
Supponendo di aver estratto le caratteristiche dai dati grezzi, otteniamo un set di addestramento costituito da lunghezza del campione, larghezza del campione, lunghezza del petalo e larghezza del petalo. Potrebbero essere necessarie ulteriori fasi di pre-elaborazione, come il ridimensionamento delle funzionalità, la selezione delle funzionalità (scelta delle funzionalità da includere) e la riduzione della dimensionalità. Queste fasi di pre-elaborazione possono includere anche il sottocampionamento del set di dati, tra gli altri. Durante questo corso, esploreremo una selezione di questi passaggi di pre-elaborazione in modo più dettagliato.
Una volta completata la pre-elaborazione, forniamo all'algoritmo di apprendimento i dati e adattiamo il modello. Tuttavia, prima di utilizzare il modello su nuovi dati, è comune dividere il set di dati in due parti: un set di addestramento e un set di test. Il set di addestramento viene utilizzato per addestrare l'algoritmo e ottenere il modello, mentre il set di test funge da set di dati indipendente per valutare le prestazioni del modello. Questa fase di valutazione ci aiuta a valutare le prestazioni del modello prima di applicarlo a dati invisibili del mondo reale. È importante notare che durante il processo di formazione sono coinvolte anche fasi di valutazione, come la selezione del modello e la convalida incrociata, che aiutano a mettere a punto gli iperparametri. Tratteremo ampiamente questi argomenti in questo corso.
Dopo aver ottenuto il modello finale, valutiamo le sue prestazioni utilizzando il set di test. Questa valutazione prevede l'utilizzo del modello per prevedere le etichette per il set di test e il confronto di queste previsioni con le etichette reali. Negli esempi di classificazione, la valutazione spesso ruota attorno all'accuratezza o all'errore di classificazione, indicando la percentuale di istanze correttamente classificate. Ad esempio, potremmo ottenere una precisione del 95% nella classificazione corretta dei fiori. Una volta che il modello è stato valutato, può essere utilizzato su nuovi dati per fare previsioni in applicazioni del mondo reale.
Sebbene questa diapositiva possa sembrare opprimente con la quantità di informazioni presentate, ti assicuriamo che approfondiremo ciascuno di questi passaggi in modo più dettagliato durante questo corso.
In pratica, quando si sviluppa un'applicazione di apprendimento automatico, di solito sono coinvolti cinque passaggi principali. Innanzitutto, dobbiamo definire il problema che vogliamo risolvere.
Dopo aver definito il problema che vogliamo risolvere, il passo successivo è raccogliere e preparare i dati. Ciò comporta l'acquisizione di un set di dati che contiene esempi del problema che stiamo cercando di risolvere. Il set di dati dovrebbe includere sia le caratteristiche di input che le etichette corrispondenti.Una volta ottenuto il set di dati, il passaggio successivo consiste nel preelaborare e ripulire i dati. Ciò può comportare la gestione di valori mancanti, la gestione di valori anomali, la normalizzazione o il ridimensionamento delle funzionalità e l'esecuzione di eventuali trasformazioni o codifiche necessarie. La preelaborazione dei dati è essenziale per garantire la qualità e l'affidabilità del set di dati, nonché per prepararlo per l'algoritmo di apprendimento.
Dopo aver preelaborato i dati, passiamo al terzo passaggio, che consiste nella selezione di un algoritmo di apprendimento automatico appropriato. La scelta dell'algoritmo dipende dalla natura del problema, dal tipo di dati e dalle risorse disponibili. Esistono vari tipi di algoritmi tra cui scegliere, inclusi alberi decisionali, macchine vettoriali di supporto, reti neurali e molti altri. Ogni algoritmo ha i suoi punti di forza e di debolezza e selezionare quello più adatto al problema in questione è fondamentale.
Una volta selezionato l'algoritmo, il passaggio successivo consiste nell'addestrare il modello utilizzando il set di dati preparato. Durante il processo di addestramento, il modello impara a generalizzare dai dati di input e dalle etichette corrispondenti. Ciò comporta la regolazione dei parametri interni del modello per ridurre al minimo l'errore di previsione. Il processo di addestramento prevede in genere un algoritmo di ottimizzazione, come la discesa del gradiente, che aggiorna in modo iterativo i parametri del modello in base agli errori osservati.
Dopo che il modello è stato addestrato, il passaggio successivo consiste nel valutarne le prestazioni. Questa operazione viene eseguita utilizzando un set di dati di valutazione separato, spesso indicato come set di convalida o set di controllo. Le metriche di valutazione utilizzate dipendono dal tipo di problema. Per le attività di classificazione, vengono comunemente utilizzate metriche come accuratezza, precisione, richiamo e punteggio F1. Per le attività di regressione, vengono utilizzate metriche come l'errore quadratico medio (MSE) o l'errore assoluto medio (MAE). La valutazione ci aiuta a valutare quanto bene il modello si generalizza ai dati invisibili e fornisce approfondimenti sui suoi punti di forza e di debolezza.
Se le prestazioni del modello sono soddisfacenti, il passaggio finale consiste nel distribuire il modello e utilizzarlo per fare previsioni su dati nuovi e invisibili. Ciò può comportare l'integrazione del modello in un sistema o un'applicazione più grande per automatizzare il processo decisionale o aiutare a risolvere il problema in questione.
Vale la pena notare che il processo di apprendimento automatico è iterativo e spesso comporta l'andare avanti e indietro tra i passaggi. Ad esempio, se le prestazioni del modello non sono soddisfacenti, potrebbe essere necessario rivedere la fase di pre-elaborazione dei dati, provare algoritmi diversi, regolare gli iperparametri o raccogliere più dati per migliorare le prestazioni del modello.
Questa panoramica fornisce una comprensione di alto livello dei passaggi tipici coinvolti nell'apprendimento automatico pratico. Man mano che avanziamo in questo corso, approfondiremo ogni passaggio, esploreremo diversi algoritmi e tecniche e acquisiremo esperienza pratica nell'applicazione dell'apprendimento automatico ai problemi del mondo reale.
1.6 Motivazione ML (L01: Che cos'è l'apprendimento automatico)
1.6 Motivazione ML (L01: Che cos'è l'apprendimento automatico)
In precedenza, abbiamo discusso l'approccio alla risoluzione dei problemi di machine learning. Il processo prevedeva diversi passaggi, a partire dalla definizione del problema in questione. Abbiamo sottolineato l'importanza di raccogliere o trovare un set di dati adatto con cui lavorare. Una volta ottenuto il set di dati, sceglieremmo un algoritmo o una classe di algoritmi per affrontare il problema. Successivamente, dovevamo definire una metrica di ottimizzazione per addestrare il modello in modo efficace. Dopo l'addestramento, valutiamo le prestazioni del modello utilizzando una metrica di valutazione.
Andando avanti, abbiamo esplorato brevemente diversi approcci di machine learning e le motivazioni alla base dell'utilizzo di machine learning. Il professor Pedro Domingos, dell'Università di Washington, ha classificato questi approcci in cinque tribù: simbolisti, connessionisti, evoluzionisti, bayesiani e analogizzatori. Ogni tribù rappresenta una diversa rappresentazione scelta per il modello, una parte di valutazione (funzione obiettivo) e un approccio di ottimizzazione.
Ad esempio, la tribù dei connessionisti utilizza le reti neurali come rappresentazione del modello prescelto. Ottimizzano l'errore al quadrato o l'entropia incrociata come funzione obiettivo e impiegano la discesa del gradiente o la retropropagazione come approccio di ottimizzazione. Allo stesso modo, la tribù degli evoluzionisti utilizza la ricerca genetica per l'ottimizzazione, con programmi genetici come rappresentazione del modello. La tribù bayesiana utilizza modelli grafici e inferenza probabilistica per massimizzare la probabilità a posteriori.
Questi esempi forniscono una panoramica dei diversi approcci all'apprendimento automatico. È importante notare che queste categorie non sono esaustive e rappresentano solo alcuni esempi per ogni tribù.
Un'altra prospettiva sulle motivazioni dell'apprendimento automatico è presentata da Leo Breiman, un influente statistico noto per il suo lavoro sugli alberi decisionali e sulle foreste casuali. Ha introdotto l'idea di due culture: previsione e informazione. La cultura della previsione si concentra sull'utilizzo dell'apprendimento automatico per fare previsioni accurate senza necessariamente comprendere la relazione sottostante tra variabili di input e output. D'altra parte, la cultura dell'informazione mira a estrarre conoscenza e comprendere la natura della relazione tra variabili.
Breiman ha affermato che tutti i modelli sono sbagliati, ma alcuni sono utili. Ciò evidenzia il compromesso tra interpretabilità e prestazioni del modello. I modelli più semplici sono più facili da interpretare ma potrebbero non ottenere prestazioni elevate, mentre i modelli più complessi potrebbero funzionare meglio ma sono più difficili da interpretare.
Inoltre, ci sono diverse motivazioni per studiare il machine learning. Gli ingegneri spesso si concentrano sull'applicazione dell'apprendimento automatico per risolvere problemi del mondo reale, mentre matematici, informatici e statistici possono essere più interessati allo sviluppo della teoria dell'apprendimento automatico. I neuroscienziati potrebbero studiare l'apprendimento automatico per comprendere meglio il cervello umano e sviluppare algoritmi ispirati al suo funzionamento.
Inoltre, abbiamo discusso della relazione tra AI, machine learning e deep learning. L'apprendimento automatico è emerso come un sottocampo dell'intelligenza artificiale e il deep learning è un sottocampo dell'apprendimento automatico. Il deep learning si concentra specificamente sulle reti neurali multistrato e si estende oltre. Il deep learning può essere considerato un rebranding delle reti neurali. I sistemi di intelligenza artificiale sono sistemi non biologici che mostrano intelligenza attraverso regole, come auto a guida autonoma o programmi di gioco degli scacchi. L'apprendimento automatico non è un requisito per l'IA, poiché i sistemi di intelligenza artificiale possono essere sviluppati senza utilizzare tecniche di apprendimento automatico.
Per concludere, abbiamo detto che questo corso riguarderà principalmente l'apprendimento automatico, mentre l'intelligenza artificiale e l'apprendimento profondo rientrano in contesti diversi e possono essere esplorati in altri corsi.
Nel campo dell'apprendimento automatico, esistono diversi linguaggi di programmazione e librerie popolari ampiamente utilizzati per implementare e lavorare con modelli di apprendimento automatico. Questi strumenti forniscono una gamma di funzionalità e sono progettati per facilitare a ricercatori e professionisti lo sviluppo, la formazione e la valutazione di modelli di machine learning.
Uno dei linguaggi di programmazione più comunemente usati nel campo dell'apprendimento automatico è Python. Python è un linguaggio versatile e di facile apprendimento che offre un ricco ecosistema di librerie appositamente studiate per l'apprendimento automatico. Queste librerie forniscono implementazioni efficienti di vari algoritmi di apprendimento automatico, nonché strumenti per la manipolazione, la visualizzazione e la valutazione dei dati.
Alcune delle popolari librerie Python per l'apprendimento automatico includono:
NumPy: NumPy è una libreria fondamentale per il calcolo scientifico in Python. Fornisce supporto per array e matrici di grandi dimensioni e multidimensionali, insieme a una raccolta di funzioni matematiche per operare su questi array in modo efficiente. NumPy è la base per molte altre librerie di machine learning.
Pandas: Pandas è una potente libreria di manipolazione e analisi dei dati. Fornisce strutture dati e funzioni per gestire in modo efficiente i dati strutturati, come i dati tabulari. Pandas è particolarmente utile per la pre-elaborazione e la pulizia dei dati prima di inserirli nei modelli di machine learning.
Scikit-learn: Scikit-learn è una libreria completa di machine learning che offre un'ampia gamma di algoritmi e strumenti per la classificazione, la regressione, il clustering, la riduzione della dimensionalità e altro ancora. Fornisce un'interfaccia unificata e segue un'API coerente, semplificando la sperimentazione di diversi algoritmi e il confronto delle loro prestazioni.
TensorFlow: TensorFlow è una libreria open source sviluppata da Google per il calcolo numerico e l'apprendimento automatico. Offre un'architettura flessibile per la creazione e l'addestramento di vari tipi di modelli di machine learning, con particolare attenzione al deep learning. TensorFlow fornisce un'API di alto livello chiamata Keras, che semplifica il processo di creazione e addestramento delle reti neurali.
PyTorch: PyTorch è un'altra popolare libreria di deep learning che fornisce grafici di calcolo dinamici e una perfetta integrazione con Python. È noto per la sua flessibilità e facilità d'uso, che lo rendono una scelta preferita per ricercatori e professionisti che lavorano su progetti di deep learning. PyTorch offre anche un ricco ecosistema di modelli e strumenti preaddestrati per la distribuzione dei modelli.
Questi sono solo alcuni esempi dei numerosi strumenti disponibili per l'apprendimento automatico in Python. A seconda dei requisiti specifici del tuo progetto, puoi esplorare altre librerie e framework che soddisfano le tue esigenze. È importante rimanere aggiornati con gli ultimi sviluppi nel campo e scegliere gli strumenti che meglio si adattano ai propri obiettivi e preferenze.
Oltre a Python, anche altri linguaggi di programmazione come R e Julia dispongono di librerie ed ecosistemi di machine learning dedicati. R, in particolare, è ampiamente utilizzato per l'analisi statistica e ha una ricca raccolta di pacchetti per l'apprendimento automatico. Julia, d'altra parte, è un linguaggio progettato specificamente per il calcolo numerico e offre librerie ad alte prestazioni per l'apprendimento automatico.
Durante questo corso, ci concentreremo principalmente sull'uso di Python e delle sue librerie associate, poiché forniscono un ambiente potente e flessibile per esplorare e implementare algoritmi di apprendimento automatico. Tuttavia, i concetti e i principi trattati in questo corso possono essere applicati anche ad altri linguaggi e strumenti di programmazione.
Spero che questo ti dia una panoramica degli strumenti che utilizzeremo e del loro significato nel campo dell'apprendimento automatico. Se hai ulteriori domande o hai bisogno di chiarimenti, non esitare a chiedere.
2.1 Introduzione a NN (L02: metodi del vicino più vicino)
2.1 Introduzione a NN (L02: metodi del vicino più vicino)
Ciao a tutti, e bentornati! Spero che tu abbia passato una fantastica prima settimana. Ricapitoliamo brevemente ciò che abbiamo trattato. Nella lezione 1, abbiamo introdotto il concetto di apprendimento automatico e discusso la domanda più comune, che riguardava il progetto di classe. Fornirò presto un annuncio separato sul progetto. Una cosa che vorrei menzionare è che ho abilitato una funzione su Piazza che ti permette di trovare i membri del team per il progetto. Maggiori dettagli saranno condivisi in un annuncio separato.
Passiamo ora alla lezione 2. Oggi ci concentreremo principalmente sull'algoritmo k-nearest neighbor (KNN), che è un classico algoritmo di apprendimento automatico e ancora ampiamente utilizzato oggi. La considero l'introduzione più delicata e diretta all'apprendimento automatico, in quanto ci consente di comprendere il funzionamento degli algoritmi di apprendimento automatico. Sebbene KNN potrebbe non essere più l'algoritmo più popolare, consiglio vivamente di includerlo nei tuoi progetti. Serve come benchmark delle prestazioni per le attività di classificazione e anche per prevedere gli output continui. KNN può fornire informazioni sull'accuratezza delle previsioni e sull'efficienza computazionale.
Parlando di aspetti computazionali, oltre a spiegare come funziona KNN, toccheremo anche il concetto di notazione Big O. Questa notazione è comunemente usata in informatica per analizzare l'efficienza di diversi algoritmi. Sebbene possa sembrare tecnico, comprendere la notazione Big O è utile non solo per l'apprendimento automatico ma anche per la programmazione generale.
Verso la fine di questa lezione, mostrerò alcuni esempi in Python per mostrarti come utilizzare KNN. Tuttavia, tieni presente che questa sarà una breve panoramica e approfondiremo Python, inclusa l'installazione e le librerie principali come NumPy e scikit-learn, nella lezione 3.
Quindi, iniziamo con la Lezione 2! Ci concentreremo principalmente sui metodi del vicino più prossimo, inclusa un'introduzione a KNN. Ho strutturato la lezione in sei parti per renderla più accessibile:
Applicazioni dei metodi del vicino più vicino: esploreremo le applicazioni del mondo reale di KNN, come il data mining sull'utilizzo del web, la biometria, la classificazione delle immagini e l'analisi delle proteine. Questi esempi aiuteranno a motivare l'argomento.
Un metodo del vicino più vicino: prima di approfondire KNN, discuteremo il caso più semplice, che è il metodo del vicino più vicino. Questo metodo comporta la ricerca del punto dati più simile a un punto di query e l'utilizzo della relativa etichetta come previsione.
Limite di decisione del metodo del vicino più vicino: esamineremo come il metodo del vicino più vicino determina il confine di decisione, fornendo una migliore comprensione del suo funzionamento interno.
Introduzione ai metodi K-nearest neighbor: passeremo a KNN, dove consideriamo più vicini più vicini invece di uno solo. Tratteremo classificatori e regressori del vicino più vicino K.
Complessità di runtime di Big O degli algoritmi K-nearest neighbor: esploreremo l'efficienza computazionale di KNN utilizzando la notazione Big O. Questo argomento è cruciale per l'analisi delle prestazioni degli algoritmi.
Miglioramento degli algoritmi K-nearest neighbor: in questa parte, presenterò idee e trucchi per migliorare le prestazioni di KNN. Questa sezione si concentra sull'ottimizzazione dell'algoritmo.
Dopo aver coperto queste parti concettuali, passeremo all'applicazione di KNN in Python. Sebbene questa possa essere la parte più divertente per alcuni, è essenziale afferrare i concetti prima di immergersi nell'implementazione pratica.
Nella prossima lezione, Lezione 3, approfondiremo l'installazione di Python e tratteremo le librerie principali, tra cui NumPy e scikit-learn. Quindi, assicurati di rimanere sintonizzato! Iniziamo la lezione 2, in cui esploriamo i metodi del vicino più vicino e l'algoritmo del vicino più vicino K e continuiamo questo processo per tutti i punti dati nel set di addestramento. Alla fine del ciclo, avremo identificato il punto dati più vicino al punto di interrogazione.
Dopo aver trovato il punto più vicino, usiamo la sua etichetta come etichetta prevista per il punto di interrogazione. Nei problemi di classificazione, l'etichetta è spesso un valore categorico che rappresenta una classe o una categoria. Nei problemi di regressione, l'etichetta è un valore continuo.
Per riassumere il passaggio di previsione dell'algoritmo del vicino più vicino:
Ora che abbiamo discusso il metodo del vicino più vicino, passiamo al caso più generale di k vicini più vicini. L'algoritmo k del vicino più vicino estende il concetto di ricerca del punto dati più vicino alla ricerca dei k punti dati più vicini. Invece di considerare solo il vicino più vicino, consideriamo i k punti dati nel set di addestramento che sono più vicini al punto di interrogazione.
Nel caso della classificazione, l'etichetta prevista è determinata dal voto a maggioranza tra i k vicini più vicini. Il voto di ogni vicino viene ponderato equamente e la classe con il maggior numero di voti diventa l'etichetta prevista.
Per i problemi di regressione, l'etichetta prevista è spesso la media o la mediana delle etichette dei k vicini più vicini. Il metodo specifico di combinazione delle etichette dipende dalla natura del problema e dal risultato desiderato.
Per illustrare il limite decisionale del metodo del vicino più vicino, consideriamo uno spazio delle caratteristiche bidimensionale. Abbiamo due classi, la classe 0 e la classe 1, rappresentate da simboli diversi (es. triangoli e quadrati). Il limite di decisione è la linea o la curva che separa le regioni di classi diverse.
Nel caso del metodo del vicino più vicino, il confine decisionale segue il contorno dei punti dati di addestramento. Ogni punto nello spazio delle caratteristiche viene classificato in base all'etichetta del punto dati di addestramento più vicino. Il confine decisionale non è una curva liscia ma piuttosto un insieme di piccole regioni attorno a ciascun punto di addestramento.
Quando si utilizza il metodo del vicino più vicino k con k maggiore di 1, il limite decisionale diventa più uniforme. Man mano che consideriamo più punti vicini, l'influenza dei singoli punti dati di addestramento diminuisce, risultando in un confine più generalizzato. Il limite decisionale è determinato dal voto di maggioranza dei k vicini più vicini, portando a una separazione più uniforme e continua tra le classi.
Comprendere il concetto di confine decisionale è fondamentale per valutare le prestazioni e i limiti dell'algoritmo del vicino più vicino k. La forma e la complessità del limite decisionale possono influire sulla capacità dell'algoritmo di classificare o prevedere accuratamente nuovi punti dati.
Oltre a discutere l'algoritmo del vicino più vicino k, toccheremo anche l'argomento dell'efficienza dell'algoritmo. La notazione Big O è un modo comune per analizzare e confrontare l'efficienza di diversi algoritmi. Fornisce una misura della complessità temporale dell'algoritmo, indicando come il tempo di esecuzione cresce all'aumentare della dimensione dell'input.
L'analisi della complessità di runtime dell'algoritmo del vicino più vicino k ci aiuta a comprenderne l'efficienza computazionale. Esploreremo brevemente questo argomento e discuteremo in che modo l'efficienza dell'algoritmo può influire sulle sue prestazioni su set di dati di grandi dimensioni.
Verso la fine di questa lezione, ci immergeremo in esempi pratici di implementazione dell'algoritmo del vicino più vicino k usando Python. Dimostreremo come utilizzare l'algoritmo per attività di classificazione e regressione, mostrandone l'applicazione in scenari reali. Tuttavia, prima di passare all'implementazione, è essenziale cogliere i concetti e i principi sottostanti di k vicini più vicini.
Ricapitolando, nella seconda lezione abbiamo trattato il metodo del vicino più vicino come un semplice caso di algoritmi del vicino più vicino. Abbiamo esplorato il modo in cui l'algoritmo determina il punto dati più vicino a un punto di query e come utilizza l'etichetta del punto più vicino per la previsione. Abbiamo anche introdotto il concetto di confine decisionale e la sua forma nel metodo del vicino più vicino. Inoltre, abbiamo discusso l'algoritmo del vicino più vicino k, che considera più vicini più vicini invece di uno solo. Abbiamo menzionato come l'etichetta prevista sia determinata dal voto di maggioranza nei problemi di classificazione e dal valore medio o mediano nei problemi di regressione. Inoltre, abbiamo accennato brevemente alla notazione Big O e alla sua applicazione nell'analisi dell'efficienza degli algoritmi, incluso l'algoritmo k del vicino più vicino.
Nella prossima lezione, Lezione 3, approfondiremo l'implementazione dell'algoritmo k del vicino più vicino usando Python. Tratteremo i passaggi, le librerie e le tecniche necessarie per utilizzare efficacemente questo algoritmo. Quindi, assicurati di unirti a me nella prossima conferenza!
2.2 Limite decisionale del vicino più vicino (L02: Metodi del vicino più vicino)
2.2 Limite decisionale del vicino più vicino (L02: Metodi del vicino più vicino)
In questo secondo video, esamineremo il limite decisionale dell'algoritmo del vicino più vicino, concentrandoci in particolare sul classificatore del vicino più vicino. Useremo un set di dati bidimensionale a scopo illustrativo poiché è più facile da visualizzare per gli esseri umani.
Il set di dati è costituito da cinque punti dati rappresentati da punti blu. Ingrandiamo i punti A e B ed esploriamo il confine decisionale tra di loro. Il confine decisionale è una linea o un confine che separa i punti A e B. Se adattiamo un modello del vicino più vicino al set di dati, come sarebbe questo confine decisionale?
Per rispondere a questa domanda, dobbiamo comprendere il concetto di equidistanza. Qualsiasi punto che si trova sul confine decisionale dovrebbe essere equidistante dai punti A e B. Prenditi un momento per mettere in pausa il video e pensa a come sarebbe il confine decisionale. Il limite di decisione per i punti A e B sarebbe una linea tracciata utilizzando una metrica di distanza euclidea. Qualsiasi punto su questa linea è equidistante dai punti A e B, il che significa che la distanza tra il punto sulla linea e i punti A e B è la stessa ovunque sulla linea. Passiamo ora ai punti A e C e determiniamo il loro limite decisionale. Il limite di decisione per i punti A e C sarebbe una linea perpendicolare alla linea che collega A e C. Ogni punto su questa linea è equidistante dai punti A e C.
Possiamo continuare questo esercizio per tutte le coppie di punti nel set di dati, come C e D, per determinare i rispettivi limiti decisionali. Assemblando tutti questi limiti di decisione per ogni coppia di punti, otteniamo il limite di decisione del classificatore del vicino più prossimo, come mostrato nell'angolo in basso a destra.
Se osserviamo attentamente il diagramma, possiamo notare che assomiglia a un diagramma di Voronoi o a una tassellatura di Voronoi. Questo diagramma divide il set di dati in regioni, con ciascuna regione corrispondente al confine decisionale tra una coppia di punti. Ogni punto su una linea di confine è equidistante dai due punti adiacenti.
Tuttavia, non abbiamo ancora finito. Nella diapositiva precedente, abbiamo mostrato solo le regioni decisionali senza considerare le effettive etichette di classe. Ora reintroduciamo le etichette delle classi nel set di dati. I triangoli rappresentano la classe 1 e i quadrati rappresentano la classe 0.
Per ottenere le regioni decisionali che l'algoritmo del vicino più vicino userebbe per la classificazione, dobbiamo prendere l'unione delle regioni appartenenti alla stessa etichetta di classe. Ad esempio, i triangoli rossi hanno una regione decisionale racchiusa dai confini corrispondenti ai punti più vicini dei triangoli rossi. Allo stesso modo, i quadrati blu hanno la propria regione decisionale. Compilando queste regioni con i rispettivi colori, otteniamo il confine decisionale del classificatore del vicino più prossimo.
Per testare la tua comprensione, poniamo una semplice domanda. Dati i cinque punti dati nel set di dati, qual è il punto più vicino al punto interrogativo? Metti in pausa il video per un momento e pensa alla tua risposta. Rispondere a questa domanda richiede la conoscenza della misura della distanza utilizzata per determinare la vicinanza. In questo caso si usa la distanza euclidea, ma si possono usare anche altre misure di distanza. A seconda della misura della distanza scelta, il punto più vicino al punto interrogativo può variare.
Nel video sono state dimostrate due misure di distanza: la distanza euclidea e la distanza di Manhattan. La distanza euclidea misura la distanza in linea retta tra due punti, mentre la distanza di Manhattan misura la distanza sommando le differenze assolute tra le coordinate.
Inoltre, il video menziona brevemente la distanza di Mahalanobis, che tiene conto della distribuzione delle caratteristiche. Considera la distanza di un punto dati dalla sua distribuzione in termini di deviazioni standard. La somiglianza del coseno, che misura l'angolo tra due vettori, è anche menzionata come misura della distanza.
In pratica, la scelta della misura della distanza dipende dal problema specifico e dalle caratteristiche del dataset. Può essere considerato come un iperparametro dell'algoritmo del vicino più vicino che deve essere scelto con cura in base al problema in questione.
Parliamo ora dell'algoritmo k-nearest neighbor, che è un'estensione dell'algoritmo del vicino più vicino. Nell'algoritmo k-nearest neighbor, invece di considerare solo il punto più vicino, consideriamo i k punti più vicini al punto interrogato. Il limite di decisione dell'algoritmo k-nearest neighbor è determinato da un meccanismo di voto. Ogni punto all'interno della regione decisionale di una particolare classe contribuisce al voto per quella classe. La classe con il maggior numero di voti tra i k vicini più vicini viene assegnata come classe prevista per il punto di interrogazione.
Ad esempio, supponiamo di avere un punto di interrogazione rappresentato da una stella verde. Se usiamo un algoritmo 3-nearest neighbor, osserviamo i tre punti più vicini al punto di interrogazione. Se due di questi punti appartengono alla classe 0 e uno appartiene alla classe 1, la maggioranza dei voti assegnerebbe il punto interrogativo alla classe 0. Allo stesso modo, se aumentiamo il valore di k a 5, considereremmo i cinque punti più vicini all'interrogazione punto. Se tre di questi punti appartengono alla classe 1 e due appartengono alla classe 0, il voto di maggioranza assegnerebbe il punto interrogativo alla classe 1.
La scelta del valore di k è una considerazione importante nell'algoritmo k-nearest neighbor. Un valore minore di k può portare a un overfitting, in cui l'algoritmo diventa troppo sensibile alle fluttuazioni locali dei dati. D'altra parte, un valore maggiore di k può provocare un underfitting, in cui il limite decisionale diventa troppo uniforme e non riesce a catturare dettagli più fini. Come con qualsiasi algoritmo, ci sono dei compromessi da fare e la scelta di k dipende dal set di dati e dal problema in questione. È comune sperimentare diversi valori di k e utilizzare tecniche come la convalida incrociata per trovare il valore ottimale.
L'algoritmo del vicino più vicino k estende l'algoritmo del vicino più vicino considerando i k punti più vicini. Il limite decisionale è determinato da un meccanismo di voto basato sulle etichette di classe dei k vicini più vicini. La scelta di k è un iperparametro che deve essere accuratamente selezionato per bilanciare tra overfitting e underfitting.
2.3 K-vicini più vicini (L02: Metodi del vicino più vicino)
2.3 K-vicini più vicini (L02: Metodi del vicino più vicino)
Nel video precedente, ho accennato al fatto che non tutte le misure di distanza discusse in precedenza sono metriche. Ad esempio, la somiglianza del coseno non è considerata una metrica corretta perché non soddisfa la disuguaglianza triangolare. La disuguaglianza triangolare afferma che la distanza tra due punti dati, indicati come A e C, dovrebbe essere minore o uguale alla somma delle distanze tra A e B e B e C. Tuttavia, nonostante non sia una metrica corretta, il coseno la somiglianza è ancora molto utile nella pratica in contesti specifici.
Ora, approfondiamo l'approccio k-nearest neighbors (k-NN), che è un'estensione del metodo del vicino più vicino di cui abbiamo discusso in precedenza. Il modello k-NN è relativamente semplice in quanto generalizza il metodo del vicino più vicino considerando più vicini più vicini invece di uno solo.
In questo video, presento un esempio di un modello k-NN. Abbiamo due funzionalità, x1 e x2, e un set di dati giocattolo con diverse classi rappresentate da croci, cerchi e triangoli. Il nostro obiettivo è classificare un punto dati indicato da un punto interrogativo al centro. Per fare previsioni, consideriamo i punti dati entro un certo raggio attorno al punto interrogativo, utilizzando una misura di distanza euclidea.
Ora, la domanda è: quale sarebbe il valore di k in questo approccio k-NN per l'esempio dato? Se ti prendi un momento per pensare, ti renderai conto che k è 5 perché stiamo considerando i cinque punti dati più vicini al punto che vogliamo classificare.
Considerando i cinque vicini più prossimi, contiamo le occorrenze di ciascuna classe. Ad esempio, se troviamo un triangolo, un cerchio e tre croci, il voto della maggioranza assegna l'etichetta di classe prevista al punto interrogativo. In questo caso, l'etichetta di classe prevista sarebbe un triangolo poiché si verifica di più tra i cinque vicini più vicini.
Sebbene tecnicamente abbiamo un "voto di pluralità" in k-NN, in pratica viene comunemente indicato come "voto di maggioranza". Quando c'è un pareggio nel processo di votazione, in cui più classi hanno lo stesso conteggio, i pacchetti software in genere selezionano un'etichetta a caso o scelgono l'etichetta con l'indice di etichetta della classe inferiore.
Per fornire una definizione più formale del voto di maggioranza, consideriamo il sottoinsieme D sub k, che rappresenta i k vicini più prossimi. Definiamo il voto di maggioranza come l'etichetta di classe (y) che massimizza la somma delle funzioni delta. La funzione delta restituisce 1 se a è uguale a b (etichette corrispondenti) e 0 in caso contrario. Sommando i valori delta per ogni vicino, possiamo trovare l'etichetta di classe che ricorre più frequentemente.
Per l'analisi di regressione utilizzando k-NN, il processo è più semplice. Invece di etichette di classe, ci occupiamo di valori target continui. La previsione (h) per la regressione k-NN è la media dei valori target dei k vicini più prossimi.
Nel prossimo video, approfondiremo l'argomento dell'analisi di Big O, che comporta l'analisi della complessità di runtime dell'algoritmo k-nearest neighbors. Comprendere l'efficienza di un algoritmo è fondamentale per valutarne le prestazioni e la scalabilità. L'analisi Big O fornisce un modo per stimare in che modo il tempo di esecuzione dell'algoritmo crescerà all'aumentare della dimensione dell'input. Questa analisi ci aiuta a prendere decisioni informate sulla selezione e l'ottimizzazione degli algoritmi.Per eseguire l'analisi Big O sull'algoritmo k-nearest neighbors, dobbiamo considerare due fattori principali: il numero di istanze di addestramento (n) e il numero di caratteristiche (d). Questi fattori determinano il costo computazionale per trovare i k vicini più vicini per un dato punto di interrogazione.
Nell'implementazione più semplice di k-nearest neighbors, calcoleremmo la distanza tra il punto di interrogazione e ogni istanza di addestramento, risultando in una complessità temporale di O(nd). Ciò significa che il tempo di esecuzione dell'algoritmo cresce in modo lineare con il numero di istanze di addestramento e il numero di funzionalità.
Tuttavia, ci sono modi per ottimizzare l'algoritmo k-nearest neighbors e ridurne il costo computazionale. Un approccio comune consiste nell'utilizzare strutture di dati che accelerano la ricerca dei vicini più vicini, come kd-tree o ball tree. Queste strutture di dati suddividono le istanze di addestramento in modo gerarchico, consentendo ricerche più efficienti sui vicini.
Usando queste strutture di dati, possiamo ottenere un tempo di ricerca ridotto di O(log n) o addirittura O(1) in alcuni casi. Questo miglioramento velocizza notevolmente l'algoritmo, in particolare per set di dati di grandi dimensioni.
È importante notare che la scelta della metrica della distanza influisce anche sulla complessità del runtime dell'algoritmo. Alcune metriche di distanza, come la distanza euclidea, possono essere calcolate in modo efficiente, mentre altre, come la distanza di Manhattan, possono richiedere maggiori risorse computazionali.
Oltre alla complessità temporale, dovremmo considerare anche la complessità spaziale dell'algoritmo k-nearest neighbors. La complessità dello spazio si riferisce alla quantità di memoria richiesta per archiviare le istanze di addestramento e qualsiasi struttura di dati aggiuntiva utilizzata per una ricerca efficiente dei vicini. La complessità dello spazio è tipicamente O(nd) o O(n) per implementazioni ottimizzate.
Nel complesso, la comprensione delle complessità di runtime e spazio dell'algoritmo k-nearest neighbors ci aiuta a valutarne la scalabilità e a prendere decisioni informate quando lavoriamo con set di dati di grandi dimensioni o applicazioni in tempo reale.
Nel prossimo video, esploreremo ulteriormente questi concetti e forniremo un'analisi più dettagliata dell'efficienza dell'algoritmo. Resta sintonizzato per una discussione approfondita sull'analisi di Big O per k-vicini più vicini.
2.4 Big O di K-vicini più vicini (L02: Metodi del vicino più vicino)
2.4 Big O di K-vicini più vicini (L02: Metodi del vicino più vicino)
Ora, approfondiamo l'argomento della complessità di runtime, concentrandoci in particolare sulla notazione Big O e sulla complessità di runtime dell'algoritmo KNN (k-nearest neighbors).
La notazione Big O è un concetto utilizzato in informatica per analizzare l'efficienza degli algoritmi. Si riferisce principalmente alla complessità del runtime, che determina come si comporta la velocità di esecuzione di un algoritmo all'aumentare della dimensione dell'input. Inoltre, la notazione Big O può essere utilizzata anche per analizzare l'efficienza della memoria di un algoritmo, indicando la quantità di memoria richiesta per la sua esecuzione.
Nel caso di KNN, la fase di addestramento comporta il salvataggio del set di dati di addestramento, che può richiedere un uso intensivo della memoria. L'archiviazione di un set di dati di addestramento di grandi dimensioni può richiedere una quantità significativa di RAM o spazio di archiviazione su disco rigido. Sebbene lo spazio di archiviazione sia diventato più economico nel tempo, può ancora porre dei limiti quando si tratta di enormi set di dati, come milioni di immagini.
Tuttavia, spostiamo la nostra attenzione sulla complessità di runtime di KNN durante la fase di previsione. Prima di procedere, introduciamo brevemente la notazione Big O. È una notazione usata per descrivere l'efficienza degli algoritmi, tipicamente indicata da funzioni. Queste funzioni rappresentano la complessità di runtime degli algoritmi, con esempi comuni tra cui O(1) (costante), O(log n) (logaritmico) e così via. Queste funzioni indicano come il tempo di esecuzione di un algoritmo si ridimensiona con la dimensione dell'input (n).
Per ottenere una migliore comprensione della complessità di runtime, possiamo disporre le funzioni in ordine crescente di efficienza, da O(1) a complessità esponenziale. In questo contesto, una funzione costante è l'ideale in quanto rimane inalterata dalla dimensione dell'input, garantendo una velocità di esecuzione costante. Anche le funzioni logaritmiche e lineari sono efficienti, sebbene non ideali come le funzioni costanti. Tuttavia, quando la complessità aumenta a quadratica, cubica ed esponenziale, l'efficienza dell'algoritmo si deteriora in modo significativo. La complessità esponenziale è particolarmente dannosa e dovrebbe essere evitata, specialmente quando si ha a che fare con set di dati di grandi dimensioni nell'apprendimento automatico.
Per visualizzare la complessità del runtime in termini di n (dimensione dell'input), è possibile creare un grafico, dove l'asse x rappresenta n e l'asse y rappresenta la complessità dell'algoritmo. All'aumentare di n, alcune funzioni mostrano prestazioni sempre più scarse. È essenziale evitare algoritmi con elevata complessità, come quadratici, cubici o esponenziali, in quanto possono portare a tempi di esecuzione eccessivamente lunghi.
Ora, esploriamo come deriviamo la notazione Big O per una data funzione. Ad esempio, considera una funzione quadratica f(x) = ax^2 + bx + c. Quando si deriva la notazione Big O, ci concentriamo sul termine dominante che cresce più velocemente. In questo caso, il termine dominante è x^2. Pertanto, la notazione Big O per questa funzione sarebbe O(x^2), indicando la complessità quadratica.
Consideriamo un'altra funzione per illustrare ulteriormente questo processo. Supponiamo di avere una funzione f(x) = ax(log x). Ancora una volta, identifichiamo il termine dominante, che è x(log x). Qui trascuriamo il fattore costante a e ci concentriamo sul termine x(log x). Di conseguenza, la notazione Big O per questa funzione sarebbe O(x log x), indicando la complessità log-lineare.
Vale la pena ricordare che la base del logaritmo (ad esempio, log base 2 o logaritmo naturale) non influisce sulla notazione Big O. Basi diverse introducono solo un fattore di scala, che può essere ignorato quando si determina la complessità del runtime. Pertanto, per semplicità, di solito consideriamo il logaritmo naturale (log) senza specificare la base.
Per consolidare ulteriormente la tua comprensione, esaminiamo una funzione Python per la moltiplicazione di matrici, dimostrando l'applicazione della notazione Big O agli algoritmi computazionali. La funzione esegue la moltiplicazione di matrici tra due matrici, A e B. Sebbene l'implementazione sia intenzionalmente inefficiente per motivi di illustrazione, ci consente di analizzare la sua complessità di runtime.
La funzione inizia con l'inizializzazione di una matrice vuota C di dimensione nxn, dove n è la dimensione delle matrici di input. Quindi, itera attraverso ogni riga i della matrice A e ogni colonna j della matrice B. All'interno dei cicli nidificati, calcola il prodotto scalare della riga i nella matrice A e della colonna j nella matrice B, memorizzando il risultato nella cella corrispondente di matrice C.
Ecco il codice Python per la funzione di moltiplicazione di matrici:
È importante notare che la complessità cubica non è l'ideale, specialmente per grandi valori di n. All'aumentare della dimensione dell'input, il tempo di esecuzione di questa funzione aumenta in modo significativo. Di conseguenza, per matrici più grandi, dovrebbe essere utilizzato un algoritmo più efficiente per eseguire la moltiplicazione di matrici, come l'algoritmo di Strassen o altri approcci ottimizzati che ottengono migliori complessità di runtime, come O(n^2.81).
In sintesi, comprendere la complessità di runtime degli algoritmi, indicata dalla notazione Big O, è fondamentale per valutarne l'efficienza e la scalabilità. Ci consente di stimare le prestazioni di un algoritmo all'aumentare della dimensione dell'input, consentendoci di scegliere gli algoritmi più appropriati per diversi scenari ed evitare quelli inefficienti per set di dati di grandi dimensioni.