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
Backtesting.py - Corso completo su Python
Backtesting.py - Corso completo su Python
Durante il tutorial, l'istruttore discute gli aspetti positivi e negativi dell'utilizzo di backtesting.py come libreria per il backtest delle strategie di trading. La libreria è progettata per concentrarsi esclusivamente sugli elementi essenziali del backtesting, omettendo funzionalità come una libreria di indicatori o l'integrazione con broker o altre piattaforme. Questa semplicità consente alla libreria di essere leggera e semplice da usare. La documentazione fornita è chiara e di facile comprensione, consentendo agli utenti di comprendere rapidamente i concetti e le funzionalità della libreria.
Un vantaggio significativo di backtesting.py è la sua velocità, soprattutto quando si testano singole strategie. La libreria è ottimizzata per le prestazioni, consentendo agli utenti di eseguire backtest in modo efficiente e ottenere risultati in modo tempestivo. Questa velocità è vantaggiosa durante l'iterazione di più strategie o combinazioni di parametri per trovare le impostazioni ottimali.
Tuttavia, ci sono alcune limitazioni da considerare quando si utilizza backtesting.py. In primo luogo, la libreria non supporta il trading con più risorse. È progettato principalmente per testare strategie su un singolo asset o titolo. Inoltre, backtesting.py non fornisce supporto per le quote frazionarie, il che potrebbe essere uno svantaggio per gli utenti interessati a fare trading con posizioni di dimensioni inferiori.
Nonostante queste limitazioni, backtesting.py rimane una scelta eccellente per coloro che vogliono concentrarsi esclusivamente sul backtest delle proprie strategie di trading. La sua semplicità e la sua natura leggera lo rendono facile da capire e da integrare nei flussi di lavoro esistenti.
Nel tutorial, l'istruttore dimostra l'utilizzo di backtesting.py seguendo i passaggi per creare un ambiente virtuale e installare le dipendenze necessarie. Importando i componenti richiesti, come i dati di test per i prezzi delle azioni Google dal 2006 al 2013, l'istruttore pone le basi per l'esecuzione di un backtest.
L'istruttore procede quindi alla creazione di una classe strategica in cui vengono definite le due funzioni essenziali, __init__ e next. Nella funzione __init__, l'istruttore calcola il valore dell'indicatore del Relative Strength Index (RSI). La funzione successiva viene utilizzata per valutare i criteri di acquisto in base ai valori RSI.
Successivamente, l'istruttore spiega come implementare una semplice strategia di crossover utilizzando valori precalcolati inseriti nella funzione successiva. La libreria crossover da backtesting.py viene importata per confrontare l'RSI con i valori limite superiore e inferiore. Quando l'RSI supera un certo valore, viene generato un segnale di vendita e quando scende al di sotto di un altro valore, viene attivato un segnale di acquisto. L'istruttore definisce i valori limite superiore e inferiore e li assegna alla classe per l'accesso nella funzione successiva.
Per testare la strategia, l'istruttore imposta un backtest fornendo i dati, selezionando l'importo iniziale di denaro e stampando le statistiche. L'istruttore sottolinea la facilità di tracciare i risultati del backtesting utilizzando backtesting.py ed evidenzia come le caselle rosse e verdi sullo schermo indicano i mesi.
L'istruttore procede a fornire una panoramica della dashboard backtesting.py, che offre una visione completa delle informazioni commerciali, profitti e perdite, valore del portafoglio e indicatori, tra le altre metriche utili. L'istruttore dimostra come è possibile ottenere l'ottimizzazione della strategia utilizzando backtesting.py definendo intervalli diversi per i limiti superiore e inferiore della finestra RSI. L'ottimizzatore genera statistiche come il rapporto Sharpe e simula varie combinazioni per trovare la funzione più preziosa. L'istruttore sottolinea che gli utenti possono definire metriche personalizzate e applicare vincoli per migliorare i risultati di ottimizzazione.
Inoltre, l'istruttore spiega come applicare i vincoli per selezionare un sottoinsieme di valori utilizzando funzioni lambda che restituiscono true o false in base a parametri specifici. Il video mostra come ottimizzare la strategia utilizzando la funzione di ottimizzazione per massimizzare il rapporto Sharpe e come definire la funzione di ottimizzazione come una normale funzione Python. L'istruttore discute anche la creazione di una metrica per massimizzare i profitti riducendo al minimo il tempo trascorso nel mercato.
Nel tutorial, l'istruttore aggiunge un numero minimo di filtri di operazioni alla funzione di ottimizzazione per evitare l'overfitting. Includendo questo filtro, la funzione di backtesting è costretta a guardare oltre un singolo periodo di oscillazione, aumentando le possibilità di scoprire combinazioni di parametri più redditizie. Inoltre, l'istruttore mostra come creare file HTML dei risultati del backtest, che possono essere utili quando si eseguono più backtest e devono tenere traccia delle diverse combinazioni di parametri. L'istruttore fornisce anche indicazioni sulla denominazione e l'organizzazione dei file generati per evitare di ingombrare la directory di lavoro.
Il tutorial esplora ulteriormente l'uso della funzione di ottimizzazione in backtesting.py per ottimizzare una strategia in modo efficiente senza dover testare ogni possibile combinazione. Impostando un numero massimo di tentativi, il programma esegue una ricerca a griglia randomizzata delle combinazioni, riducendo il tempo dedicato al backtesting e il rischio di overfitting. L'istruttore dimostra come generare mappe di calore per visualizzare gli effetti di diversi valori sulla strategia variando i limiti superiore e inferiore. Viene utilizzata un'istruzione pandas group by per raggruppare le colonne in base ai limiti superiore e inferiore e viene calcolata la media per ottenere valori medi per ciascuna combinazione.
L'oratore spiega come la funzione in backtesting.py trova tutte le combinazioni univoche delle colonne specificate, come i limiti superiore e inferiore. Queste combinazioni vengono quindi raggruppate insieme e viene applicata una funzione di aggregazione, come la media. L'output risultante è una mappa termica che può essere tracciata utilizzando il modulo Seaborn. L'istruttore dimostra l'ottimizzazione per il rapporto Sharpe e la modifica della mappa dei colori per la mappa termica. Inoltre, l'istruttore mostra come utilizzare la funzione integrata plot_heat_maps per tracciare più mappe di calore per più di due parametri.
L'istruttore dimostra come utilizzare le mappe di calore per l'ottimizzazione dei parametri e l'implementazione di strategie multi-time frame utilizzando la funzione resample apply dalla libreria backtesting.py. Le mappe di calore forniscono una rappresentazione visiva di come le variazioni nei diversi parametri influenzano le strategie di trading. Combinando diversi intervalli di tempo utilizzando la funzione resample apply, i trader possono costruire strategie più complesse che prendono in considerazione diverse condizioni di mercato.
L'istruttore spiega come diversi intervalli di tempo possono essere utilizzati in una strategia di trading utilizzando la libreria backtesting.py. Effettuando il downsampling e applicando le funzioni, la libreria può eseguire il forward fill e reindicizzare l'intervallo di tempo più piccolo, facilitando l'analisi di diversi intervalli di tempo. Nell'esempio fornito, la strategia prevede l'utilizzo dell'RSI giornaliero e settimanale per attivare le negoziazioni solo quando si verifica un crossover e l'RSI è al di sopra o al di sotto di una certa soglia. L'istruttore afferma che la strategia può essere ottimizzata regolando i parametri e che la libreria supporta la sperimentazione con diversi tipi di ordine, come stop loss e take profit.
Il presentatore mostra come aprire una posizione short quando l'RSI scende al di sotto del limite inferiore e chiudere eventuali posizioni short al momento dell'acquisto. Allo stesso modo, il presentatore dimostra che quando l'RSI supera il limite superiore, vende eventuali posizioni lunghe e avvia una posizione corta. Tuttavia, il presentatore osserva che non esiste un codice per impedire al programma di assumere più posizioni, il che porta il programma a perdere l'80% del capitale investito. Il presentatore spiega come risolvere questo problema aggiungendo una clausola per avviare una nuova operazione solo se non esiste una posizione corrente o se esiste una posizione lunga/corta nel portafoglio.
L'istruttore dimostra come utilizzare gli ordini stop-loss e take-profit in backtesting.py. Impostando uno stop-loss a una percentuale specifica al di sotto del prezzo corrente, la strategia può limitare le perdite su ogni operazione, mentre l'impostazione di un livello di take-profit consente di uscire dalle negoziazioni a un certo livello di profitto. L'istruttore mostra anche come regolare il parametro della dimensione nel processo di acquisto per allocare una percentuale specifica di fondi disponibili per ogni operazione. Sebbene ci siano alcuni problemi con le tattiche di vendita nell'esempio, il video fornisce utili spunti sull'utilizzo di backtesting.py per creare e testare strategie di trading.
Il video discute diversi modi per implementare il dimensionamento della posizione nel backtesting. Un approccio consiste nell'acquistare e vendere un'azione alla volta anziché una percentuale della liquidità disponibile. Questo approccio può essere utile per le strategie che implicano il laddering in una posizione o la media del costo in dollari. Il video mostra la modifica di una strategia crossover in una strategia basata sull'indicatore RSI. In questa strategia modificata, le negoziazioni vengono eseguite quando l'ultimo valore RSI è inferiore al limite inferiore. Il video evidenzia inoltre che le negoziazioni possono essere estratte dal backtest come dataframe panda, comprese le date di ingresso e di uscita e altre metriche importanti. Questi dati commerciali possono essere esportati in altri strumenti di visualizzazione, come Excel o altri script Python, per ulteriori analisi ed esami.
Il creatore di backtesting.py introduce la funzione "barre da", che è un potente strumento per ottimizzare le strategie ed evitare la necessità di scrivere numerose istruzioni if per confrontare i dati dei giorni precedenti. La funzione consente agli utenti di determinare il numero di barre dall'ultima volta che è stata soddisfatta una particolare condizione di trading. Questa funzione fornisce un modo conveniente per ottimizzare le strategie basate su specifiche condizioni basate sul tempo. Inoltre, il creatore sottolinea la natura open source di backtesting.py, incoraggiando gli utenti a personalizzare la libreria in base alle proprie esigenze e preferenze specifiche.
In conclusione, il tutorial su backtesting.py si conclude con l'istruttore che incoraggia gli spettatori a contattare qualsiasi domanda o dubbio. L'istruttore augura loro buona fortuna nei loro sforzi di backtesting e ricorda loro di divertirsi mentre esplorano le possibilità del backtesting e dell'ottimizzazione delle strategie di trading utilizzando backtesting.py. L'istruttore sottolinea l'importanza di fare riferimento alla documentazione backtesting.py per maggiori dettagli e per scoprire funzionalità aggiuntive disponibili per la creazione e l'ottimizzazione dell'infrastruttura di backtesting.
Nel complesso, il tutorial fornisce una panoramica completa di backtesting.py, dei suoi vantaggi, limitazioni e varie funzionalità. Guida gli utenti attraverso il processo di creazione di un ambiente di backtest, implementazione di strategie, ottimizzazione dei parametri, utilizzo di mappe di calore per l'analisi, incorporazione di più intervalli temporali e applicazione di tecniche di dimensionamento della posizione. Seguendo il tutorial, gli spettatori ottengono preziose informazioni e conoscenze pratiche che possono aiutarli a testare e perfezionare efficacemente le loro strategie di trading utilizzando backtesting.py.
Effettua facilmente il backtest della tua strategia di costo medio in dollari in Python
Effettua facilmente il backtest della tua strategia di costo medio in dollari in Python
Nei prossimi 20 minuti circa, implementeremo una strategia di media del costo in dollari in Python. Questa strategia ti consentirà di valutare la performance della media del costo in dollari per un asset o un indice specifico in un determinato periodo di tempo. Useremo uno strumento chiamato backtesting.py per implementare questa strategia. Backtesting.py è un framework intuitivo in Python che è meno intimidatorio rispetto ad altre librerie come Vectorbt o Backtrader. Se sei nuovo in Python, questa sarà un'ottima opzione per te.
La strategia di calcolo della media del costo in dollari che implementeremo è relativamente semplice, ma ti mostrerò anche come estenderla. La nostra strategia prevede l'acquisto di un importo fisso in dollari di un particolare asset ogni lunedì o martedì e la ripetizione di questo processo finché non esauriamo i dati. Per iniziare, apri un terminale e configura un nuovo ambiente virtuale per garantire un ambiente pulito per la nostra implementazione. Dopo aver configurato l'ambiente virtuale, installa il pacchetto di backtesting utilizzando pip:
pip install backtesting
Dopo aver installato il pacchetto, possiamo procedere con il nostro file Python. Avremo bisogno di importare alcuni moduli e dati necessari. Dal backtesting, importa i moduli backtest e strategia. Inoltre, importa alcuni dati fittizi da backtesting.test, in particolare i dati di Google. Avremo anche bisogno del modulo panda per la manipolazione dei dati.
Ora, definiamo la nostra classe strategica. Crea una classe chiamata DCA (Dollar Cost Average) che eredita dalla classe della strategia. All'interno di questa classe, imposteremo una variabile di classe denominata amount_to_invest, che rappresenta l'importo fisso in dollari che vogliamo investire. Inizialmente, impostalo su 10.
Successivamente, dobbiamo definire due funzioni all'interno di questa classe: __init__ e next. La funzione __init__ viene chiamata durante l'inizializzazione e viene utilizzata per pre-calcolare eventuali valori di cui potremmo aver bisogno in seguito. Nel nostro caso, creeremo un indicatore che ci dia il giorno della settimana. Per fare ciò, utilizzeremo il metodo self.indicator fornito da backtesting.py. Possiamo definire il nostro indicatore come self.day_of_week = self.indicator(lambda x: x, self.data.close.s.dt.dayofweek). Questo indicatore restituirà un array dei valori del giorno della settimana (0-6, dove lunedì è 0 e domenica è 6) per i nostri dati.
Passiamo ora alla funzione successiva, che è dove implementiamo la nostra logica di trading. Questa funzione viene richiamata per ogni barra di dati e ci consente di prendere decisioni in base ai dati correnti. Nel nostro caso, verificheremo se il giorno della settimana è uguale a 1 (martedì) utilizzando if self.day_of_week == 1:. Se è martedì, attiveremo un segnale di acquisto. Per eseguire l'ordine di acquisto, utilizzeremo la funzione self.buy fornita da backtesting.py. Possiamo calcolare la dimensione dell'ordine di acquisto dividendo l'importo_da_investire per l'attuale prezzo di chiusura dell'asset. Per assicurarci di acquistare un numero intero di azioni, possiamo utilizzare math.floor per arrotondare il risultato per difetto.
Per gestire le frazioni di azioni, possiamo dividere le azioni moltiplicando l'asset per un piccolo numero, ad esempio 10 ** -6. Questo dividerà le azioni in microcondivisioni, che possono essere successivamente riconvertite nell'importo effettivo di azioni acquistate dividendo per lo stesso piccolo numero.
Infine, dobbiamo eseguire il backtest ed estrarre le statistiche. Per fare ciò, possiamo usare bt.run() e assegnare il risultato a una variabile chiamata stats. Possiamo anche tracciare i risultati usando bt.plot().
Poiché non abbiamo ancora implementato la logica di vendita, la trama appare come una linea continua senza alcun punto di vendita. Lo risolveremo presto. Ma prima di farlo, estraiamo alcune statistiche dai risultati del backtest.
Per fare questo, useremo la variabile stats che abbiamo definito in precedenza. Possiamo stampare varie statistiche come il rendimento totale, il rendimento annualizzato, il prelievo massimo e altro ancora.
Sentiti libero di aggiungere altre statistiche se sei interessato a esplorare ulteriori metriche sul rendimento.
Ora passiamo all'implementazione della logica di vendita. Poiché utilizziamo una strategia di media del costo in dollari, venderemo lo stesso importo fisso in dollari ogni settimana. Nel nostro caso, venderemo il venerdì.
Qui, controlliamo se il giorno della settimana è 4 (venerdì) utilizzando l'indicatore day_of_week che abbiamo creato in precedenza. Se è venerdì, vendiamo lo stesso importo in dollari che abbiamo acquistato in precedenza dividendo amount_to_invest per il prezzo di chiusura corrente. Ciò garantisce che vendiamo il numero appropriato di azioni per corrispondere all'importo del nostro investimento.
Ora, quando eseguiamo il backtest, dovremmo vedere i punti di vendita sul grafico, indicando i venerdì in cui vendiamo la nostra posizione.
Sentiti libero di sperimentare diverse varianti di questa strategia, come regolare i giorni di acquisto/vendita o implementare condizioni aggiuntive basate sui movimenti dei prezzi. Questo framework ti consente di estendere e personalizzare facilmente la tua strategia in base alle tue esigenze.
Ricorda di regolare la variabile amount_to_invest ed esplorare diversi dati sugli asset per vedere come si comporta la strategia.
Spero che questo ti aiuti a implementare ed esplorare la strategia di media del costo in dollari utilizzando la libreria backtesting.py in Python. Fammi sapere se hai altre domande!
Indicatori personalizzati in Backtesting.py - Python Deep Dive
Indicatori personalizzati in Backtesting.py - Python Deep Dive
In questo video, esploreremo il processo di creazione di indicatori personalizzati nella libreria backtesting.py. Questa funzionalità ci consentirà di eseguire facilmente il backtest di qualsiasi strategia di trading creando indicatori e traducendo le funzioni Python in un formato compatibile con l'ecosistema backtesting.py.
Prima di approfondire i dettagli della creazione dell'indicatore, si consiglia di dare un'occhiata a un corso disponibile gratuitamente su YouTube che copre la maggior parte degli aspetti di backtesting.py. Questo corso fornirà una comprensione di alto livello della libreria, che sarà utile quando si esplora la creazione di indicatori in questo video.
In questo video, ci concentreremo su tre diversi esempi per coprire varie idee sugli indicatori. Il primo esempio prevede l'utilizzo di segnali generati in un programma Python esterno e la loro integrazione in backtesting.py. Questo approccio è utile quando si dispone già di segnali di acquisto e vendita da una fonte esterna e si desidera incorporarli nel processo di backtesting.
Il secondo esempio dimostrerà l'uso della libreria pandas-ta per restituire più valori per ciascun indicatore. Nello specifico, lavoreremo con l'indicatore Bollinger Bands e mostreremo come restituire un frame di dati contenente sia la banda inferiore che quella superiore, invece di un semplice array numpy. Questo esempio evidenzierà la versatilità della creazione di indicatori con più valori.
Infine, codificheremo a mano una strategia di momentum per dimostrare come è possibile creare indicatori personalizzati utilizzando Python puro. Questo esempio mostrerà la flessibilità della creazione di indicatori utilizzando la programmazione Python, consentendo possibilità illimitate nella progettazione degli indicatori.
Per seguire gli esempi, assicurati di aver installato le librerie necessarie, inclusi backtesting, panda e pandas-ta. Dopo aver installato queste librerie, crea un file Python per gli esempi di codice.
La parte iniziale del codice imposta il boilerplate necessario quando si utilizza backtesting.py. Importa le classi richieste, "backtest" e "strategia" e importa i dati di esempio per le azioni di Google da backtesting.py. I dati importati sono un frame di dati panda contenente dati sui prezzi giornalieri, inclusi apertura, massimo, minimo, chiusura e volume, con un indice datetime.
Per il primo esempio, assumiamo che tu abbia già generato alcuni segnali in un programma esterno e desideri trasferirli a backtesting.py. Per dimostrarlo, creiamo segnali casuali utilizzando numpy e li aggiungiamo al data frame di Google. Questi segnali potrebbero rappresentare qualsiasi indicatore programmato in Python, dove -1 indica un segnale di vendita, 0 indica nessuna azione e 1 rappresenta un segnale di acquisto.
Successivamente, definiamo una classe strategica chiamata "SignalStrategy" che eredita dalla classe "Strategy" importata in precedenza. Questa classe sarà responsabile dell'implementazione della logica di acquisto e vendita basata sui segnali. La classe include la funzione di inizializzazione " init " e la funzione "next".
Nella funzione " init ", non abbiamo molto da fare in questo particolare esempio, ma è buona norma includerla. La funzione "successiva" è dove verrà implementata la logica di acquisto e vendita in base ai segnali.
Per eseguire il backtest, creiamo un'istanza della classe backtest, passando il data frame di Google e la classe "SignalStrategy". Impostiamo anche il valore della cache su 10.000. Quindi, eseguiamo il backtest e memorizziamo i risultati nella variabile "stats". Infine, stampiamo le statistiche per vedere le prestazioni della strategia.
L'esecuzione del codice a questo punto non produrrà alcuna operazione perché non abbiamo ancora implementato la logica di acquisto e vendita. Tuttavia, possiamo accedere ai valori del segnale utilizzando "self.data.signal" all'interno della funzione "next", che ci fornirà l'ultimo valore del segnale.
Per implementare la logica di acquisto e vendita, controlliamo il valore del segnale corrente e la posizione corrente. Se il segnale è 1 (segnale di acquisto) e non esiste alcuna posizione esistente, eseguiamo un ordine di acquisto utilizzando "self.buy". Se il segnale è -1 (segnale di vendita) e c'è una posizione long esistente, eseguiamo un ordine di vendita utilizzando "self.sell".
Strategia di segnale esterno:
Utilizzo di pandas-ta per gli indicatori personalizzati:
Ricorda di sostituire i segnaposto come GOOG con i tuoi dati effettivi e personalizzare le strategie in base alle tue esigenze specifiche.
Stop Loss in Backtesting.py
Stop Loss in Backtesting.py
In questo video esploreremo il concetto di stop loss nella libreria "backtesting.py". Il video coprirà tre esempi di crescente complessità e profondità, fornendo una comprensione completa degli stop loss in "backtesting.py". Il presentatore presuppone una conoscenza preliminare di "backtesting.py" e consiglia di guardare un corso gratuito su YouTube per principianti prima di approfondire questo argomento avanzato.
Per iniziare, apri un terminale e assicurati che "backtesting.py" sia installato eseguendo il comando "pip install backtesting". Questo installerà tutti i pacchetti necessari. Quindi, crea un nuovo file Python, chiamiamolo "example.py" e importa i moduli richiesti: "backtest" e "strategy" da "backtesting" e "googledale" da "backtesting.test". "googledale" è un set di dati di test fornito con "backtesting.py".
Successivamente, definisci la classe strategica creando una classe chiamata "Strats" che eredita dalla classe "strategia". Implementare le due funzioni richieste: " init " e "next". A questo punto, siamo pronti per eseguire il nostro backtest. Inizializza un nuovo oggetto backtest, "bt", utilizzando la funzione "backtest". Passa i dati "googledale" e la classe di strategia che abbiamo appena definito. Imposta il valore in contanti iniziale a $ 10.000. Infine, esegui il backtest utilizzando il metodo "bt.run" e traccia i risultati utilizzando "bt.plot".
Inizialmente, la classe di strategia non esegue alcuna azione di trading. Per dimostrare un semplice esempio di stop loss, aggiungeremo alcune logiche di acquisto e vendita di base. Se abbiamo una posizione esistente, non intraprenderemo alcuna azione. Tuttavia, se non abbiamo una posizione, inseriremo un ordine di acquisto utilizzando il metodo "self.to_buy", specificando la dimensione della posizione (es. 1 azione). Inoltre, aggiungeremo uno stop loss e un take profit. Lo stop loss sarà fissato a 10 unità al di sotto dell'attuale prezzo di chiusura, mentre il take profit sarà fissato a 20 unità al di sopra dell'attuale prezzo di chiusura.
L'esecuzione del backtest genererà un gran numero di operazioni. Non appena un trade viene chiuso, un nuovo trade verrà aperto sulla barra successiva a meno che non venga attivato lo stop loss o il take profit. È importante capire come "backtesting.py" gestisce stop loss e take profit. Nei casi in cui sia lo stop loss che il take profit vengono attivati nella stessa barra, la libreria presuppone che lo stop loss venga attivato per primo. Questo comportamento può portare a risultati imprevisti, soprattutto quando si ha a che fare con dati giornalieri che possono presentare lacune significative.
Per gestire gli stop loss in modo più efficace, possiamo estendere la classe di strategia e utilizzare la "strategia di trailing" fornita da "backtesting.py". Importa i moduli necessari, inclusi "crossover" e "trailing strategy" da "backtesting.lib". Nella nuova classe strategica, eredita dalla "strategia finale" anziché dalla classe "strategia" di base. Sovrascrivi la funzione " init " per chiamare la funzione " init " della classe genitore usando "super". Quindi, utilizza la funzione "set_trailing_stop_loss" dalla classe genitore per impostare un valore di trailing stop loss.
Nella sezione successiva del video, il presentatore spiega in modo più dettagliato come funziona la "strategia di trascinamento" e come personalizzarla per esigenze specifiche. Tuttavia, in questa sezione, l'attenzione è rivolta all'utilizzo della "strategia di trascinamento" nel nostro codice. Chiamando la funzione " init " della classe genitore e utilizzando la funzione "set_trailing_stop_loss", possiamo sfruttare la funzionalità di trailing stop loss nel nostro backtest.
Nel complesso, il video fornisce una spiegazione dettagliata dell'implementazione degli stop loss in "backtesting.py". Copre esempi semplici così come concetti più avanzati come il trascinamento di un valore di 10, il che significa che il nostro stop loss trascinerà il prezzo di 10 unità.
Ora che abbiamo impostato la nostra funzione di inizializzazione, passiamo alla funzione successiva. È qui che verrà implementata la maggior parte della nostra logica di trading. All'interno della funzione next, chiameremo prima la funzione next della classe genitore usando super().next(). Ciò garantisce che la funzionalità di trailing stop loss venga eseguita insieme all'altra logica di trading.
Successivamente, aggiungeremo del codice per regolare il nostro trailing stop loss. Useremo un'istruzione condizionale per verificare se abbiamo una posizione aperta (self.position non è None). Se abbiamo una posizione, aggiorneremo il trailing stop loss utilizzando il metodo update_trailing_sl fornito dalla classe trailing_strategy. Questo metodo prende il prezzo corrente come argomento e aggiorna lo stop loss di conseguenza.
Convalida backtest in Python (imbrogliata dalla casualità)
Convalida backtest in Python (imbrogliata dalla casualità)
Ci siamo trovati tutti in quella situazione in cui creiamo una strategia di trading, la testiamo a posteriori e, quando finalmente la implementiamo, non funziona come previsto. Uno dei motivi principali di questa delusione è l'overfitting della strategia su un insieme specifico di dati storici utilizzati nel backtest. In questo video, dimostrerò una strategia per combattere l'overfitting e assicurarti di non fare affidamento su strategie prive di solide basi o farti ingannare dalla casualità.
Facciamo un esempio specifico. Ho condotto un backtest su una semplice strategia basata su RSI utilizzando Bitcoin come risorsa. La strategia prevede la vendita quando l'RSI è alto e l'acquisto quando l'RSI è basso. I risultati del backtest hanno mostrato un modesto rendimento di circa il tre percento, nonostante Bitcoin abbia registrato un calo del 15 percento nel periodo testato. A prima vista, può sembrare una strategia promettente per i mercati ribassisti.
Tuttavia, è fondamentale esaminare le prestazioni della strategia in vari intervalli di tempo per determinare se identifica costantemente opportunità redditizie o se è semplicemente stata fortunata con i valori dei parametri scelti durante il backtest. Per raggiungere questo obiettivo, ho condotto più backtest di 30 giorni, coprendo diversi periodi durante l'anno.
Tracciando la distribuzione dei rendimenti di questi backtest, possiamo ottenere informazioni sull'efficacia della strategia. Il grafico mostra ogni finestra di 30 giorni come un punto, che rappresenta i rendimenti ottenuti durante quel periodo. Il diagramma a scatola allegato mostra il rendimento mediano, i quartili, i valori massimo e minimo. Analizzando il grafico, diventa evidente che il rendimento medio su un periodo di 30 giorni è del -8,5%. Inoltre, la distribuzione dei rendimenti sembra essere casuale, simile ai risultati che ci si aspetterebbe da un generatore di numeri casuali impostato tra -35 e 15. Questi risultati indicano fortemente che la strategia non è unica o efficace al di là dei dati storici specifici utilizzati nel retrotest.
Per convalidare la strategia e mitigare l'influenza dell'overfitting, dobbiamo condurre test retrospettivi su una gamma più ampia di dati. A tale scopo, ho scaricato più file di dati che coprono l'intero anno, dall'inizio del 2022 alla fine del 2022. Ho combinato questi file in un CSV master contenente i dati delle candele di un minuto per l'intero periodo.
Nel codice di convalida, ho apportato alcune modifiche minori per accogliere il set di dati esteso. La strategia di base rimane la stessa, concentrandosi sulla logica di trading basata su RSI. Tuttavia, ho introdotto un ciclo per condurre backtest su finestre di 30 giorni in tutti i dati. Ogni backtest calcola i rendimenti, che vengono poi aggiunti a un elenco per ulteriori analisi.
Generando un box plot utilizzando i rendimenti raccolti, possiamo visualizzare la distribuzione della performance della strategia in varie finestre di 30 giorni. Questo grafico rivela la variabilità dei rendimenti e fornisce un quadro più chiaro di come si comporta la strategia su diversi intervalli di tempo. In questo esempio specifico, il grafico indica rendimenti prevalentemente negativi per quasi tutti i mesi, suggerendo che la strategia manca di redditività costante.
Queste tecniche per convalidare e verificare le strategie di trading possono essere applicate a qualsiasi framework di backtesting di tua scelta. Il codice fornito utilizza la libreria backtesting.py, ma puoi adattarlo ad altre librerie come vectorbt o backtrader. L'idea chiave è garantire che la tua strategia dimostri robustezza in diversi intervalli di tempo e non sia semplicemente un prodotto dell'overfitting di un insieme specifico di dati storici.
Seguendo questi passaggi di convalida, puoi ridurre il rischio di fare affidamento su strategie che non sono radicate nella realtà o di cadere vittima di risultati casuali. È essenziale andare oltre le prestazioni del backtest e considerare l'efficacia della strategia in diverse condizioni di mercato per prendere decisioni informate durante l'implementazione delle strategie di trading.
Dopo aver analizzato i risultati del backtest e la distribuzione dei rendimenti su diversi intervalli di tempo, abbiamo scoperto che la performance della strategia era essenzialmente casuale. Non ha fornito una redditività costante al di fuori del periodo di tempo specifico utilizzato per i test retrospettivi. Ciò indica che la strategia soffriva di overfitting e mancava di robustezza.
Per evitare di cadere nella trappola dell'overfitting e aumentare le possibilità di sviluppare strategie di trading affidabili, ecco alcuni consigli:
Usa dati sufficienti e diversificati: assicurati che il tuo backtest incorpori una quantità significativa di dati storici per coprire varie condizioni di mercato. Questo aiuta a catturare una gamma più ampia di scenari e riduce la probabilità di overfitting a specifiche condizioni di mercato.
Convalida su più tempi: invece di fare affidamento esclusivamente su un singolo periodo di tempo per il backtesting, testa la tua strategia su diversi tempi. Ciò fornisce informazioni sulla sua performance in varie condizioni di mercato e aiuta a identificare se la strategia ha una redditività costante o se i risultati osservati sono dovuti alla casualità.
Implementa test fuori campione: riserva una parte dei tuoi dati storici per test fuori campione. Dopo aver condotto il tuo backtest primario sul set di dati iniziale, convalida la strategia sui dati riservati che il modello non ha visto prima. Questo aiuta a valutare la capacità della strategia di adattarsi a condizioni di mercato invisibili e fornisce una valutazione più realistica della sua performance.
Attenzione all'adattamento della curva: evitare un'ottimizzazione eccessiva o l'ottimizzazione dei parametri per adattare troppo la strategia ai dati storici. Le strategie troppo adattate a modelli di dati specifici hanno maggiori probabilità di fallire nel trading nel mondo reale. Mira alla robustezza piuttosto che inseguire prestazioni eccezionali solo sui dati storici.
Prendi in considerazione l'analisi walk-forward: invece di fare affidamento esclusivamente su backtest statici, considera l'utilizzo dell'analisi walk-forward. Ciò comporta una riottimizzazione periodica e un nuovo test della strategia man mano che diventano disponibili nuovi dati. Ti consente di adattare e perfezionare continuamente la tua strategia, migliorandone le prestazioni in condizioni di mercato mutevoli.
Usa test di significatività statistica: applica test statistici per valutare la significatività della performance della tua strategia. Questo aiuta a determinare se i risultati osservati sono statisticamente significativi o semplicemente dovuti al caso. I test statistici comuni utilizzati nel backtesting includono t-test, test bootstrap e simulazioni Monte Carlo.
Seguendo queste linee guida, puoi ridurre il rischio di sviluppare strategie eccessivamente adattate ai dati storici e aumentare la probabilità di creare approcci di trading solidi e affidabili.
Ricorda, l'obiettivo è sviluppare strategie di trading che dimostrino una redditività costante in diverse condizioni di mercato, piuttosto che strategie che si limitano a dare buoni risultati sui dati storici.
Un'introduzione rapida a Python per ingegneri di machine learning
Un'introduzione rapida a Python per ingegneri di machine learning
L'istruttore del corso inizia introducendo il concetto di modellazione predittiva e il suo significato nel settore. La modellazione predittiva si concentra sullo sviluppo di modelli in grado di effettuare previsioni accurate, anche se potrebbero non fornire una spiegazione del motivo per cui tali previsioni vengono effettuate. Il docente sottolinea che il corso si concentrerà in modo specifico sui dati tabulari, come fogli di calcolo o database. L'obiettivo è guidare gli studenti dall'essere sviluppatori interessati all'apprendimento automatico in Python a diventare esperti nel lavorare con nuovi set di dati, sviluppare modelli predittivi end-to-end e sfruttare Python e la libreria SCIPy per attività di apprendimento automatico.
Per iniziare, l'istruttore fornisce un corso accelerato sulla sintassi di Python. Coprono concetti fondamentali come variabili e assegnazioni, chiarendo la distinzione tra il segno di "uguale" utilizzato per l'assegnazione e il segno di "doppio uguale" utilizzato per i confronti di uguaglianza. L'istruttore dimostra come utilizzare Jupyter Notebook per la codifica Python e fornisce suggerimenti per la navigazione, come la creazione di un nuovo notebook, l'utilizzo di alias per le librerie, l'esecuzione di celle e la copia o lo spostamento di celle. Spiegano anche la funzione di salvataggio automatico e il salvataggio manuale dei taccuini. Infine, il video tocca brevemente l'arresto dell'esecuzione del kernel.
Andando avanti, l'istruttore spiega come utilizzare la barra degli strumenti in Jupyter Notebook per la navigazione del motore Python e come annotare i notebook utilizzando Markdown. Il video illustra le istruzioni essenziali per il controllo del flusso, incluse le condizioni if-then-else, i cicli for e i cicli while. Queste istruzioni consentono il processo decisionale e la ripetizione all'interno del codice Python. L'istruttore introduce quindi tre strutture dati cruciali per l'apprendimento automatico: tuple, elenchi e dizionari. Queste strutture di dati forniscono modi efficienti per archiviare e manipolare i dati. Inoltre, il video include un corso intensivo su NumPy, una libreria che consente operazioni numeriche in Python. Copre la creazione di array, l'accesso ai dati e l'esecuzione di operazioni aritmetiche con gli array.
Il video procede con la discussione di due librerie essenziali, Matplotlib e Pandas, comunemente utilizzate nell'apprendimento automatico per l'analisi e la visualizzazione dei dati. Matplotlib consente agli utenti di creare vari grafici e grafici, facilitando la visualizzazione dei dati. Pandas, d'altra parte, fornisce strutture dati e funzioni per la manipolazione e l'analisi dei dati, in particolare attraverso strutture di serie e frame di dati. Il video evidenzia l'importanza della funzione read_csv di Pandas per il caricamento di file CSV, il formato più comune nelle applicazioni di machine learning. Sottolinea inoltre l'utilità delle funzioni di Pandas per riassumere e tracciare i dati per ottenere approfondimenti e preparare i dati per le attività di machine learning. Le statistiche descrittive in Python sono menzionate come uno strumento cruciale per comprendere le caratteristiche e la natura dei dati.
Il video approfondisce specifiche tecniche di visualizzazione dei dati che possono aiutare l'analisi dei dati prima di applicare le tecniche di machine learning. Istogrammi, grafici di densità e box plot vengono introdotti come modi per osservare la distribuzione degli attributi e identificare potenziali valori anomali. Le matrici di correlazione e le matrici dei grafici a dispersione sono presentate come metodi per identificare le relazioni tra coppie di attributi. Il video sottolinea l'importanza di ridimensionare, standardizzare, normalizzare e binarizzare i dati come passaggi di pre-elaborazione necessari per preparare i dati per gli algoritmi di machine learning. Il metodo di adattamento e trasformazione è spiegato come un approccio comune per la pre-elaborazione dei dati.
Il prossimo argomento discusso sono le tecniche di preelaborazione dei dati nell'apprendimento automatico. Il video tratta la normalizzazione e la standardizzazione come due tecniche importanti. La normalizzazione implica il ridimensionamento degli attributi in modo che abbiano la stessa scala, mentre la standardizzazione implica la trasformazione degli attributi in modo che abbiano una media pari a zero e una deviazione standard pari a uno. Viene anche spiegata la binarizzazione, che limita i dati per creare attributi binari o valori nitidi. Viene sottolineata l'importanza della selezione delle funzionalità, poiché funzionalità irrilevanti o parzialmente irrilevanti possono influire negativamente sulle prestazioni del modello. Il video introduce la selezione univariata come un approccio statistico alla selezione delle caratteristiche e mette in evidenza l'uso dell'eliminazione ricorsiva delle caratteristiche e dei metodi di importanza delle caratteristiche che utilizzano insiemi di alberi decisionali come foreste casuali o alberi extra. L'analisi delle componenti principali (PCA) è anche discussa come una tecnica di riduzione dei dati che può comprimere il set di dati in un numero minore di dimensioni utilizzando l'algebra lineare.
Il video sottolinea l'importanza dei metodi di ricampionamento per valutare le prestazioni degli algoritmi di machine learning su dati invisibili. Mette in guardia contro la valutazione di algoritmi sullo stesso set di dati utilizzato per l'addestramento, in quanto può portare a overfitting e scarsa generalizzazione a nuovi dati. Tecniche come gli split set di train-test, la convalida incrociata k-fold, la convalida incrociata tralasciata e le ripetute suddivisioni casuali dei test vengono spiegate come modi per ottenere stime affidabili delle prestazioni dell'algoritmo. Il video si conclude con una discussione di varie metriche delle prestazioni per gli algoritmi di machine learning, come l'accuratezza della classificazione, la perdita logaritmica, l'area sotto la curva, la matrice di confusione e il rapporto di classificazione.
Il video approfondisce le metriche delle prestazioni utilizzate per valutare le previsioni fatte dai modelli di machine learning. Copre l'accuratezza della classificazione, la perdita logaritmica (per valutare le probabilità), l'area sotto la curva delle caratteristiche operative del ricevitore (ROC) (per problemi di classificazione binaria), la matrice di confusione (per valutare l'accuratezza del modello con più classi) e il rapporto di classificazione (che fornisce precisione , richiamo, punteggio F1 e supporto per ogni classe). Inoltre, il video spiega tre metriche di regressione comuni: errore assoluto medio, errore quadratico medio e R-quadrato. Vengono dimostrati esempi pratici per illustrare come calcolare queste metriche usando Python.
Il relatore introduce il concetto di controllo a campione per determinare quali algoritmi di apprendimento automatico funzionano bene per un problema specifico. Il controllo a campione comporta la valutazione di più algoritmi e il confronto delle loro prestazioni. Il video mostra il controllo puntuale di sei diversi modelli di machine learning, inclusi algoritmi lineari e non lineari, utilizzando Python con la libreria scikit-learn. Il relatore sottolinea che i risultati possono variare a causa della natura stocastica dei modelli. La sezione si conclude con un'introduzione ai modelli di machine learning di regressione, preparando gli spettatori per la prossima sezione sul controllo a campione di tali modelli.
Successivamente, il relatore introduce modelli di machine learning lineari e non lineari utilizzando come esempio il set di dati sui prezzi delle case di Boston. Viene utilizzato un test harness con convalida incrociata di 10 volte per dimostrare come controllare ogni modello e l'errore quadratico medio viene utilizzato come indicatore di prestazione (invertito a causa di una stranezza nella funzione di punteggio incrociato). Viene discusso il modello di regressione lineare, assumendo una distribuzione gaussiana per le variabili di input e la loro rilevanza per la variabile di output. Viene anche spiegata la regressione della cresta, una modifica della regressione lineare che minimizza la complessità del modello. Il relatore sottolinea l'importanza di comprendere la pipeline o il processo piuttosto che rimanere coinvolti nell'implementazione del codice specifico in questa fase.
Il video esplora il processo di comprensione e visualizzazione delle variabili di input per un problema di machine learning. Suggerisce di utilizzare grafici univariati come grafici a scatola e baffi e istogrammi per comprendere la distribuzione delle variabili di input. Per l'analisi multivariata, i grafici a dispersione possono aiutare a identificare le relazioni strutturali tra le variabili di input e rivelare correlazioni elevate tra coppie di attributi specifici. Il video illustra anche il processo di valutazione, utilizzando un test harness con convalida incrociata 10 volte per valutare le prestazioni del modello. Viene sottolineata l'importanza di creare un set di dati di convalida per valutare in modo indipendente l'accuratezza del modello migliore. Vengono valutati sei diversi modelli di machine learning e viene selezionato quello più accurato per fare previsioni. Il rapporto di classificazione, la matrice di confusione e la stima dell'accuratezza vengono utilizzati per valutare le previsioni. Infine, il video tocca la regressione di regolarizzazione, evidenziando la costruzione di modelli Lasso ed Elastic Net per ridurre la complessità dei modelli di regressione.
Il video introduce un problema di classificazione binaria nell'apprendimento automatico, con l'obiettivo di prevedere il metallo dal rock utilizzando il set di dati Sonar Mines versus Rocks. Il set di dati contiene 208 istanze con 61 attributi, incluso l'attributo class. Le statistiche descrittive vengono analizzate, indicando che sebbene i dati siano nello stesso intervallo, mezzi diversi suggeriscono che la standardizzazione dei dati potrebbe essere vantaggiosa. Le visualizzazioni di dati unimodali e multimodali, come istogrammi, grafici di densità e visualizzazioni di correlazione, vengono esplorate per ottenere informazioni dettagliate sui dati. Viene creato un set di dati di convalida e viene stabilita una linea di base per le prestazioni del modello testando vari modelli, tra cui regressione lineare, regressione logistica, analisi discriminante lineare, alberi di regressione di classificazione, macchine vettoriali di supporto (SVM), Bayes ingenuo e k-vicini più vicini ( KNN). L'accuratezza di ciascun algoritmo viene calcolata utilizzando la convalida incrociata 10 volte e confrontata.
Nel segmento seguente, il video illustra come valutare diversi algoritmi di machine learning utilizzando dati e messa a punto standardizzati. La standardizzazione comporta la trasformazione dei dati, quindi ogni attributo ha una media di 0 e una deviazione standard di 1, che può migliorare le prestazioni di determinati modelli. Per evitare perdite di dati durante il processo di trasformazione, si consiglia una pipeline che standardizzi i dati e crei il modello per ogni ripiegamento del cablaggio di test di convalida incrociata. Il video illustra le tecniche di ottimizzazione per k-nearest neighbors (KNN) e Support Vector Machines (SVM) utilizzando una griglia di ricerca con convalida incrociata di 10 volte sulla copia standardizzata del set di dati di addestramento. Vengono identificate le configurazioni ottimali per KNN e SVM e viene valutata l'accuratezza dei modelli. Infine, il video discute brevemente KNN, regressione dell'albero delle decisioni e SVM come modelli di machine learning non lineari.
Statistiche applicate per ingegneri di Machine Learning
Statistiche applicate per ingegneri di Machine Learning
L'istruttore nel video introduce il campo della statistica e ne evidenzia l'importanza nel lavorare con problemi di modellazione predittiva nell'apprendimento automatico. Spiegano che la statistica offre una gamma di tecniche, a partire da semplici statistiche riassuntive fino a test di ipotesi e statistiche di stima. Il corso è progettato per fornire una base passo dopo passo nei metodi statistici, con esempi pratici in Python. Copre sei aspetti fondamentali delle statistiche per l'apprendimento automatico e si concentra sulle applicazioni del mondo reale, rendendolo adatto agli ingegneri dell'apprendimento automatico.
L'istruttore sottolinea la stretta relazione tra apprendimento automatico e statistica e suggerisce che i programmatori possono trarre vantaggio dal miglioramento delle proprie capacità statistiche attraverso questo corso. Classificano il campo della statistica in due categorie: statistica descrittiva e statistica inferenziale. Le statistiche descrittive implicano il riepilogo e la descrizione dei dati utilizzando misurazioni come medie e rappresentazioni grafiche. Le statistiche inferenziali, d'altra parte, vengono utilizzate per fare inferenze su una popolazione più ampia sulla base di dati campione.
Viene inoltre evidenziata l'importanza di un corretto trattamento dei dati, compresa la gestione della perdita, del danneggiamento e degli errori dei dati. Il video approfondisce quindi i vari passaggi coinvolti nella preparazione dei dati per i modelli di machine learning. Ciò include la pulizia dei dati, la selezione dei dati, il campionamento dei dati e la trasformazione dei dati utilizzando metodi statistici come la standardizzazione e la normalizzazione. Viene anche enfatizzata la valutazione dei dati e il video discute la progettazione sperimentale, il ricampionamento dei dati e la selezione del modello per stimare l'abilità di un modello. Per prevedere nuovi dati, il video consiglia di utilizzare le statistiche di stima.
Il video spiega le diverse scale di misurazione utilizzate nelle statistiche, vale a dire scale nominali, ordinali, di intervallo e di rapporto. Discute le tecniche statistiche applicabili a ciascuna scala e come possono essere implementate nell'apprendimento automatico. Viene sottolineata l'importanza di comprendere e segnalare l'incertezza nella modellazione, soprattutto quando si lavora con set di campioni. Il video si concentra quindi sulla distribuzione normale, che è comunemente osservata in vari set di dati. Dimostra come generare dati di esempio e valutarne visivamente l'adattamento a una distribuzione gaussiana utilizzando un istogramma. Sebbene la maggior parte dei set di dati non abbia una distribuzione gaussiana perfetta, spesso presentano proprietà simili a quelle gaussiane.
Viene evidenziata l'importanza di selezionare un modo granulare di suddividere i dati per esporre la distribuzione gaussiana sottostante. Vengono esplorate le misure di tendenza centrale, come la media e la mediana, insieme alla varianza e alla deviazione standard come misure della diffusione della distribuzione. La casualità è discussa come uno strumento essenziale nell'apprendimento automatico, aiutando gli algoritmi a diventare più robusti e accurati. Vengono spiegate varie fonti di casualità, inclusi errori di dati e rumore.
Il video spiega che gli algoritmi di machine learning spesso sfruttano la casualità per ottenere prestazioni migliori e generare modelli più ottimali. La casualità consente agli algoritmi di esplorare diverse possibilità e trovare migliori mappature dei dati. Vengono discusse le fonti di casualità controllabili e incontrollabili e viene spiegato l'uso della funzione seme per rendere la casualità coerente all'interno di un modello. Il video fornisce un esempio utilizzando il modulo casuale Python per la generazione di numeri casuali ed evidenzia la differenza tra il generatore di numeri pseudocasuali della libreria numpy e il generatore di numeri pseudocasuali della libreria standard. Vengono anche discussi due casi su quando eseguire il seeding del generatore di numeri casuali, vale a dire durante la preparazione dei dati e le suddivisioni dei dati.
Vengono enfatizzati la suddivisione coerente dei dati e l'utilizzo di generatori di numeri pseudocasuali durante la valutazione di un algoritmo. Il video consiglia di valutare il modello in modo da incorporare l'incertezza misurata e le prestazioni dell'algoritmo. La valutazione di un algoritmo su più suddivisioni dei dati fornisce informazioni su come le sue prestazioni variano con diversi dati di addestramento e test. La valutazione di un algoritmo più volte sulle stesse suddivisioni di dati aiuta a capire come le sue prestazioni variano da sole. Il video introduce anche la legge dei grandi numeri e il teorema del limite centrale, evidenziando che avere più dati migliora le prestazioni del modello e che all'aumentare della dimensione del campione, la distribuzione della media si avvicina a una distribuzione gaussiana.
Il video dimostra il teorema del limite centrale usando i tiri dei dadi e il codice, mostrando come le medie del campione approssimano una distribuzione gaussiana all'aumentare della dimensione del campione.
Il video sottolinea l'importanza di valutare i modelli di apprendimento automatico e comprendere l'incertezza implicita nelle loro previsioni. Introduce metriche di valutazione come accuratezza, precisione, richiamo e punteggio F1, comunemente utilizzate per valutare le prestazioni dei modelli di classificazione. Il video spiega che l'accuratezza misura la correttezza complessiva delle previsioni, la precisione misura la proporzione di vere previsioni positive su tutte le previsioni positive, il ricordo misura la proporzione di vere previsioni positive su tutte le istanze effettivamente positive e il punteggio F1 combina precisione e richiamo in un'unica metrica. Discute anche il concetto di matrice di confusione, che fornisce una visione più dettagliata delle prestazioni di un modello di classificazione mostrando il numero di previsioni vero positivo, vero negativo, falso positivo e falso negativo.
Il relatore dimostra come calcolare queste metriche di valutazione utilizzando la libreria scikit-learn di Python. Mostra come importare i moduli necessari, suddividere i dati in set di addestramento e test, addestrare un modello di classificazione, fare previsioni sul set di test e valutare le prestazioni del modello utilizzando accuratezza, precisione, richiamo e punteggio F1. Il video evidenzia l'importanza di valutare i modelli su dati invisibili per garantirne le capacità di generalizzazione.
Inoltre, il video introduce il concetto di curve caratteristiche operative del ricevitore (ROC) e area sotto la curva (AUC) come metriche di valutazione per i modelli di classificazione binaria. Le curve ROC tracciano il tasso di veri positivi rispetto al tasso di falsi positivi a varie soglie di classificazione, fornendo una rappresentazione visiva delle prestazioni del modello attraverso diversi valori di soglia. L'AUC rappresenta l'area sotto la curva ROC e fornisce un'unica metrica per confrontare le prestazioni di diversi modelli. Il video spiega come tracciare una curva ROC e calcolare l'AUC utilizzando la libreria scikit-learn di Python.
Il concetto di overfitting viene discusso come un problema comune nell'apprendimento automatico, in cui un modello funziona bene sui dati di addestramento ma non riesce a generalizzare a nuovi dati invisibili. Il video spiega che l'overfitting si verifica quando un modello diventa troppo complesso e apprende schemi specifici per i dati di addestramento che non sono validi nella popolazione generale. Il video mostra come visualizzare l'overfitting confrontando le prestazioni di addestramento e test di un modello. Spiega che un modello overfit avrà un errore di addestramento basso ma un errore di test elevato, indicando una scarsa generalizzazione. Il video suggerisce tecniche di regolarizzazione come la regressione della cresta e la regressione del lazo come modi per mitigare l'overfitting aggiungendo un termine di penalità alla funzione obiettivo del modello.
Viene introdotto il concetto di convalida incrociata come tecnica per valutare le prestazioni e la generalizzazione dei modelli di machine learning. Il video spiega che la convalida incrociata comporta la suddivisione dei dati in più sottoinsiemi, l'addestramento del modello su una parte dei dati e la valutazione delle sue prestazioni sulla parte rimanente. Questo processo viene ripetuto più volte, con diversi sottoinsiemi utilizzati per l'addestramento e il test, e viene calcolata la media dei risultati per fornire una stima delle prestazioni del modello. Il video mostra come eseguire la convalida incrociata utilizzando la libreria scikit-learn di Python, in particolare il metodo di convalida incrociata K-fold.
Successivamente, il video discute il concetto di selezione delle funzionalità e l'importanza nell'apprendimento automatico. Spiega che la selezione delle funzionalità implica l'identificazione delle funzionalità o delle variabili più rilevanti che contribuiscono alle prestazioni del modello. Il video evidenzia l'importanza di selezionare caratteristiche informative per migliorare l'accuratezza del modello, ridurre l'overfitting e migliorare l'interpretabilità. Introduce diverse tecniche di selezione delle caratteristiche, come la selezione univariata, l'eliminazione ricorsiva delle caratteristiche e i punteggi di importanza delle caratteristiche. Il video mostra come implementare la selezione delle funzionalità utilizzando la libreria scikit-learn di Python.
Il concetto di riduzione della dimensionalità è anche discusso come tecnica per affrontare la maledizione della dimensionalità nell'apprendimento automatico. Il video spiega che la riduzione della dimensionalità comporta la riduzione del numero di caratteristiche o variabili in un set di dati preservando la maggior parte delle informazioni rilevanti. Introduce l'analisi delle componenti principali (PCA) come tecnica di riduzione della dimensionalità comunemente usata. PCA mira a trasformare i dati in uno spazio dimensionale inferiore identificando le direzioni di massima varianza nei dati. Il video spiega che PCA crea nuove funzionalità, chiamate componenti principali, che sono combinazioni lineari delle funzionalità originali. Questi componenti principali acquisiscono le informazioni più importanti nei dati e possono essere utilizzati come input per i modelli di machine learning.
Il video mostra come eseguire PCA utilizzando la libreria scikit-learn di Python. Mostra come importare i moduli necessari, standardizzare i dati, inizializzare un oggetto PCA, adattare il modello PCA ai dati e trasformare i dati nello spazio dimensionale inferiore. Il video spiega anche come determinare il numero ottimale di componenti principali da conservare in base al rapporto di varianza spiegato.
Viene introdotto il concetto di ensemble learning come tecnica per migliorare le prestazioni dei modelli di machine learning combinando più modelli individuali. Il video spiega che l'apprendimento d'insieme sfrutta la saggezza delle folle, in cui ogni singolo modello contribuisce con le proprie previsioni e la previsione finale viene determinata sulla base di un meccanismo di voto o di media. Il video discute due popolari metodi di apprendimento dell'ensemble: bagging e boosting. Il bagging comporta l'addestramento di più modelli su diversi sottoinsiemi di dati e l'aggregazione delle loro previsioni, mentre il potenziamento si concentra sui modelli di addestramento in sequenza, con ogni modello che dà maggiore importanza alle istanze che sono state classificate erroneamente dai modelli precedenti.
Il video mostra come implementare l'apprendimento dell'ensemble utilizzando la libreria scikit-learn di Python. Mostra come importare i moduli necessari per il bagging e il boosting, inizializzare i modelli di ensemble, adattarli ai dati e fare previsioni utilizzando i modelli di ensemble. Il video sottolinea che l'apprendimento d'insieme può spesso migliorare le prestazioni complessive e la robustezza dei modelli di machine learning.
Infine, il video tocca brevemente argomenti avanzati nel machine learning, come il deep learning e l'elaborazione del linguaggio naturale (NLP). Menziona che il deep learning implica l'addestramento di reti neurali profonde con più livelli per apprendere schemi complessi nei dati. La PNL si concentra sullo sviluppo di modelli e tecniche per comprendere ed elaborare il linguaggio umano, abilitando applicazioni come la classificazione del testo, l'analisi del sentimento e la traduzione automatica. Il video si conclude evidenziando che il machine learning è un campo vasto e in rapida evoluzione con numerose applicazioni e opportunità di ulteriore esplorazione e apprendimento.
Il video offre una panoramica completa dei concetti e delle tecniche essenziali nell'apprendimento automatico, tra cui la valutazione del modello, l'overfitting, la regolarizzazione, la convalida incrociata, la selezione delle funzionalità, la riduzione della dimensionalità, l'apprendimento d'insieme e un'introduzione al deep learning e alla PNL. Dimostra implementazioni pratiche utilizzando Python e la libreria scikit-learn, rendendolo una risorsa preziosa per i principianti e coloro che desiderano migliorare la loro comprensione dell'apprendimento automatico.
Algebra lineare applicata per ingegneri di Machine Learning
Algebra lineare applicata per ingegneri di Machine Learning
Il video sottolinea l'importanza dell'apprendimento dell'algebra lineare per gli ingegneri dell'apprendimento automatico, in quanto funge da elemento fondamentale per la comprensione del calcolo e della statistica, che sono essenziali nell'apprendimento automatico. Avere una comprensione più profonda dell'algebra lineare fornisce ai professionisti una migliore intuizione di come funzionano i metodi di apprendimento automatico, consentendo loro di personalizzare gli algoritmi e svilupparne di nuovi.
Il corso adotta un approccio top-down per insegnare le basi dell'algebra lineare, utilizzando esempi concreti e strutture dati per dimostrare operazioni su matrici e vettori. L'algebra lineare è descritta come la matematica delle matrici e dei vettori, che fornisce un linguaggio per la manipolazione dei dati e consente la creazione di nuove colonne o matrici di numeri attraverso operazioni su queste strutture di dati. Inizialmente sviluppata alla fine del 1800 per risolvere sistemi di equazioni lineari, l'algebra lineare è diventata un prerequisito fondamentale per comprendere l'apprendimento automatico.
Il relatore introduce il concetto di algebra lineare numerica, che implica l'applicazione dell'algebra lineare nei computer. Ciò include l'implementazione di operazioni di algebra lineare e l'affrontare le sfide che sorgono quando si lavora con una precisione in virgola mobile limitata nei computer digitali. L'algebra lineare numerica svolge un ruolo cruciale nell'apprendimento automatico, in particolare negli algoritmi di apprendimento profondo che si basano fortemente su unità di elaborazione grafica (GPU) per eseguire calcoli di algebra lineare in modo efficiente. Varie librerie di algebra lineare numerica open source, con librerie basate su Fortran come base, sono comunemente utilizzate per calcolare operazioni di algebra lineare, spesso in combinazione con linguaggi di programmazione come Python.
Viene evidenziato il significato dell'algebra lineare nella statistica, in particolare nell'analisi statistica multivariata, nell'analisi delle componenti principali e nella risoluzione di problemi di regressione lineare. Il video menziona anche l'ampia gamma di applicazioni dell'algebra lineare in campi come l'elaborazione dei segnali, la computer grafica e persino la fisica, con esempi come la teoria della relatività di Albert Einstein che utilizza tensori e calcolo tensoriale, un tipo di algebra lineare.
Il video esplora ulteriormente l'applicazione pratica dell'algebra lineare nelle attività di machine learning. Introduce il concetto di utilizzo di operazioni di algebra lineare, come ritaglio, ridimensionamento e taglio, per manipolare le immagini, dimostrando come la notazione e le operazioni di algebra lineare possono essere impiegate in questo contesto. Inoltre, il video spiega la popolare tecnica di codifica chiamata codifica one-hot per variabili categoriche. Viene introdotta la struttura dati principale utilizzata nell'apprendimento automatico, array N-dimensionali o array ND, con la libreria NumPy in Python discussa come un potente strumento per creare e manipolare questi array. Il video copre funzioni importanti, come v-stack e stacking orizzontale, che consentono la creazione di nuovi array da array esistenti.
Viene spiegato come manipolare e accedere ai dati negli array NumPy, comunemente usati per rappresentare i dati di machine learning. Il video mostra come convertire elenchi unidimensionali in array utilizzando la funzione array e creare array di dati bidimensionali utilizzando elenchi di elenchi. Copre anche le operazioni di indicizzazione e sezionamento negli array NumPy, incluso l'uso dell'operatore due punti per il sezionamento e l'indicizzazione negativa. Viene evidenziata l'importanza dell'affettamento nello specificare le variabili di input e output nell'apprendimento automatico.
Le tecniche per lavorare con set di dati multidimensionali nell'apprendimento automatico sono discusse nel video. Inizia con l'affettatura unidimensionale e passa all'affettatura bidimensionale, oltre a separare i dati in valori di input e output per l'addestramento e il test. Viene trattato il rimodellamento dell'array, spiegando come rimodellare gli array unidimensionali in array bidimensionali con una colonna e trasformare i dati bidimensionali in array tridimensionali per algoritmi che richiedono più campioni di una o più fasi temporali e caratteristiche. Viene introdotto il concetto di array broadcasting, che consente di utilizzare array con dimensioni diverse nelle operazioni aritmetiche, consentendo l'elaborazione efficace di set di dati con dimensioni variabili.
Il video tocca anche i limiti dell'aritmetica degli array in NumPy, in particolare che le operazioni aritmetiche possono essere eseguite solo su array con le stesse dimensioni e dimensioni con le stesse dimensioni. Tuttavia, questa limitazione è superata dalla funzione di trasmissione integrata di NumPy, che replica l'array più piccolo lungo l'ultima dimensione non corrispondente, consentendo l'aritmetica tra array con forme e dimensioni diverse. Il video fornisce tre esempi di trasmissione, tra cui array scalari e unidimensionali, scalare in un array bidimensionale e array unidimensionale in un array bidimensionale. Si noti che la trasmissione segue una regola rigida, affermando che l'aritmetica può essere eseguita solo quando la forma di ciascuna dimensione negli array è uguale o uno di essi ha una dimensione di uno.
Proseguendo, il relatore introduce il concetto di vettori, che sono tuple di uno o più valori chiamati scalari. I vettori sono spesso rappresentati utilizzando caratteri minuscoli come "v" e possono essere visti come punti o coordinate in uno spazio n-dimensionale, dove "n" rappresenta il numero di dimensioni. Viene spiegata la creazione di vettori come array NumPy in Python. Il video copre anche le operazioni aritmetiche vettoriali, come l'addizione e la sottrazione di vettori, che vengono eseguite in base agli elementi per vettori di uguale lunghezza, risultando in un nuovo vettore della stessa lunghezza. Inoltre, il relatore spiega come i vettori possono essere moltiplicati per gli scalari per ridimensionare la loro grandezza e dimostra come eseguire queste operazioni utilizzando gli array NumPy in Python. Viene anche discusso il prodotto scalare di due vettori, che produce uno scalare e può essere utilizzato per calcolare la somma ponderata di un vettore.
L'attenzione si sposta quindi sulle norme vettoriali e sulla loro importanza nell'apprendimento automatico. Le norme vettoriali si riferiscono alla dimensione o alla lunghezza di un vettore e sono calcolate utilizzando una misura che riassume la distanza del vettore dall'origine dello spazio vettoriale. Si sottolinea che le norme vettoriali sono sempre positive, ad eccezione di un vettore di tutti i valori zero. Il video introduce quattro calcoli di norme vettoriali comuni utilizzati nell'apprendimento automatico. Inizia con la norma del vettore L1, seguita dalla norma L2 (norma euclidea) e dalla norma max. La sezione definisce anche le matrici e spiega come manipolarle in Python. Viene discussa l'aritmetica delle matrici, inclusa la moltiplicazione matrice-matrice (prodotto scalare), la moltiplicazione matrice-vettore e la moltiplicazione scalare. Una matrice è descritta come un array bidimensionale di scalari con una o più colonne e una o più righe, tipicamente rappresentate da lettere maiuscole come "A".
Successivamente, viene introdotto il concetto di operazioni con matrici per l'apprendimento automatico. Ciò include la moltiplicazione di matrici, la divisione di matrici e la moltiplicazione scalare di matrici. La moltiplicazione di matrici, nota anche come prodotto scalare di matrici, richiede che il numero di colonne nella prima matrice sia uguale al numero di righe nella seconda matrice. Il video menziona che la funzione punto in NumPy può essere utilizzata per implementare questa operazione. Viene anche spiegato il concetto di trasposizione della matrice, in cui viene creata una nuova matrice invertendo il numero di righe e colonne della matrice originale. Infine, viene discusso il processo di inversione della matrice, che comporta la ricerca di un'altra matrice che, moltiplicata con la matrice originale, risulta in una matrice identità.
Continuando dalla discussione sull'inversione della matrice, il video esplora ulteriormente questo concetto. L'inversione di una matrice è indicata da un apice 1 negativo accanto alla matrice. Il video spiega che l'inversione di matrici comporta la ricerca di metodi numerici efficienti. Viene introdotta l'operazione trace di una matrice quadrata, che calcola la somma degli elementi diagonali e può essere calcolata utilizzando la funzione trace in NumPy. Il determinante di una matrice quadrata è definito come una rappresentazione scalare del volume della matrice e può anche essere calcolato utilizzando la funzione det in NumPy. Viene brevemente menzionato il rango di una matrice, che stima il numero di righe o colonne linearmente indipendenti nella matrice ed è comunemente calcolato utilizzando la decomposizione del valore singolare. Infine, viene spiegato il concetto di matrici sparse, evidenziando che esse contengono prevalentemente valori zero e possono essere computazionalmente costose da rappresentare e lavorare.
Il video approfondisce quindi le matrici sparse, che sono matrici composte principalmente da valori zero e differiscono dalle matrici dense che hanno per lo più valori diversi da zero. La scarsità viene quantificata calcolando il punteggio di scarsità, che è il numero di valori zero diviso per il numero totale di elementi nella matrice. Il video sottolinea due problemi principali associati alla scarsità: la complessità dello spazio e la complessità del tempo. Si noti che rappresentare e lavorare con matrici sparse può essere computazionalmente costoso.
Per affrontare queste sfide, il video menziona che Scipy fornisce strumenti per creare e manipolare matrici sparse. Inoltre, evidenzia che molte funzioni di algebra lineare in NumPy e Scipy possono operare su matrici sparse, consentendo calcoli e operazioni efficienti su dati sparsi.
Le matrici sparse sono comunemente utilizzate nell'apprendimento automatico applicato per l'osservazione dei dati e la preparazione dei dati. La loro scarsità consente un'archiviazione e un'elaborazione più efficienti di set di dati di grandi dimensioni con un numero significativo di valori zero. Sfruttando la struttura di scarsità, gli algoritmi di machine learning possono beneficiare di un ridotto utilizzo della memoria e di calcoli più veloci.
Andando avanti, il video discute diversi tipi di matrici comunemente usate nell'algebra lineare, in particolare quelle rilevanti per l'apprendimento automatico. Vengono introdotte le matrici quadrate, dove il numero di righe è uguale al numero di colonne. Vengono anche menzionate matrici rettangolari, che hanno un numero diverso di righe e colonne. Il video spiega la diagonale principale di una matrice quadrata, che consiste di elementi con gli stessi indici di riga e colonna. Viene trattato anche l'ordine di una matrice quadrata, definito come il numero di righe o colonne.
Inoltre, il video introduce le matrici simmetriche, che sono matrici quadrate uguali alla loro trasposizione. Vengono spiegate le matrici triangolari, comprese le matrici triangolari superiori e inferiori. Vengono discusse anche le matrici diagonali, in cui tutti gli elementi non diagonali sono zero. Le matrici di identità, che sono matrici quadrate con uno sulla diagonale principale e zeri altrove, sono spiegate nel contesto del loro ruolo di identità moltiplicative. Vengono anche introdotte le matrici ortogonali, formate quando due vettori hanno un prodotto scalare uguale a zero.
Il video procede discutendo matrici e tensori ortogonali. Una matrice ortogonale è un tipo specifico di matrice quadrata in cui le colonne e le righe sono vettori unitari ortogonali. Queste matrici sono computazionalmente efficienti e stabili per il calcolo della loro inversa, rendendole utili in varie applicazioni, inclusi i modelli di deep learning. Il video menziona inoltre che in TensorFlow i tensori sono una struttura dati fondamentale e una generalizzazione di vettori e matrici. I tensori sono rappresentati come array multidimensionali e possono essere manipolati in Python utilizzando array n-dimensionali, simili alle matrici. Il video evidenzia che le operazioni tensoriali basate sugli elementi, come l'addizione e la sottrazione, possono essere eseguite su tensori, matrici e vettori, fornendo un'intuizione per dimensioni superiori.
Successivamente, il video introduce la decomposizione della matrice, che è un metodo per scomporre una matrice nelle sue parti costituenti. La decomposizione delle matrici semplifica le complesse operazioni matriciali e consente calcoli efficienti. Vengono trattate due tecniche di decomposizione di matrici ampiamente utilizzate: la decomposizione LU (Lower-Upper) per matrici quadrate e la decomposizione QR (QR-factorization) per matrici rettangolari.
La decomposizione LU può semplificare le equazioni lineari nel contesto di problemi di regressione lineare e facilitare calcoli come determinante e inversa di una matrice. La decomposizione QR ha applicazioni nella risoluzione di sistemi di equazioni lineari. Entrambi i metodi di decomposizione possono essere implementati utilizzando le funzioni integrate nel pacchetto NumPy in Python, fornendo soluzioni efficienti e affidabili per vari problemi di algebra lineare.
Inoltre, il video discute la decomposizione di Cholesky, utilizzata specificamente per matrici simmetriche e definite positive. La decomposizione di Cholesky è rappresentata da una matrice triangolare inferiore ed è considerata quasi due volte più efficiente della decomposizione LU per la decomposizione di matrici simmetriche.
Il video menziona brevemente che i metodi di decomposizione della matrice, inclusa la decomposizione Eigen, sono impiegati per semplificare operazioni complesse. La decomposizione Eigen decompone una matrice nei suoi autovettori e autovalori. Gli autovettori sono coefficienti che rappresentano le direzioni, mentre gli autovalori sono scalari. Sia gli autovettori che gli autovalori hanno applicazioni pratiche, come la riduzione della dimensionalità e l'esecuzione di complesse operazioni con matrici.
Infine, il video tocca il concetto di decomposizione del valore singolare (SVD) e le sue applicazioni nell'apprendimento automatico. SVD viene utilizzato in varie operazioni di matrice e metodi di riduzione dei dati nell'apprendimento automatico. Svolge un ruolo cruciale nei calcoli come la regressione lineare dei minimi quadrati, la compressione delle immagini e i dati di denoising.
Il video spiega che SVD consente di scomporre una matrice in tre matrici separate: U, Σ e V. La matrice U contiene i vettori singolari di sinistra, Σ è una matrice diagonale contenente i valori singolari e V contiene i vettori singolari di destra. Ricostruendo la matrice originale da questi componenti, si può ottenere un'approssimazione dei dati originali riducendone la dimensionalità.
Una delle principali applicazioni di SVD è la riduzione della dimensionalità. Selezionando un sottoinsieme dei valori singolari più significativi e dei corrispondenti vettori singolari, è possibile rappresentare i dati in uno spazio dimensionale inferiore senza perdere informazioni cruciali. Questa tecnica è particolarmente utile nei casi in cui i dati hanno un'elevata dimensionalità, poiché consente una memorizzazione e un calcolo più efficienti.
Il video evidenzia che SVD è stato applicato con successo nell'elaborazione del linguaggio naturale utilizzando una tecnica chiamata analisi semantica latente (LSA) o indicizzazione semantica latente (LSI). Rappresentando i documenti di testo come matrici ed eseguendo SVD, LSA può catturare la struttura semantica sottostante dei documenti, consentendo attività come la somiglianza dei documenti e la modellazione degli argomenti.
Inoltre, il video introduce la classe SVD troncata, che implementa direttamente la capacità di ridurre la dimensionalità di una matrice. Con l'SVD troncato, diventa possibile trasformare la matrice originale in una rappresentazione a dimensione inferiore preservando le informazioni più importanti. Questa tecnica è particolarmente vantaggiosa quando si ha a che fare con set di dati di grandi dimensioni, in quanto consente un'elaborazione e un'analisi più efficienti.
In sintesi, il video ha trattato vari argomenti relativi all'algebra lineare per l'apprendimento automatico. Ha sottolineato l'importanza dell'apprendimento dell'algebra lineare come elemento fondamentale per comprendere il calcolo e la statistica nel contesto dell'apprendimento automatico. Il video ha discusso le applicazioni dell'algebra lineare nell'apprendimento automatico, come la personalizzazione e lo sviluppo di algoritmi, l'algebra lineare numerica, l'analisi statistica e vari altri campi come l'elaborazione del segnale e la computer grafica.
Inoltre, il video ha esplorato i concetti chiave dell'algebra lineare, inclusi vettori, matrici, operazioni con matrici, norme vettoriali, tecniche di decomposizione di matrici e matrici sparse. Ha spiegato come questi concetti vengono utilizzati nell'apprendimento automatico e ha fornito approfondimenti sulle loro applicazioni pratiche.
Comprendendo l'algebra lineare, i professionisti del machine learning possono acquisire un'intuizione più profonda dei fondamenti matematici alla base degli algoritmi di machine learning e applicarli efficacemente ai problemi del mondo reale. L'algebra lineare funge da potente strumento per la manipolazione dei dati, la riduzione della dimensionalità e l'ottimizzazione, consentendo soluzioni di machine learning efficienti ed efficaci.
Un'introduzione completa a XGBoost per ingegneri di Machine Learning
Un'introduzione completa a XGBoost per ingegneri di Machine Learning
Nel video, l'istruttore fornisce un'introduzione completa a XGBoost per gli ingegneri del machine learning. Spiegano che XGBoost è una libreria di apprendimento automatico open source nota per la sua capacità di creare rapidamente modelli di classificazione e regressione estremamente accurati. Ha guadagnato popolarità come scelta migliore per la creazione di modelli del mondo reale, in particolare quando si tratta di set di dati altamente strutturati. XGBoost è stato creato da Taiki Chen e si basa sulla tecnica degli alberi decisionali del gradient boost, che consente la costruzione di modelli in modo rapido ed efficiente.
L'istruttore sottolinea che XGBoost supporta più interfacce, incluse le implementazioni Python e scikit-learn. Procedono a dare una dimostrazione di XGBoost, mostrando vari moduli per il caricamento dei dati e la costruzione di modelli.
Il video si concentra quindi sulla preparazione del set di dati per l'addestramento di un modello XGBoost. L'istruttore sottolinea l'importanza di separare i dati in set di addestramento e test. Identificano la variabile target come un problema di classificazione binaria e spiegano il processo di impostazione degli iperparametri necessari per il modello XGBoost. Una volta addestrato il modello sui dati di addestramento, ne valutano l'accuratezza sui dati di test utilizzando il punteggio di accuratezza come metrica.
Per fornire una migliore comprensione di XGBoost, l'istruttore approfondisce il concetto di potenziamento del gradiente e il suo ruolo nella categoria più ampia dei tradizionali modelli di apprendimento automatico. Spiegano che il gradient boosting è una tecnica che combina un modello debole con altri modelli dello stesso tipo per creare un modello più accurato. In questo processo, ogni albero successivo viene costruito per i residui di predizione dell'albero precedente. L'istruttore sottolinea che gli alberi decisionali vengono utilizzati nel potenziamento del gradiente, in quanto forniscono una rappresentazione grafica delle possibili soluzioni decisionali basate su determinate condizioni. Dicono anche che la progettazione di un albero decisionale richiede un processo di pensiero ben documentato per identificare efficacemente le potenziali soluzioni.
Il video esplora ulteriormente la creazione di alberi decisionali binari utilizzando la divisione binaria ricorsiva. Questo processo comporta la valutazione di tutte le variabili di input e dei punti di divisione in modo avido per ridurre al minimo una funzione di costo che misura la prossimità dei valori previsti ai valori effettivi. L'istruttore spiega che viene scelta la suddivisione con il costo più basso e che i gruppi risultanti possono essere ulteriormente suddivisi in modo ricorsivo. Sottolineano che l'algoritmo utilizzato è avido, poiché si concentra sul prendere la decisione migliore in ogni fase. Tuttavia, è preferibile disporre di alberi decisionali con meno suddivisioni per garantire una migliore comprensibilità e ridurre il rischio di overfitting dei dati. L'istruttore sottolinea che XGBoost fornisce meccanismi per prevenire l'overfitting, come la limitazione della profondità massima di ciascun albero e la potatura dei rami irrilevanti. Inoltre, trattano la codifica delle etichette e dimostrano il caricamento del set di dati dell'iride utilizzando scikit-learn.
Andando avanti, il video copre il processo di codifica dell'etichetta di destinazione come variabile numerica utilizzando il metodo del codificatore di etichette. Dopo aver suddiviso i dati in set di dati di addestramento e test, l'istruttore definisce e addestra il classificatore XGBoost sui dati di addestramento. Quindi utilizzano il modello addestrato per fare previsioni sul set di dati di test, ottenendo un'accuratezza del 90%. Il concetto di apprendimento dell'insieme viene introdotto come metodo per combinare più modelli per migliorare l'accuratezza della previsione, migliorando in ultima analisi l'efficienza dell'algoritmo di apprendimento. L'istruttore sottolinea l'importanza di selezionare il modello giusto per i problemi di classificazione o regressione per ottenere risultati ottimali.
Il video approfondisce il concetto di bias e varianza nei modelli di machine learning e sottolinea la necessità di un equilibrio tra i due. L'apprendimento d'insieme è presentato come una tecnica per affrontare questo equilibrio combinando gruppi di studenti deboli per creare modelli più complessi. Vengono introdotte due tecniche di ensemble, bagging e boosting. Il bagging mira a ridurre la varianza creando sottoinsiemi di dati per addestrare alberi decisionali e creare un insieme di modelli con alta varianza e bassa distorsione. Il potenziamento, d'altra parte, comporta l'apprendimento sequenziale di modelli con alberi decisionali, consentendo la correzione degli errori commessi dai modelli precedenti. L'istruttore sottolinea che il gradient boosting è un tipo specifico di boosting che ottimizza una funzione di perdita differenziabile utilizzando studenti deboli sotto forma di alberi di regressione.
Il video spiega in dettaglio il concetto di potenziamento del gradiente, delineandone il processo in tre fasi. Il primo passo prevede l'aggiunta iterativa di studenti deboli (ad esempio, alberi decisionali) per ridurre al minimo le perdite. Il secondo passaggio è l'aggiunta sequenziale di alberi e il passaggio finale si concentra sulla riduzione dell'errore del modello attraverso ulteriori iterazioni. Per dimostrare il processo, il video mostra l'uso della convalida incrociata k-fold per segmentare i dati. Tramite XGBoost si ottengono i punteggi per ogni piega. L'istruttore sceglie gli alberi decisionali come studenti deboli, garantendo una profondità ridotta per evitare l'overfitting. Infine, una funzione di perdita è definita come una misura di quanto bene il modello di apprendimento automatico si adatta ai dati.
Vengono spiegati i passaggi fondamentali del potenziamento del gradiente, che includono l'ottimizzazione della funzione di perdita, l'utilizzo di studenti deboli (spesso alberi decisionali) e la combinazione di più studenti deboli in modo additivo attraverso l'apprendimento d'insieme. Il video copre anche gli aspetti pratici dell'utilizzo di XGBoost, come la gestione dei valori mancanti, il salvataggio dei modelli su disco e l'utilizzo dell'arresto anticipato. Vengono fornite dimostrazioni utilizzando il codice Python per illustrare vari casi d'uso di XGBoost. Inoltre, il video sottolinea l'importanza della pulizia dei dati, comprese le tecniche per la gestione dei valori mancanti, come l'attribuzione del valore medio.
L'oratore discute l'importanza di pulire correttamente i dati piuttosto che affidarsi esclusivamente agli algoritmi per svolgere il lavoro. Dimostrano come l'eliminazione di valori vuoti può migliorare l'accuratezza del modello e mettere in guardia contro gli algoritmi che gestiscono valori vuoti. Il concetto di pickling, che prevede il salvataggio su disco di modelli addestrati per un uso successivo, viene introdotto utilizzando la libreria pickle in Python. Il relatore mostra come salvare e caricare i modelli. Mostrano anche come tracciare l'importanza di ciascun attributo in un set di dati utilizzando la funzione di importanza del grafico in XGBoost e la libreria matplotlib.
Il relatore discute l'importanza di analizzare e testare diversi scenari durante la creazione di modelli di machine learning, sottolineando che i punteggi di importanza delle funzionalità di XGBoost potrebbero non riflettere sempre l'impatto effettivo di una funzionalità sull'accuratezza del modello. Usano l'esempio del set di dati Titanic per dimostrare come l'aggiunta dell'attributo "sesso" migliori l'accuratezza del modello, nonostante siano classificati in basso nei punteggi di importanza delle caratteristiche. Il relatore sottolinea l'importanza di testare vari scenari e non basarsi esclusivamente sui punteggi di importanza delle funzionalità. Menzionano anche che XGBoost può valutare e segnalare le prestazioni di un set di test durante l'allenamento.
Il video spiega come monitorare le prestazioni di un modello XGBoost durante l'addestramento specificando una metrica di valutazione e passando un array di coppie x e y. Le prestazioni del modello su ogni set di valutazione vengono archiviate e rese disponibili dopo l'addestramento. Il video copre le curve di apprendimento, che forniscono informazioni sul comportamento del modello e aiutano a prevenire l'overfitting interrompendo l'apprendimento in anticipo. L'interruzione anticipata viene introdotta come tecnica per interrompere l'addestramento dopo un numero fisso di epoche se non si osserva alcun miglioramento nel punteggio di convalida.
Il video copre l'uso dei turni di arresto anticipato in XGBoost e dimostra la costruzione di un modello di regressione per valutare i prezzi delle case a Boston. Vengono discussi i vantaggi del parallelismo nel potenziamento del gradiente, concentrandosi sulla costruzione di singoli alberi e sulla preparazione efficiente dei dati di input. Il video fornisce una dimostrazione del supporto multithreading, che utilizza tutti i core del sistema per eseguire calcoli simultaneamente, con conseguente esecuzione più rapida del programma. Sebbene XGBoost sia principalmente orientato ai problemi di classificazione, il video evidenzia la sua capacità di eccellere anche nella creazione di modelli di regressione.
Il relatore crea un elenco per contenere il numero di iterazioni per un esempio e utilizza un ciclo for per testare la velocità di esecuzione del modello in base al numero di thread. Stampano la velocità della build per ogni iterazione e tracciano i risultati, mostrando come la velocità del modello diminuisce all'aumentare del numero di thread. Il relatore discute quindi l'ottimizzazione degli iperparametri, che comporta la regolazione dei parametri in un modello per migliorarne le prestazioni. Esplorano i parametri predefiniti per XGBoost e scikit-learn e menzionano che l'ottimizzazione degli iperparametri è essenziale per ottimizzare le prestazioni di un modello XGBoost. Il video spiega che gli iperparametri sono impostazioni che non vengono apprese dai dati ma vengono impostate manualmente dall'utente. L'ottimizzazione degli iperparametri comporta la ricerca sistematica della migliore combinazione di valori dei parametri che determinano le massime prestazioni del modello.
Per eseguire l'ottimizzazione degli iperparametri, il video introduce due approcci comuni: la ricerca su griglia e la ricerca casuale. La ricerca della griglia implica la definizione di una griglia di valori di iperparametri e la valutazione esaustiva di ogni combinazione. La ricerca casuale, d'altra parte, campiona casualmente le combinazioni di iperparametri da uno spazio di ricerca predefinito. Il video consiglia di utilizzare la ricerca casuale quando lo spazio di ricerca è ampio o il numero di iperparametri è elevato.
Il video mostra l'ottimizzazione degli iperparametri utilizzando la classe RandomizedSearchCV di scikit-learn. Definiscono una griglia di parametri contenente valori diversi per iperparametri come velocità di apprendimento, profondità massima e rapporto del sottocampione. La classe RandomizedSearchCV esegue una ricerca casuale con convalida incrociata, valutando le prestazioni di ogni combinazione di parametri. Dopo l'ottimizzazione, vengono selezionati i migliori iperparametri e il modello viene addestrato con questi valori ottimali.
Il relatore spiega che l'ottimizzazione degli iperparametri aiuta a trovare il miglior compromesso tra underfitting e overfitting. È importante trovare un equilibrio ed evitare l'overfitting selezionando attentamente gli iperparametri in base al set di dati specifico e al problema in questione.
Oltre all'ottimizzazione degli iperparametri, il video illustra l'importanza delle funzionalità nei modelli XGBoost. L'importanza delle funzionalità fornisce informazioni su quali funzionalità hanno l'impatto più significativo sulle previsioni del modello. Il relatore spiega che l'importanza della caratteristica è determinata dal guadagno medio, che misura il miglioramento della funzione di perdita apportata da una caratteristica quando viene utilizzata in un albero decisionale. Un guadagno medio più alto indica una maggiore importanza.
Il video mostra come estrarre e visualizzare l'importanza delle funzionalità utilizzando la libreria XGBoost. Tracciano un grafico a barre che mostra le caratteristiche principali e i punteggi di importanza corrispondenti. Il relatore osserva che l'importanza delle caratteristiche può aiutare nella selezione delle caratteristiche, nella riduzione della dimensionalità e nell'ottenere informazioni sul problema sottostante.
Verso la fine del video, il relatore menziona brevemente altri argomenti avanzati relativi a XGBoost. Toccano la gestione di set di dati sbilanciati regolando l'iperparametro scale_pos_weight, gestendo i valori mancanti utilizzando la funzionalità integrata di XGBoost e gestendo le variabili categoriali attraverso la codifica one-hot o utilizzando il supporto integrato per le funzionalità categoriche in XGBoost.
Il video fornisce una panoramica completa di XGBoost, coprendo i concetti chiave, l'implementazione, l'ottimizzazione degli iperparametri e l'analisi dell'importanza delle funzionalità. Le dimostrazioni e gli esempi di codice aiutano a illustrare gli aspetti pratici del lavoro con XGBoost in Python. Serve come risorsa preziosa per gli ingegneri di machine learning che desiderano utilizzare XGBoost per le loro attività di classificazione e regressione.
Case study di ingegneria delle funzionalità in Python per ingegneri di machine learning
Case study di ingegneria delle funzionalità in Python per ingegneri di machine learning
L'istruttore inizia il corso introducendo il concetto di feature engineering e il suo ruolo cruciale nell'estrarre valore dalla grande quantità di dati generati ogni giorno. Sottolineano l'importanza dell'ingegneria delle funzionalità per massimizzare il valore estratto da dati disordinati. Si presume che gli studenti abbiano una conoscenza di base di Python, insieme all'esperienza nell'uso di NumPy, Pandas e Scikit-Learn.
L'istruttore sottolinea l'importanza dell'analisi esplorativa dei dati e della pulizia dei dati nel processo di costruzione di un modello di apprendimento automatico. Spiegano che queste fasi saranno l'obiettivo principale del corso. Mentre gli studenti esamineranno l'intera pipeline nel capitolo finale, l'enfasi principale sarà sull'ingegneria delle funzionalità.
L'istruttore sottolinea che l'ingegnerizzazione delle funzionalità è essenziale per migliorare le prestazioni del modello. Spiegano che l'ingegneria delle funzionalità implica la conversione dei dati grezzi in funzionalità che rappresentano meglio il segnale sottostante per i modelli di apprendimento automatico. La qualità delle funzionalità ha un impatto diretto sulle prestazioni del modello, poiché buone funzionalità possono rendere potenti anche modelli semplici. L'istruttore consiglia di usare il buon senso quando si selezionano le caratteristiche, rimuovendo quelle irrilevanti e includendo i fattori rilevanti per il problema in analisi.
Nel video sono trattate varie tecniche per la pulizia e le caratteristiche ingegneristiche. I valori anomali vengono rimossi, i dati vengono normalizzati e trasformati per affrontare l'asimmetria, le funzionalità vengono combinate per crearne di più utili e le variabili categoriali vengono create da quelle continue. Queste tecniche mirano a ottenere funzionalità che catturino accuratamente le tendenze importanti nei dati scartando le informazioni irrilevanti. Il set di dati Titanic viene introdotto come esempio, contenente informazioni sui passeggeri a bordo della nave.
L'istruttore discute il problema dello squilibrio di classe nell'apprendimento automatico, in cui i casi positivi sono significativamente inferiori rispetto ai casi negativi. Suggeriscono di regolare il modello per rilevare meglio il segnale in entrambi i casi, ad esempio attraverso il downsampling della classe negativa. Tuttavia, poiché il set di dati utilizzato nell'esempio non è fortemente sbilanciato, l'istruttore procede con l'esplorazione delle caratteristiche dei dati. L'analisi dei dati esplorativi di base viene condotta su caratteristiche continue e le caratteristiche non numeriche come nome, biglietto, sesso, cabina e imbarco vengono eliminate. Viene visualizzato il set di dati pulito e vengono esaminate la distribuzione e la correlazione delle caratteristiche. Si scopre che le caratteristiche "p-class" e "tariffa" mostrano la più forte correlazione con la colonna di sopravvivenza, indicando la loro potenziale utilità nel fare previsioni.
Ulteriori analisi esplorative dei dati vengono condotte sulle caratteristiche continue. Le caratteristiche non numeriche come nome e ticket vengono eliminate e vengono stampate le prime cinque righe del set di dati. I dati vengono descritti utilizzando le funzioni panda, rivelando i valori mancanti e una variabile target binaria chiamata "Sopravvissuto". La matrice di correlazione viene analizzata per determinare le correlazioni tra le caratteristiche e la loro relazione con "Sopravvissuto". Viene sottolineata l'importanza di esaminare l'intera distribuzione dei dati, poiché basarsi esclusivamente su valori medi o mediani può portare a conclusioni imprecise. I grafici e le visualizzazioni vengono utilizzati per esplorare la relazione tra le caratteristiche categoriche e il tasso di sopravvivenza, scoprendo tendenze come tassi di sopravvivenza più elevati tra i passeggeri di prima classe e quelli con meno membri della famiglia.
L'istruttore sottolinea l'importanza dell'ingegneria delle caratteristiche e sconsiglia di condensare eccessivamente le caratteristiche senza un test adeguato. Discutono il processo di esplorazione e progettazione delle funzionalità categoriche, inclusa l'identificazione dei valori mancanti e il numero di valori univoci in ciascuna funzionalità. Il raggruppamento delle caratteristiche e l'analisi del valore medio per la variabile target in ciascun gruppo è suggerito come approccio utile per una migliore comprensione del set di dati. Viene esplorata la relazione tra la caratteristica della cabina mancante e il tasso di sopravvivenza, portando alla scoperta di un forte indicatore del tasso di sopravvivenza nonostante il valore apparentemente basso della caratteristica.
L'esplorazione delle caratteristiche rivela che i titoli, gli indicatori di cabina e il sesso hanno una forte correlazione con la sopravvivenza, mentre la caratteristica imbarcata è ridondante. La relazione tra cabina e tasso di sopravvivenza è spiegata dall'osservazione che più persone imbarcate a Cherbourg avevano cabine, con un conseguente tasso di sopravvivenza più elevato. Il numero di parenti stretti a bordo è combinato in un'unica funzione e viene suggerita la classe del passeggero o la tariffa a causa della loro correlazione.
L'istruttore spiega che il passaggio successivo consiste nell'ingegnerizzare le funzionalità in base alle informazioni acquisite dall'analisi esplorativa dei dati. Iniziano creando una nuova funzione chiamata "Titolo" dalla funzione "Nome". La funzione "Titolo" estrae il titolo dal nome di ciascun passeggero (ad es. Sig., Sig.ra, Sig.na) in quanto può fornire informazioni aggiuntive relative allo stato sociale e al tasso di sopravvivenza. La funzione "Titolo" viene quindi mappata a valori numerici per semplicità.
Successivamente, l'istruttore si concentra sulla funzione "Cabina", che inizialmente aveva molti valori mancanti. Tuttavia, analizzando il tasso di sopravvivenza dei passeggeri con e senza informazioni sulla cabina, si è scoperto che avere un numero di cabina registrato aveva un tasso di sopravvivenza più elevato. Sulla base di questa intuizione, viene creata una nuova funzione binaria chiamata "HasCabin" per indicare se un passeggero ha o meno una cabina registrata.
Andando avanti, l'istruttore affronta la funzione "Sesso". Poiché i modelli di machine learning in genere funzionano meglio con i dati numerici, la funzione "Sesso" è mappata su valori binari, con 0 che rappresenta il maschio e 1 che rappresenta la femmina.
Dopo aver progettato la funzione "Sesso", l'istruttore affronta la funzione "Imbarcato", che indica il porto di imbarco (C = Cherbourg, Q = Queenstown, S = Southampton). Tuttavia, è stato stabilito in precedenza che la funzione "Imbarcato" è ridondante e non contribuisce in modo significativo alla previsione della sopravvivenza. Pertanto, viene eliminato dal set di dati.
L'istruttore si concentra quindi sulle caratteristiche "Pclass" e "Fare", che hanno mostrato forti correlazioni con la sopravvivenza durante l'analisi esplorativa dei dati. Queste funzionalità vengono lasciate così come sono poiché sono già in un formato adatto al modello di machine learning.
In questa fase, l'istruttore sottolinea l'importanza della preelaborazione dei dati e della preparazione delle caratteristiche per il modello. Il set di dati è suddiviso in set di addestramento e test per valutare accuratamente le prestazioni del modello. I valori mancanti nella funzione "Età" vengono imputati utilizzando l'età media dei passeggeri e tutte le funzioni sono standardizzate per avere media zero e varianza unitaria utilizzando le funzioni di pre-elaborazione di Scikit-Learn.
Infine, l'istruttore discute brevemente il concetto di codifica one-hot per le caratteristiche categoriche e menziona che verrà trattato in modo più dettagliato nel prossimo video. La codifica one-hot è una tecnica comune utilizzata per rappresentare le variabili categoriali come vettori binari, consentendo al modello di interpretarle correttamente.
Per riassumere, in questa parte del corso, l'istruttore ha introdotto il concetto di feature engineering e ne ha spiegato il significato nell'apprendimento automatico. Hanno condotto analisi esplorative dei dati, ripulito il set di dati e progettato funzionalità basate sulle informazioni acquisite. L'istruttore ha dimostrato come creare nuove funzionalità, mappare le funzionalità categoriche a valori numerici e rimuovere le funzionalità ridondanti. I passaggi successivi hanno comportato la preelaborazione dei dati e la preparazione delle funzionalità per il modello di machine learning.
Si prega di notare che il riepilogo di cui sopra è un'ipotetica continuazione basata sugli argomenti generali generalmente trattati in un corso di ingegneria delle funzionalità. Il contenuto effettivo e gli esempi possono variare a seconda del corso specifico e dell'istruttore.