In questo curriculum, inizierai a scoprire come il machine learning può influenzare e sta influenzando la nostra vita quotidiana. Anche ora, sistemi e modelli sono coinvolti in attività decisionali quotidiane, come diagnosi sanitarie, approvazioni di prestiti o rilevamento di frodi. È quindi importante che questi modelli funzionino bene per fornire risultati affidabili. Come qualsiasi applicazione software, i sistemi di AI possono non soddisfare le aspettative o avere risultati indesiderati. Per questo motivo, è essenziale essere in grado di comprendere e spiegare il comportamento di un modello di AI.
In questo corso inizierai a scoprire come il machine learning può e sta influenzando la nostra vita quotidiana. Anche adesso, sistemi e modelli sono coinvolti in attività decisionali quotidiane, come diagnosi mediche, approvazioni di prestiti o rilevamento di frodi. Quindi è importante che questi modelli funzionino bene per fornire risultati affidabili. Come per qualsiasi applicazione software, i sistemi di AI possono non soddisfare le aspettative o avere esiti indesiderati. Per questo motivo è essenziale essere in grado di comprendere e spiegare il comportamento di un modello AI.
Immagina cosa può accadere quando i dati utilizzati per costruire questi modelli mancano di determinate demografie, come razza, genere, opinioni politiche, religione, o rappresentano in modo sproporzionato tali demografie. E se l'output del modello fosse interpretato in modo da favorire alcune demografie? Quali sarebbero le conseguenze per l'applicazione? Inoltre, cosa succede quando il modello ha un risultato negativo e danneggia le persone? Chi è responsabile del comportamento dei sistemi di AI? Queste sono alcune delle domande che esploreremo in questo curriculum.
Immagina cosa può accadere quando i dati che usi per costruire questi modelli mancano di determinate demografie, come razza, genere, opinione politica, religione, o rappresentano in modo sproporzionato tali demografie. Cosa succede quando l’output del modello è interpretato per favorire una certa demografia? Qual è la conseguenza per l’applicazione? Inoltre, cosa accade quando il modello produce un risultato avverso dannoso per le persone? Chi è responsabile del comportamento del sistema AI? Queste sono alcune delle domande che esploreremo in questo corso.
In questa lezione, imparerai a:
In questa lezione imparerai a:
- Aumentare la consapevolezza sull'importanza dell'equità nel machine learning e sui danni correlati all'equità.
- Familiarizzare con la pratica di esplorare outlier e scenari insoliti per garantire affidabilità e sicurezza.
- Comprendere la necessità di progettare sistemi inclusivi per potenziare tutti.
- Familiarizzare con la pratica di esplorare gli outlier e scenari insoliti per garantire affidabilità e sicurezza.
- Acquisire comprensione della necessità di dare potere a tutti progettando sistemi inclusivi.
- Esplorare quanto sia vitale proteggere la privacy e la sicurezza dei dati e delle persone.
- Riconoscere l'importanza di un approccio trasparente per spiegare il comportamento dei modelli di AI.
- Vedere l'importanza di un approccio "scatola trasparente" per spiegare il comportamento dei modelli di AI.
- Essere consapevoli di come la responsabilità sia essenziale per costruire fiducia nei sistemi di AI.
## Prerequisiti
## Prerequisito
Come prerequisito, segui il percorso di apprendimento "Principi di AI responsabile" e guarda il video qui sotto sull'argomento:
Come prerequisito, svolgi il Percorso di apprendimento "Principi di AI responsabile" e guarda il video qui sotto sull'argomento:
Scopri di più sull'AI responsabile seguendo questo [Percorso di apprendimento](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
@ -32,112 +32,116 @@ Scopri di più sull'AI responsabile seguendo questo [Percorso di apprendimento](
## Equità
I sistemi di AI dovrebbero trattare tutti equamente ed evitare di influenzare gruppi simili di persone in modi diversi. Ad esempio, quando i sistemi di AI forniscono indicazioni su trattamenti medici, richieste di prestiti o occupazione, dovrebbero fare le stesse raccomandazioni a tutti con sintomi, circostanze finanziarie o qualifiche professionali simili. Ognuno di noi, come esseri umani, porta con sé bias ereditati che influenzano le nostre decisioni e azioni. Questi bias possono essere evidenti nei dati che utilizziamo per addestrare i sistemi di AI. Tali manipolazioni possono talvolta accadere involontariamente. Spesso è difficile sapere consapevolmente quando si sta introducendo un bias nei dati.
I sistemi AI dovrebbero trattare tutti in modo equo ed evitare di colpire gruppi simili di persone in modi diversi. Per esempio, quando i sistemi AI forniscono indicazioni su trattamenti medici, domande di prestito o impiego, dovrebbero fare le stesse raccomandazioni a tutti coloro che presentano sintomi simili, condizioni finanziarie o qualifiche professionali. Ognuno di noi come umano porta con sé bias ereditati che influenzano decisioni e azioni. Questi bias possono essere evidenti nei dati usati per addestrare i sistemi AI. Tale manipolazione può a volte avvenire involontariamente. È spesso difficile sapere consapevolmente quando si introduce un bias nei dati.
**“Ingiustizia”** comprende impatti negativi, o “danni”, per un gruppo di persone, come quelli definiti in termini di razza, genere, età o stato di disabilità. I principali danni correlati all'equità possono essere classificati come:
**"Disparità"** comprende impatti negativi, o "danni", per un gruppo di persone definito in termini di razza, genere, età o stato di disabilità. I principali danni legati all'equità possono essere classificati come:
- **Allocazione**, se un genere o un'etnia, ad esempio, è favorito rispetto a un altro.
- **Qualità del servizio**. Se i dati sono addestrati per uno scenario specifico ma la realtà è molto più complessa, si ottiene un servizio di scarsa qualità. Ad esempio, un dispenser di sapone che non riesce a rilevare persone con pelle scura. [Riferimento](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Denigrazione**. Criticare ingiustamente e etichettare qualcosa o qualcuno. Ad esempio, una tecnologia di etichettatura delle immagini ha etichettato erroneamente immagini di persone con pelle scura come gorilla.
- **Sovra- o sotto-rappresentazione**. L'idea che un certo gruppo non sia visibile in una certa professione, e qualsiasi servizio o funzione che continui a promuovere ciò contribuisce al danno.
- **Stereotipizzazione**. Associare un determinato gruppo a attributi preassegnati. Ad esempio, un sistema di traduzione tra inglese e turco potrebbe avere imprecisioni dovute a parole con associazioni stereotipate di genere.
- **Allocazione**, se per esempio un genere o un'etnia viene favorito rispetto a un altro.
- **Qualità del servizio**. Se addestri i dati per uno scenario specifico ma la realtà è più complessa, il servizio può risultare inefficace. Ad esempio, un distributore di sapone che sembra incapace di riconoscere persone con la pelle scura. [Riferimento](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Denigrazione**. Criticare etichettare ingiustamente qualcosa o qualcuno. Ad esempio, una tecnologia di etichettatura delle immagini ha etichettato infamemente le immagini di persone dalla pelle scura come gorilla.
- **Sovra- o sotto-rappresentazione**. L'idea è che un certo gruppo non sia visto in una certa professione e qualsiasi servizio o funzione che continua a promuovere ciò contribuisce al danno.
- **Stereotipizzazione**. Associare a un dato gruppo attributi preassegnati. Per esempio, un sistema di traduzione linguistica tra inglese e turco può avere imprecisioni dovute a parole con associazioni stereotipate di genere.


> traduzione in turco

> traduzione di ritorno in inglese

> traduzione di nuovo in inglese
Quando progettiamo e testiamo sistemi di AI, dobbiamo garantire che l'AI sia equa e non programmata per prendere decisioni discriminatorie o di parte, che anche gli esseri umani sono proibiti dal prendere. Garantire l'equità nell'AI e nel machine learning rimane una sfida sociotecnica complessa.
Quando progetti e testi sistemi AI, dobbiamo assicurarci che l'AI sia equa e non programmata per prendere decisioni di parte o discriminatorie, decisioni che anche gli esseri umani sono proibiti di prendere. Garantire l'equità nell'AI e nel machine learning rimane una sfida sociotecnica complessa.
### Affidabilità e sicurezza
Per costruire fiducia, i sistemi di AI devono essere affidabili, sicuri e coerenti in condizioni normali e inattese. È importante sapere come i sistemi di AI si comporteranno in una varietà di situazioni, specialmente quando si tratta di outlier. Quando si costruiscono soluzioni di AI, è necessario concentrarsi in modo sostanziale su come gestire una vasta gamma di circostanze che le soluzioni di AI potrebbero incontrare. Ad esempio, un'auto a guida autonoma deve mettere la sicurezza delle persone come priorità assoluta. Di conseguenza, l'AI che alimenta l'auto deve considerare tutti gli scenari possibili che l'auto potrebbe incontrare, come notte, temporali o bufere di neve, bambini che attraversano la strada, animali domestici, lavori stradali, ecc. Quanto bene un sistema di AI può gestire una vasta gamma di condizioni in modo affidabile e sicuro riflette il livello di anticipazione che il data scientist o sviluppatore di AI ha considerato durante la progettazione o il test del sistema.
Per costruire fiducia, i sistemi AI devono essere affidabili, sicuri e coerenti in condizioni normali e impreviste. È importante sapere come i sistemi AI si comporteranno in varie situazioni, specialmente quando sono outlier. Nel costruire soluzioni AI, occorre concentrarsi molto su come affrontare una vasta gamma di circostanze che le soluzioni AI potrebbero incontrare. Per esempio, un'auto a guida autonoma deve mettere la sicurezza delle persone come massima priorità. Di conseguenza, l'AI che alimenta l'auto deve considerare tutti gli scenari possibili, come notte, temporali o bufere di neve, bambini che attraversano la strada, animali domestici, cantieri stradali ecc. Quanto bene un sistema AI riesce a gestire una vasta gamma di condizioni in modo affidabile e sicuro riflette il livello di anticipazione preso in considerazione dal data scientist o sviluppatore AI durante la progettazione o i test del sistema.
> [🎥 Clicca qui per un video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inclusività
I sistemi di AI dovrebbero essere progettati per coinvolgere e potenziare tutti. Quando progettano e implementano sistemi di AI, i data scientist e gli sviluppatori di AI identificano e affrontano potenziali barriere nel sistema che potrebbero escludere involontariamente le persone. Ad esempio, ci sono 1 miliardo di persone con disabilità in tutto il mondo. Con l'avanzamento dell'AI, possono accedere a una vasta gamma di informazioni e opportunità più facilmente nella loro vita quotidiana. Affrontando le barriere, si creano opportunità per innovare e sviluppare prodotti di AI con esperienze migliori che beneficiano tutti.
I sistemi AI dovrebbero essere progettati per coinvolgere e responsabilizzare tutti. Quando progettano e implementano sistemi AI, data scientist e sviluppatori AI identificano e affrontano barriere potenziali nel sistema che potrebbero escludere involontariamente le persone. Per esempio, ci sono 1 miliardo di persone con disabilità nel mondo. Con l'avanzamento dell'AI, possono accedere più facilmente a una vasta gamma di informazioni e opportunità nella vita quotidiana. Affrontando le barriere si creano opportunità per innovare e sviluppare prodotti AI con esperienze migliori che avvantaggiano tutti.
> [🎥 Clicca qui per un video: inclusività nell'AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Sicurezza e privacy
I sistemi di AI dovrebbero essere sicuri e rispettare la privacy delle persone. Le persone hanno meno fiducia nei sistemi che mettono a rischio la loro privacy, informazioni o vite. Quando si addestrano modelli di machine learning, ci affidiamo ai dati per ottenere i migliori risultati. Facendo ciò, l'origine dei dati e la loro integrità devono essere considerate. Ad esempio, i dati sono stati forniti dagli utenti o sono pubblicamente disponibili? Inoltre, mentre si lavora con i dati, è cruciale sviluppare sistemi di AI che possano proteggere informazioni riservate e resistere agli attacchi. Con l'aumento dell'uso dell'AI, proteggere la privacy e garantire la sicurezza delle informazioni personali e aziendali sta diventando sempre più critico e complesso. Le questioni di privacy e sicurezza dei dati richiedono particolare attenzione per l'AI, poiché l'accesso ai dati è essenziale affinché i sistemi di AI possano fare previsioni e decisioni accurate e informate sulle persone.
I sistemi AI dovrebbero essere sicuri e rispettare la privacy delle persone. Le persone hanno meno fiducia in sistemi che mettono a rischio la loro privacy, informazioni o vite. Nel addestrare modelli di machine learning, ci si affida ai dati per produrre i migliori risultati. In questo processo, bisogna considerare l’origine dei dati e l'integrità. Per esempio, i dati sono stati inviati dagli utenti o sono pubblicamente disponibili? Inoltre, durante il lavoro con i dati è fondamentale sviluppare sistemi AI in grado di proteggere informazioni riservate e resistere ad attacchi. Con la diffusione crescente dell'AI, proteggere la privacy e mettere in sicurezza informazioni personali e aziendali importanti diventa sempre più critico e complesso. Questioni di privacy e sicurezza dei dati richiedono particolare attenzione per l’AI poiché l’accesso ai dati è essenziale per i sistemi AI per fare previsioni e decisioni accurate e informate sulle persone.
> [🎥 Clicca qui per un video: sicurezza nell'AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Come industria, abbiamo fatto significativi progressi nella privacy e sicurezza, alimentati in modo significativo da regolamenti come il GDPR (Regolamento Generale sulla Protezione dei Dati).
- Tuttavia, con i sistemi di AI dobbiamo riconoscere la tensione tra la necessità di più dati personali per rendere i sistemi più personali ed efficaci – e la privacy.
- Proprio come con la nascita dei computer connessi a Internet, stiamo anche assistendo a un enorme aumento del numero di problemi di sicurezza legati all'AI.
- Allo stesso tempo, abbiamo visto l'AI essere utilizzata per migliorare la sicurezza. Ad esempio, la maggior parte degli scanner antivirus moderni è guidata da euristiche di AI.
- Dobbiamo garantire che i nostri processi di Data Science si armonizzino con le ultime pratiche di privacy e sicurezza.
- Come settore abbiamo fatto progressi significativi in Privacy e sicurezza, alimentati in gran parte da regolamenti come il GDPR (Regolamento Generale sulla Protezione dei Dati).
- Tuttavia, con i sistemi AI dobbiamo riconoscere la tensione tra la necessità di avere più dati personali per rendere i sistemi più personali ed efficaci – e la privacy.
- Proprio come con la nascita dei computer connessi a internet, stiamo assistendo anche a un forte aumento delle problematiche di sicurezza legate all'AI.
- Allo stesso tempo, abbiamo visto l’AI usata per migliorare la sicurezza. Ad esempio, la maggior parte degli scanner antivirus moderni oggi si basa su euristiche AI.
- Dobbiamo garantire che i nostri processi di Data Science si integrino armoniosamente con le più recenti pratiche di privacy e sicurezza.
### Trasparenza
I sistemi di AI dovrebbero essere comprensibili. Una parte cruciale della trasparenza è spiegare il comportamento dei sistemi di AI e dei loro componenti. Migliorare la comprensione dei sistemi di AI richiede che gli stakeholder comprendano come e perché funzionano, in modo che possano identificare potenziali problemi di prestazioni, preoccupazioni sulla sicurezza e privacy, bias, pratiche esclusive o risultati non intenzionali. Crediamo anche che coloro che utilizzano sistemi di AI dovrebbero essere onesti e trasparenti su quando, perché e come scelgono di implementarli, così come sui limiti dei sistemi che utilizzano. Ad esempio, se una banca utilizza un sistema di AI per supportare le sue decisioni di prestito ai consumatori, è importante esaminare i risultati e comprendere quali dati influenzano le raccomandazioni del sistema. I governi stanno iniziando a regolamentare l'AI in vari settori, quindi i data scientist e le organizzazioni devono spiegare se un sistema di AI soddisfa i requisiti normativi, specialmente quando c'è un risultato indesiderato.
### Trasparenza
I sistemi AI dovrebbero essere comprensibili. Una parte cruciale della trasparenza è spiegare il comportamento dei sistemi AI e dei loro componenti. Migliorare la comprensione dei sistemi AI richiede che gli stakeholder capiscano come e perché funzionano, per poter individuare problemi di prestazione, sicurezza e privacy, bias, pratiche escludenti o esiti imprevisti. Crediamo inoltre che chi usa sistemi AI dovrebbe essere onesto e trasparente su quando, perché e come sceglie di implementarli, nonché sui limiti dei sistemi utilizzati. Per esempio, se una banca utilizza un sistema AI per supportare le decisioni di prestito ai consumatori, è importante esaminare i risultati e capire quali dati influenzano le raccomandazioni del sistema. I governi stanno iniziando a regolamentare l'AI in tutti i settori, quindi data scientist e organizzazioni devono spiegare se un sistema AI soddisfa i requisiti normativi, soprattutto se si verifica un esito indesiderato.
> [🎥 Clicca qui per un video: trasparenza nell'AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Poiché i sistemi di AI sono così complessi, è difficile capire come funzionano e interpretare i risultati.
- Questa mancanza di comprensione influisce sul modo in cui questi sistemi vengono gestiti, operativizzati e documentati.
- Ancora più importante, questa mancanza di comprensione influisce sulle decisioni prese utilizzando i risultati prodotti da questi sistemi.
- Poiché i sistemi AI sono così complessi, è difficile capire come funzionano e interpretare i risultati.
- Questa mancanza di comprensione influisce sul modo in cui questi sistemi vengono gestiti, operazionalizzati e documentati.
- E ancora più importante, questa mancanza di comprensione influisce sulle decisioni prese utilizzando i risultati prodotti da questi sistemi.
### Responsabilità
Le persone che progettano e implementano sistemi di AI devono essere responsabili del modo in cui i loro sistemi operano. La necessità di responsabilità è particolarmente cruciale con tecnologie sensibili come il riconoscimento facciale. Recentemente, c'è stata una crescente domanda di tecnologia di riconoscimento facciale, soprattutto da parte delle organizzazioni di polizia che vedono il potenziale della tecnologia in usi come trovare bambini scomparsi. Tuttavia, queste tecnologie potrebbero essere utilizzate da un governo per mettere a rischio le libertà fondamentali dei cittadini, ad esempio, consentendo la sorveglianza continua di individui specifici. Pertanto, i data scientist e le organizzazioni devono essere responsabili dell'impatto dei loro sistemi di AI sugli individui o sulla società.
Le persone che progettano e implementano sistemi AI devono essere responsabili di come i loro sistemi operano. La necessità di responsabilità è particolarmente cruciale con tecnologie sensibili come il riconoscimento facciale. Recentemente, c'è stata una crescente domanda di tecnologia di riconoscimento facciale, soprattutto da parte delle forze dell'ordine che vedono il potenziale della tecnologia per usi come il ritrovamento di bambini scomparsi. Tuttavia, queste tecnologie potrebbero potenzialmente essere usate da un governo per mettere a rischio le libertà fondamentali dei cittadini, per esempio consentendo la sorveglianza continua di individui specifici. Pertanto, data scientist e organizzazioni devono essere responsabili di come il loro sistema AI impatta individui o la società.
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Approccio di Microsoft all'AI responsabile")
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Approccio di Microsoft all'AI responsabile")
> 🎥 Clicca l'immagine sopra per un video: Avvisi sulla sorveglianza di massa tramite riconoscimento facciale
> 🎥 Clicca sull'immagine sopra per un video: Avvertimenti sulla sorveglianza di massa attraverso il riconoscimento facciale
In definitiva, una delle grandi questioni per la nostra generazione, come prima generazione che porta l'AI alla società, è come garantire che i computer rimangano responsabili verso le persone e come assicurare che chi progetta i computer rimanga responsabile verso tutti gli altri.
Alla fine, una delle domande più grandi per la nostra generazione, come la prima generazione che sta portando l'AI nella società, è come garantire che i computer rimangano responsabili verso le persone e come garantire che le persone che progettano i computer rimangano responsabili verso tutti gli altri.
## Valutazione d'impatto
## Valutazione dell'impatto
Prima di addestrare un modello di machine learning, è importante condurre una valutazione d'impatto per comprendere lo scopo del sistema AI; qual è l'uso previsto; dove sarà distribuito; e chi interagirà con il sistema. Questi aspetti sono utili per i revisori o i tester che valutano il sistema per sapere quali fattori considerare quando identificano potenziali rischi e conseguenze attese.
Prima di addestrare un modello di machine learning, è importante condurre una valutazione dell'impatto per comprendere lo scopo del sistema di AI; quale sarà l'uso previsto; dove sarà implementato; e chi interagirà con il sistema. Questi aspetti sono utili per i revisori o i tester che valutano il sistema per sapere quali fattori considerare quando si identificano potenziali rischi e conseguenze attese.
Le seguenti sono aree di interesse quando si conduce una valutazione d'impatto:
Le seguenti sono aree di interesse quando si conduce una valutazione dell'impatto:
* **Impatto negativo sugli individui**. Essere consapevoli di qualsiasi restrizione o requisito, uso non supportato o limitazioni note che ostacolano la performance del sistema è vitale per assicurare che il sistema non venga usato in modo da causare danni agli individui.
* **Requisiti dei dati**. Capire come e dove il sistema utilizzerà i dati consente ai revisori di esplorare eventuali requisiti di dati di cui occorre essere consapevoli (es. regolamentazioni GDPR o HIPAA). Inoltre, esaminare se la sorgente o la quantità di dati è adeguata per l'addestramento.
* **Riepilogo dell'impatto**. Raccogliere una lista dei potenziali danni che potrebbero sorgere dall'uso del sistema. Durante il ciclo di vita del ML, verificare se le problematiche identificate sono mitigate o affrontate.
* **Obiettivi applicabili** per ciascuno dei sei principi fondamentali. Valutare se gli obiettivi di ciascun principio sono raggiunti e se ci sono lacune.
* **Impatto negativo sugli individui**. Essere consapevoli di eventuali restrizioni o requisiti, usi non supportati o limitazioni note che ostacolano le prestazioni del sistema è vitale per garantire che il sistema non venga utilizzato in modo da causare danni agli individui.
* **Requisiti dei dati**. Comprendere come e dove il sistema utilizzerà i dati consente ai revisori di esplorare eventuali requisiti di dati di cui essere consapevoli (ad esempio, regolamenti GDPR o HIPPA). Inoltre, esaminare se la fonte o la quantità di dati è sufficiente per l'addestramento.
* **Riepilogo dell'impatto**. Raccogliere un elenco di potenziali danni che potrebbero derivare dall'uso del sistema. Durante il ciclo di vita del ML, verificare se i problemi identificati sono mitigati o affrontati.
* **Obiettivi applicabili** per ciascuno dei sei principi fondamentali. Valutare se gli obiettivi di ciascun principio sono soddisfatti e se ci sono lacune.
## Debugging con AI responsabile
Simile al debugging di un'applicazione software, il debugging di un sistema di AI è un processo necessario per identificare e risolvere problemi nel sistema. Ci sono molti fattori che potrebbero influenzare un modello che non funziona come previsto o in modo responsabile. La maggior parte delle metriche tradizionali di prestazione del modello sono aggregati quantitativi delle prestazioni del modello, che non sono sufficienti per analizzare come un modello viola i principi di AI responsabile. Inoltre, un modello di machine learning è una scatola nera che rende difficile capire cosa guida il suo risultato o fornire spiegazioni quando commette un errore. Più avanti in questo corso, impareremo come utilizzare il dashboard di AI responsabile per aiutare a fare debugging dei sistemi di AI. Il dashboard fornisce uno strumento olistico per i data scientist e gli sviluppatori di AI per eseguire:
Simile al debugging di un’applicazione software, il debugging di un sistema AI è un processo necessario per identificare e risolvere problemi nel sistema. Ci sono molti fattori che potrebbero influire sul fatto che un modello non si comporti come previsto o responsabilmente. La maggior parte delle metriche tradizionali delle prestazioni del modello sono aggregati quantitativi delle prestazioni, insufficienti per analizzare come un modello viola i principi di AI responsabile. Inoltre, un modello di machine learning è una scatola nera che rende difficile comprendere cosa determina il suo risultato o fornire spiegazioni quando commette un errore. Più avanti in questo corso, impareremo a usare la dashboard Responsible AI per aiutare nel debugging dei sistemi AI. La dashboard fornisce uno strumento olistico per data scientist e sviluppatori AI per:
* **Analisi degli errori**. Per identificare la distribuzione degli errori del modello che possono influenzare l’equità o l’affidabilità del sistema.
* **Panoramica del modello**. Per scoprire dove ci sono disparità nelle prestazioni del modello tra i diversi gruppi di dati.
* **Analisi dei dati**. Per comprendere la distribuzione dei dati e identificare eventuali bias potenziali nei dati che potrebbero causare problemi di equità, inclusività e affidabilità.
* **Interpretabilità del modello**. Per capire cosa influisce o influenza le predizioni del modello. Questo aiuta a spiegare il comportamento del modello, importante per trasparenza e responsabilità.
* **Analisi degli errori**. Per identificare la distribuzione degli errori del modello che può influenzare l'equità o l'affidabilità del sistema.
* **Panoramica del modello**. Per scoprire dove ci sono disparità nelle prestazioni del modello tra i gruppi di dati.
* **Analisi dei dati**. Per comprendere la distribuzione dei dati e identificare eventuali bias nei dati che potrebbero portare a problemi di equità, inclusività e affidabilità.
* **Interpretabilità del modello**. Per comprendere cosa influenza o guida le previsioni del modello. Questo aiuta a spiegare il comportamento del modello, che è importante per la trasparenza e la responsabilità.
## 🚀 Sfida
Per prevenire l'introduzione di danni fin dall'inizio, dovremmo:
Per prevenire che i danni vengano introdotti fin dall'inizio, dovremmo:
- avere una diversità di background e prospettive tra le persone che lavorano sui sistemi
- investire in dataset che riflettano la diversità della nostra società
- sviluppare metodi migliori durante il ciclo di vita del machine learning per rilevare e correggere l'AI responsabile quando si verifica
- sviluppare metodi migliori durante tutto il ciclo di vita del machine learning per rilevare e correggere l'AI responsabile quando si verifica
Pensa a scenari reali in cui l'inaffidabilità di un modello è evidente nella costruzione e nell'uso del modello. Cos'altro dovremmo considerare?
Rifletti su scenari reali in cui l'affidabilità di un modello è evidente nella costruzione e nell'uso del modello. Cos'altro dovremmo considerare?
In questa lezione, hai appreso alcune basi dei concetti di equità e ingiustizia nel machine learning.
Guarda questo workshop per approfondire gli argomenti:
- Alla ricerca di un'IA responsabile: Portare i principi nella pratica con Besmira Nushi, Mehrnoosh Sameki e Amit Sharma
In questa lezione, hai appreso alcune nozioni di base sui concetti di equità e ingiustizia nel machine learning.
Guarda questo workshop per approfondire i temi:
- In the pursuit of responsible AI: Bringing principles to practice di Besmira Nushi, Mehrnoosh Sameki e Amit Sharma
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Un framework open-source per costruire un'IA responsabile")
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 Clicca sull'immagine sopra per un video: RAI Toolbox: Un framework open-source per costruire un'IA responsabile con Besmira Nushi, Mehrnoosh Sameki e Amit Sharma
> 🎥 Clicca sull'immagine sopra per un video: RAI Toolbox: An open-source framework for building responsible AI di Besmira Nushi, Mehrnoosh Sameki e Amit Sharma
Leggi anche:
Inoltre, leggi:
- Centro risorse RAI di Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
@ -147,7 +151,7 @@ RAI Toolbox:
- [Repository GitHub di Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)
Leggi gli strumenti di Azure Machine Learning per garantire l'equità:
Leggi degli strumenti di Azure Machine Learning per garantire l'equità:
@ -157,5 +161,7 @@ Leggi gli strumenti di Azure Machine Learning per garantire l'equità:
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
> ### [Questa lezione è disponibile in R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
> ### [Questa lezione è disponibile anche in R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Introduzione
In queste quattro lezioni, scoprirai come costruire modelli di regressione. Discuteremo a breve a cosa servono. Ma prima di fare qualsiasi cosa, assicurati di avere gli strumenti giusti per iniziare il processo!
In queste quattro lezioni scoprirai come costruire modelli di regressione. Discuteremo a breve a cosa servono. Ma prima di fare qualsiasi cosa, assicurati di avere gli strumenti giusti per iniziare il processo!
In questa lezione imparerai a:
- Configurare il tuo computer per attività di machine learning locale.
- Configurare il tuo computer per compiti di machine learning locale.
- Lavorare con Jupyter Notebooks.
- Usare Scikit-learn, incluso l’installazione.
- Esplorare la regressione lineare con un esercizio pratico.
## Installazioni e configurazioni
[](https://youtu.be/-DfeD2k2Kj0 "ML per principianti -Configura i tuoi strumenti per costruire modelli di Machine Learning")
> 🎥 Clicca sull'immagine sopra per un breve video su come configurare il tuo computer per il ML.
> 🎥 Clicca sull’immagine sopra per un breve video che mostra come configurare il computer per ML.
1. **Installa Python**. Assicurati che [Python](https://www.python.org/downloads/) sia installato sul tuo computer. Utilizzerai Python per molte attività di data science e machine learning. La maggior parte dei sistemi informatici include già un'installazione di Python. Sono disponibili utili [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) per semplificare la configurazione per alcuni utenti.
1. **Installa Python**. Assicurati che [Python](https://www.python.org/downloads/) sia installato sul tuo computer. Userai Python per molti compiti di data science e machine learning. La maggior parte dei sistemi informatici include già un’installazione di Python. Sono disponibili anche utili [Pacchetti di Codifica Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) per semplificare l’installazione ad alcuni utenti.
Alcuni utilizzi di Python richiedono una versione specifica del software, mentre altri ne richiedono una diversa. Per questo motivo, è utile lavorare all'interno di un [ambiente virtuale](https://docs.python.org/3/library/venv.html).
Alcuni usi di Python, tuttavia, richiedono una versione del software, mentre altri ne richiedono una diversa. Per questo motivo, è utile lavorare all’interno di un [ambiente virtuale](https://docs.python.org/3/library/venv.html).
2. **Installa Visual Studio Code**. Assicurati di avere Visual Studio Code installato sul tuo computer. Segui queste istruzioni per [installare Visual Studio Code](https://code.visualstudio.com/) per l'installazione di base. Utilizzerai Python in Visual Studio Code in questo corso, quindi potrebbe essere utile ripassare come [configurare Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) per lo sviluppo in Python.
2. **Installa Visual Studio Code**. Assicurati di aver installato Visual Studio Code sul tuo computer. Segui queste istruzioni per [installare Visual Studio Code](https://code.visualstudio.com/) per l’installazione di base. Userai Python in Visual Studio Code in questo corso, quindi potresti voler ripassare come [configurare Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) per lo sviluppo Python.
> Familiarizza con Python lavorando attraverso questa raccolta di [moduli Learn](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
> Abituati a Python lavorando con questa raccolta di [moduli di apprendimento](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [](https://youtu.be/yyQM70vi7V8 "Configura Python con Visual Studio Code")
>
> 🎥 Clicca sull'immagine sopra per un video: utilizzo di Python all'interno di VS Code.
> 🎥 Clicca sull’immagine sopra per un video: usare Python in VS Code.
3. **Installa Scikit-learn**, seguendo [queste istruzioni](https://scikit-learn.org/stable/install.html). Poiché è necessario utilizzare Python 3, si consiglia di utilizzare un ambiente virtuale. Nota che, se stai installando questa libreria su un Mac M1, ci sono istruzioni speciali nella pagina collegata sopra.
3. **Installa Scikit-learn**, seguendo [queste istruzioni](https://scikit-learn.org/stable/install.html). Dal momento che devi usare Python 3, è raccomandato lavorare in un ambiente virtuale. Nota che, se stai installando questa libreria su un Mac M1, ci sono istruzioni speciali sulla pagina collegata sopra.
4. **Installa Jupyter Notebook**. Dovrai [installare il pacchetto Jupyter](https://pypi.org/project/jupyter/).
1. **Installa Jupyter Notebook**. Dovrai [installare il pacchetto Jupyter](https://pypi.org/project/jupyter/).
## Il tuo ambiente di sviluppo ML
## Il tuo ambiente di lavoro ML
Utilizzerai **notebook** per sviluppare il tuo codice Python e creare modelli di machine learning. Questo tipo di file è uno strumento comune per i data scientist e può essere identificato dal suffisso o estensione `.ipynb`.
Userai **notebook** per sviluppare il tuo codice Python e creare modelli di machine learning. Questo tipo di file è uno strumento comune per i data scientist, e possono essere identificati dal loro suffisso o estensione `.ipynb`.
I notebook sono un ambiente interattivo che consente al programmatore di scrivere codice e aggiungere note e documentazione intorno al codice, il che è molto utile per progetti sperimentali o orientati alla ricerca.
I notebook sono un ambiente interattivo che permette allo sviluppatore sia di scrivere codice che di aggiungere note e documentazione attorno al codice, cosa molto utile per progetti sperimentali o orientati alla ricerca.
[](https://youtu.be/7E-jC8FLA2E "ML per principianti - Configura Jupyter Notebooks per iniziare a costruire modelli di regressione")
> 🎥 Clicca sull'immagine sopra per un breve video su questo esercizio.
> 🎥 Clicca sull’immagine sopra per un breve video che mostra questo esercizio.
### Esercizio - lavora con un notebook
@ -57,64 +57,65 @@ In questa cartella troverai il file _notebook.ipynb_.
1. Apri _notebook.ipynb_ in Visual Studio Code.
Un server Jupyter si avvierà con Python 3+. Troverai aree del notebook che possono essere `eseguite`, ovvero blocchi di codice. Puoi eseguire un blocco di codice selezionando l'icona che sembra un pulsante di riproduzione.
Partirà un server Jupyter con Python 3+ attivato. Troverai aree del notebook che possono essere `eseguite`, pezzi di codice. Puoi eseguire un blocco di codice selezionando l’icona che assomiglia a un pulsante di riproduzione.
2. Seleziona l'icona `md` e aggiungi un po' di markdown, con il seguente testo **# Benvenuto nel tuo notebook**.
1. Seleziona l’icona `md` e aggiungi un po’ di markdown, e il seguente testo **# Benvenuto nel tuo notebook**.
Successivamente, aggiungi del codice Python.
Poi, aggiungi del codice Python.
3. Scrivi**print('hello notebook')** nel blocco di codice.
4. Seleziona la freccia per eseguire il codice.
1. Digita**print('hello notebook')** nel blocco di codice.
1. Seleziona la freccia per eseguire il codice.
Dovresti vedere la dichiarazione stampata:
Vedrai la stampa della seguente dichiarazione:
```output
hello notebook
```


Puoi alternare il tuo codice con commenti per auto-documentare il notebook.
✅ Pensa per un momento a quanto sia diverso l'ambiente di lavoro di uno sviluppatore web rispetto a quello di un data scientist.
✅ Pensa per un minuto a quanto è diverso l’ambiente di lavoro di uno sviluppatore web rispetto a quello di un data scientist.
## Iniziare con Scikit-learn
## Partire con Scikit-learn
Ora che Python è configurato nel tuo ambiente locale e ti senti a tuo agio con i notebook Jupyter, familiarizziamo con Scikit-learn (si pronuncia `sci` come in `science`). Scikit-learn fornisce un'[API estesa](https://scikit-learn.org/stable/modules/classes.html#api-ref) per aiutarti a svolgere attività di ML.
Ora che Python è configurato nel tuo ambiente locale e hai confidenza con i Jupyter Notebooks, familiarizziamo con Scikit-learn (si pronuncia `sci` come `science`). Scikit-learn fornisce un [API estesa](https://scikit-learn.org/stable/modules/classes.html#api-ref) per aiutarti a svolgere compiti di ML.
Secondo il loro [sito web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn è una libreria open source di machine learning che supporta l'apprendimento supervisionato e non supervisionato. Fornisce anche vari strumenti per il fitting dei modelli, la pre-elaborazione dei dati, la selezione e la valutazione dei modelli, e molte altre utilità."
Secondo il loro [sito web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn è una libreria open source di machine learning che supporta l’apprendimento supervisionato e non supervisionato. Fornisce inoltre vari strumenti per il fitting dei modelli, preprocessing dei dati, selezione e valutazione dei modelli e molte altre utility."
In questo corso utilizzerai Scikit-learn e altri strumenti per costruire modelli di machine learning per svolgere quelle che chiamiamo attività di 'machine learning tradizionale'. Abbiamo deliberatamente evitato reti neurali e deep learning, poiché sono meglio trattati nel nostro prossimo curriculum 'AI per principianti'.
In questo corso, utilizzerai Scikit-learn ed altri strumenti per costruire modelli di machine learning per svolgere ciò che chiamiamo 'machine learning tradizionale'. Abbiamo volutamente evitato reti neurali e deep learning, che saranno meglio trattati nel nostro prossimo curriculum 'AI per Principianti'.
Scikit-learn rende semplice costruire modelli e valutarli per l'uso. Si concentra principalmente sull'utilizzo di dati numerici e contiene diversi dataset pronti per l'uso come strumenti di apprendimento. Include anche modelli pre-costruiti per gli studenti da provare. Esploriamo il processo di caricamento di dati preconfezionati e utilizziamo un estimatore per il primo modello di ML con Scikit-learn con alcuni dati di base.
Scikit-learn rende semplice costruire modelli e valutarli per l’uso. È principalmente incentrato sull’uso di dati numerici e contiene diversi dataset pronti all’uso come strumenti di apprendimento. Include anche modelli pre-costruiti per gli studenti da provare. Esploriamo il processo di caricamento di dati preconfezionati e l’uso di uno stimatore incorporato, il primo modello ML con Scikit-learn con dati di base.
## Esercizio - il tuo primo notebook con Scikit-learn
## Esercizio - il tuo primo notebook Scikit-learn
> Questo tutorial è ispirato dall’[esempio di regressione lineare](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sul sito di Scikit-learn.
> Questo tutorial è stato ispirato dall'[esempio di regressione lineare](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sul sito web di Scikit-learn.
[](https://youtu.be/2xkXL5EUpS0 "ML per principianti - Il tuo primo progetto di regressione lineare in Python")
> 🎥 Clicca sull'immagine sopra per un breve video su questo esercizio.
> 🎥 Clicca sull’immagine sopra per un breve video che mostra questo esercizio.
Nel file _notebook.ipynb_ associato a questa lezione, svuota tutte le celle premendo l'icona del 'cestino'.
Nel file _notebook.ipynb_ associato a questa lezione, cancella tutte le celle premendo l’icona del 'cestino'.
In questa sezione lavorerai con un piccolo dataset sul diabete integrato in Scikit-learn per scopi di apprendimento. Immagina di voler testare un trattamento per pazienti diabetici. I modelli di Machine Learning potrebbero aiutarti a determinare quali pazienti risponderebbero meglio al trattamento, basandosi su combinazioni di variabili. Anche un modello di regressione molto semplice, quando visualizzato, potrebbe mostrare informazioni sulle variabili che ti aiuterebbero a organizzare i tuoi ipotetici studi clinici.
In questa sezione lavorerai con un piccolo dataset sul diabete incluso in Scikit-learn per scopi didattici. Immagina di voler testare un trattamento per pazienti diabetici. I modelli di Machine Learning potrebbero aiutarti a determinare quali pazienti risponderebbero meglio al trattamento, basandosi su combinazioni di variabili. Anche un modello di regressione molto basilare, visualizzato, può mostrare informazioni sulle variabili che ti aiuterebbero a organizzare i tuoi ipotetici trial clinici.
✅ Esistono molti tipi di metodi di regressione, e quale scegliere dipende dalla risposta che stai cercando. Se vuoi prevedere l'altezza probabile di una persona di una certa età, utilizzeresti la regressione lineare, poiché stai cercando un **valore numerico**. Se sei interessato a scoprire se un tipo di cucina dovrebbe essere considerato vegano o meno, stai cercando un **assegnamento di categoria**, quindi utilizzeresti la regressione logistica. Immagina alcune domande che puoi porre ai dati e quale di questi metodi sarebbe più appropriato.
✅ Esistono molti tipi di metodi di regressione, e quale scegli dipende dalla risposta che cerchi. Se vuoi predire l’altezza probabile per una persona di una certa età, useresti la regressione lineare, poiché cerchi un **valore numerico**. Se invece sei interessato a scoprire se un tipo di cucina debba essere considerato vegano o meno, stai cercando un **assegnamento di categoria**, quindi useresti la regressione logistica. Imparerai di più sulla regressione logistica più avanti. Pensa un po’ ad alcune domande che puoi porre ai dati e quale di questi metodi sarebbe più appropriato.
Iniziamo con questo compito.
Iniziamo questo compito.
### Importa librerie
### Importa le librerie
Per questo compito importeremo alcune librerie:
- **matplotlib**. È uno strumento utile per [grafici](https://matplotlib.org/) e lo utilizzeremo per creare un grafico a linee.
- **matplotlib**. È un utile [strumento per grafici](https://matplotlib.org/) e lo useremo per creare un grafico a linee.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) è una libreria utile per gestire dati numerici in Python.
- **sklearn**. Questa è la libreria [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
Importa alcune librerie per aiutarti nei tuoi compiti.
1. Aggiungi le importazioni scrivendo il seguente codice:
1. Aggiungi gli import digitando il seguente codice:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Importa alcune librerie per aiutarti nei tuoi compiti.
from sklearn import datasets, linear_model, model_selection
```
Sopra stai importando `matplotlib`, `numpy` e stai importando `datasets`, `linear_model` e `model_selection` da `sklearn`. `model_selection`viene utilizzato per suddividere i dati in set di addestramento e test.
Sopra stai importando `matplotlib`, `numpy` e stai importando `datasets`, `linear_model` e `model_selection` da `sklearn`. `model_selection`è usato per dividere i dati in set di addestramento e test.
### Il dataset sul diabete
Il [dataset sul diabete](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) integrato include 442 campioni di dati sul diabete, con 10 variabili caratteristiche, alcune delle quali includono:
Il built-in [dataset sul diabete](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) include 442 campioni di dati relativi al diabete, con 10 variabili caratteristiche, alcune delle quali includono:
- age: età in anni
- bmi: indice di massa corporea
- bp: pressione sanguigna media
- s1 tc: T-Cells (un tipo di globuli bianchi)
- s1 tc: cellule T (un tipo di globuli bianchi)
✅ Questo dataset include il concetto di 'sesso' come variabile caratteristica importante per la ricerca sul diabete. Molti dataset medici includono questo tipo di classificazione binaria. Pensa un po' a come categorizzazioni come questa potrebbero escludere alcune parti della popolazione dai trattamenti.
✅ Questo dataset include il concetto di 'sesso' come variabile importante per le ricerche sul diabete. Molti dataset medici includono questo tipo di classificazione binaria. Pensa un po’ a come categorie come questa possano escludere alcune parti della popolazione dai trattamenti.
Ora, carica i dati X e y.
Ora carichiamo i dati X e y.
> 🎓 Ricorda, questo è apprendimento supervisionato, e abbiamo bisogno di un target 'y' nominato.
> 🎓 Ricorda, questo è apprendimento supervisionato, e abbiamo bisogno di un target denominato 'y'.
In una nuova cella di codice, carica il dataset sul diabete chiamando `load_diabetes()`. L'input `return_X_y=True` indica che `X` sarà una matrice di dati e `y` sarà il target di regressione.
In una nuova cella di codice, carica il dataset sul diabete chiamando `load_diabetes()`. L’input `return_X_y=True` indica che `X` sarà una matrice di dati e `y` sarà il target di regressione.
1. Aggiungi alcuni comandi di stampa per mostrare la forma della matrice di dati e il suo primo elemento:
1. Aggiungi alcuni comandi print per mostrare la forma della matrice dati e il suo primo elemento:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,7 +150,7 @@ In una nuova cella di codice, carica il dataset sul diabete chiamando `load_diab
print(X[0])
```
Quello che ottieni come risposta è una tupla. Quello che stai facendo è assegnare i primi due valori della tupla rispettivamente a `X` e `y`. Scopri di più [sulle tuple](https://wikipedia.org/wiki/Tuple).
Quello che ricevi come risposta è una tupla. Stai assegnando i primi due valori della tupla a `X` e `y` rispettivamente. Approfondisci le [tuple](https://wikipedia.org/wiki/Tuple).
Puoi vedere che questi dati hanno 442 elementi organizzati in array di 10 elementi:
@ -159,39 +160,39 @@ In una nuova cella di codice, carica il dataset sul diabete chiamando `load_diab
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Pensa un po' alla relazione tra i dati e il target di regressione. La regressione lineare prevede relazioni tra la caratteristica X e la variabile target y. Riesci a trovare il [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) per il dataset sul diabete nella documentazione? Cosa sta dimostrando questo dataset, dato il target?
✅ Pensa un po’ al rapporto tra i dati e il target di regressione. La regressione lineare predice le relazioni tra la caratteristica X e la variabile target y. Puoi trovare il [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) nel dataset sul diabete nella documentazione? Cosa dimostra questo dataset, dato quel target?
2. Successivamente, seleziona una parte di questo dataset da tracciare selezionando la terza colonna del dataset. Puoi farlo utilizzando l'operatore `:` per selezionare tutte le righe e poi selezionando la terza colonna utilizzando l'indice (2). Puoi anche rimodellare i dati per essere un array 2D - come richiesto per il tracciamento - utilizzando `reshape(n_rows, n_columns)`. Se uno dei parametri è -1, la dimensione corrispondente viene calcolata automaticamente.
2. Successivamente, seleziona una porzione di questo dataset da plottare scegliendo la terza colonna del dataset. Puoi farlo usando l’operatore `:` per selezionare tutte le righe, poi selezionando la terza colonna tramite l’indice (2). Puoi anche rimodellare i dati per avere un array 2D - come richiesto per il plot - usando `reshape(n_righe, n_colonne)`. Se uno dei parametri è -1, la dimensione corrispondente è calcolata automaticamente.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ In qualsiasi momento, stampa i dati per verificarne la forma.
✅ In ogni momento, stampa i dati per verificarne la forma.
3. Ora che hai i dati pronti per essere tracciati, puoi vedere se una macchina può aiutarti a determinare una divisione logica tra i numeri in questo dataset. Per fare ciò, devi dividere sia i dati (X) che il target (y) in set di test e di addestramento. Scikit-learn ha un modo semplice per farlo; puoi dividere i tuoi dati di test in un punto specifico.
3. Ora che hai dati pronti per il plot, puoi vedere se una macchina può aiutare a determinare una divisione logica tra i numeri in questo dataset. Per fare questo, devi suddividere sia i dati (X) che il target (y) in set di test e di addestramento. Scikit-learn ha un modo semplice per farlo; puoi dividere i tuoi dati di test in un punto dato.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Ora sei pronto per addestrare il tuo modello! Carica il modello di regressione lineare e addestralo con i tuoi set di addestramento X e y utilizzando `model.fit()`:
4. Ora sei pronto per addestrare il modello! Carica il modello di regressione lineare e addestralo con i tuoi set di addestramento X e y usando `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ `model.fit()` è una funzione che vedrai in molte librerie di ML come TensorFlow.
✅ `model.fit()` è una funzione che vedrai in molte librerie ML come TensorFlow
5. Successivamente, crea una previsione utilizzando i dati di test, utilizzando la funzione `predict()`. Questo sarà utilizzato per tracciare la linea tra i gruppi di dati.
5. Poi, crea una predizione usando i dati di test, utilizzando la funzione `predict()`. Questa sarà usata per tracciare la linea tra i gruppi di dati
```python
y_pred = model.predict(X_test)
```
6. Ora è il momento di mostrare i dati in un grafico. Matplotlib è uno strumento molto utile per questo compito. Crea un grafico a dispersione di tutti i dati di test X e y e utilizza la previsione per tracciare una linea nel punto più appropriato, tra i gruppi di dati del modello.
6. Adesso è il momento di mostrare i dati in un grafico. Matplotlib è uno strumento molto utile per questo compito. Crea uno scatterplot di tutti i dati di test X e y, e usa la predizione per disegnare una linea nella posizione più appropriata, tra i raggruppamenti di dati del modello.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,22 +203,24 @@ In una nuova cella di codice, carica il dataset sul diabete chiamando `load_diab
plt.show()
```

✅ Pensa un po' a cosa sta succedendo qui. Una linea retta attraversa molti piccoli punti di dati, ma cosa sta facendo esattamente? Riesci a vedere come questa linea dovrebbe permetterti di prevedere dove un nuovo punto dati, mai visto prima, dovrebbe posizionarsi in relazione all'asse y del grafico? Prova a mettere in parole l'utilità pratica di questo modello.

✅ Rifletti un po' su cosa sta succedendo qui. Una linea retta attraversa molti piccoli punti di dati, ma cosa sta facendo esattamente? Riesci a vedere come dovresti poter utilizzare questa linea per prevedere dove un nuovo punto dati mai visto dovrebbe collocarsi in relazione all'asse y del grafico? Prova a mettere in parole l'uso pratico di questo modello.
Congratulazioni, hai costruito il tuo primo modello di regressione lineare, creato una previsione con esso e l'hai visualizzata in un grafico!
Congratulazioni, hai costruito il tuo primo modello di regressione lineare, creato una previsione con esso e l'hai mostrato in un grafico!
---
## 🚀Sfida
Traccia un'altra variabile da questo dataset. Suggerimento: modifica questa riga: `X = X[:,2]`. Considerando il target di questo dataset, cosa riesci a scoprire sulla progressione del diabete come malattia?
Traccia una variabile diversa da questo dataset. Suggerimento: modifica questa linea: `X = X[:,2]`. Considerando il target di questo dataset, cosa riesci a scoprire sulla progressione del diabete come malattia?
In questo tutorial, hai lavorato con la regressione lineare semplice, piuttosto che con la regressione univariata o multipla. Leggi un po' sulle differenze tra questi metodi, oppure dai un'occhiata a [questo video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
In questo tutorial, hai lavorato con la regressione lineare semplice, piuttosto che con la regressione lineare univariata o multipla. Leggi un po' sulle differenze tra questi metodi, oppure guarda [questo video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
Leggi di più sul concetto di regressione e pensa a quali tipi di domande possono essere risposte con questa tecnica. Segui [questo tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) per approfondire la tua comprensione.
Leggi di più sul concetto di regressione e rifletti su quali tipi di domande possono essere risposte con questa tecnica. Segui questo [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) per approfondire la tua comprensione.
## Compito
@ -225,5 +228,7 @@ Leggi di più sul concetto di regressione e pensa a quali tipi di domande posson
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
## [Quiz prima della lezione](https://ff-quizzes.netlify.app/en/ml/)
> ### [Questa lezione è disponibile in R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Introduzione
Ora che hai configurato gli strumenti necessari per iniziare a costruire modelli di machine learning con Scikit-learn, sei pronto per iniziare a porre domande ai tuoi dati. Quando lavori con i dati e applichi soluzioni di ML, è molto importante sapere come formulare la domanda giusta per sfruttare al meglio il potenziale del tuo dataset.
Ora che hai configurato gli strumenti necessari per iniziare a costruire modelli di machine learning con Scikit-learn, sei pronto per iniziare a fare domande ai tuoi dati. Mentre lavori con i dati e applichi soluzioni ML, è molto importante capire come porre la domanda giusta per sbloccare correttamente il potenziale del tuo dataset.
In questa lezione imparerai:
- Come preparare i dati per la costruzione di modelli.
- Come utilizzare Matplotlib per la visualizzazione dei dati.
- Come preparare i tuoi dati per la costruzione del modello.
- Come usare Matplotlib per la visualizzazione dei dati.
- Come usare Seaborn per una visualizzazione dei dati più espressiva.
## Formulare la domanda giusta sui tuoi dati
## Porre la domanda giusta ai tuoi dati
La domanda che vuoi rispondere determinerà il tipo di algoritmi di ML che utilizzerai. E la qualità della risposta che otterrai dipenderà fortemente dalla natura dei tuoi dati.
La domanda a cui vuoi rispondere determinerà quale tipo di algoritmi di ML utilizzerai. E la qualità della risposta che otterrai dipenderà fortemente dalla natura dei tuoi dati.
Dai un'occhiata ai [dati](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) forniti per questa lezione. Puoi aprire questo file .csv in VS Code. Una rapida occhiata mostra immediatamente che ci sono spazi vuoti e un mix di stringhe e dati numerici. C'è anche una colonna strana chiamata 'Package' dove i dati sono un mix tra 'sacks', 'bins' e altri valori. I dati, in effetti, sono un po' disordinati.
Dai un'occhiata ai [dati](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) forniti per questa lezione. Puoi aprire questo file .csv in VS Code. Un'occhiata veloce mostra immediatamente che ci sono spazi vuoti e una mescolanza di stringhe e dati numerici. C'è anche una colonna strana chiamata 'Package' dove i dati sono un misto tra 'sacchi', 'cassette' e altri valori. I dati, in effetti, sono un po' disordinati.
[](https://youtu.be/5qGjczWTrDQ "ML per principianti - Come analizzare e pulire un dataset")
[](https://youtu.be/5qGjczWTrDQ "ML for beginners - Come analizzare e pulire un dataset")
> 🎥 Clicca sull'immagine sopra per un breve video che mostra come preparare i dati per questa lezione.
In effetti, non è molto comune ricevere un dataset completamente pronto per creare un modello di ML direttamente. In questa lezione, imparerai come preparare un dataset grezzo utilizzando librerie standard di Python. Imparerai anche varie tecniche per visualizzare i dati.
In realtà, non è molto comune ricevere un dataset completamente pronto all'uso per creare un modello ML già pronto. In questa lezione, imparerai come preparare un dataset grezzo usando le librerie standard di Python. Imparerai anche diverse tecniche per visualizzare i dati.
## Caso di studio: 'il mercato delle zucche'
In questa cartella troverai un file .csv nella cartella principale `data` chiamato [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) che include 1757 righe di dati sul mercato delle zucche, suddivisi in gruppi per città. Questi sono dati grezzi estratti dai [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuiti dal Dipartimento dell'Agricoltura degli Stati Uniti.
In questa cartella troverai un file .csv nella cartella principale `data` chiamato [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) che include 1757 righe di dati sul mercato delle zucche, raggruppate per città. Questi sono dati grezzi estratti dai [Rapporti Standard dei Mercati Terminali delle Colture Speciali](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuiti dal Dipartimento dell'Agricoltura degli Stati Uniti.
### Preparare i dati
Questi dati sono di dominio pubblico. Possono essere scaricati in molti file separati, per città, dal sito web dell'USDA. Per evitare troppi file separati, abbiamo concatenato tutti i dati delle città in un unico foglio di calcolo, quindi abbiamo già _preparato_ un po' i dati. Ora, diamo un'occhiata più da vicino ai dati.
Questi dati sono di dominio pubblico. Possono essere scaricati in molti file separati, per città, dal sito USDA. Per evitare troppi file separati, abbiamo concatenato tutti i dati delle città in un unico foglio di calcolo, quindi abbiamo già un po’_preparato_ i dati. Ora, diamo un’occhiata più da vicino ai dati.
### I dati sulle zucche - prime conclusioni
Cosa noti su questi dati? Hai già visto che c'è un mix di stringhe, numeri, spazi vuoti e valori strani che devi interpretare.
Cosa noti di questi dati? Hai già visto che c’è una mescolanza di stringhe, numeri, spazi vuoti e valori strani che devi interpretare.
Quale domanda puoi porre a questi dati, utilizzando una tecnica di regressione? Che ne dici di "Prevedere il prezzo di una zucca in vendita durante un determinato mese". Guardando di nuovo i dati, ci sono alcune modifiche che devi apportare per creare la struttura dei dati necessaria per il compito.
Quale domanda puoi porre a questi dati, usando una tecnica di Regressione? Che ne dici di "Prevedere il prezzo di una zucca in vendita durante un dato mese". Guardando di nuovo i dati, ci sono alcune modifiche da fare per creare la struttura dati necessaria per questo compito.
## Esercizio - analizza i dati delle zucche
## Esercizio - analizzare i dati sulle zucche
Usamo [Pandas](https://pandas.pydata.org/) (il nome sta per `Python Data Analysis`), uno strumento molto utile per modellare i dati, per analizzare e preparare questi dati sulle zucche.
Utilizziamo [Pandas](https://pandas.pydata.org/), (il nome sta per `Python Data Analysis`) uno strumento molto utile per modellare i dati, per analizzare e preparare questi dati sulle zucche.
### Prima, verifica la presenza di date mancanti
### Primo, controlla le date mancanti
Prima devi prendere provvedimenti per controllare la presenza di date mancanti:
Per prima cosa, dovrai prendere provvedimenti per controllare le date mancanti:
1. Converti le date in un formato mensile (queste sono date statunitensi, quindi il formato è `MM/DD/YYYY`).
1. Converti le date in un formato mese (sono date USA, quindi il formato è `MM/DD/YYYY`).
2. Estrai il mese in una nuova colonna.
Apri il file _notebook.ipynb_ in Visual Studio Code e importa il foglio di calcolo in un nuovo dataframe Pandas.
1. Usa la funzione `head()` per visualizzare le prime cinque righe.
1. Usa la funzione `head()` per vedere le prime cinque righe.
```python
import pandas as pd
@ -64,7 +64,7 @@ Apri il file _notebook.ipynb_ in Visual Studio Code e importa il foglio di calco
pumpkins.head()
```
✅ Quale funzione useresti per visualizzare le ultime cinque righe?
✅ Quale funzione useresti per vedere le ultime cinque righe?
1. Controlla se ci sono dati mancanti nel dataframe corrente:
@ -72,20 +72,20 @@ Apri il file _notebook.ipynb_ in Visual Studio Code e importa il foglio di calco
pumpkins.isnull().sum()
```
Ci sono dati mancanti, ma forse non saranno rilevanti per il compito.
Ci sono dati mancanti, ma forse non influiranno sul compito assegnato.
1. Per rendere il tuo dataframe più facile da gestire, seleziona solo le colonne necessarie, utilizzando la funzione `loc` che estrae dal dataframe originale un gruppo di righe (passate come primo parametro) e colonne (passate come secondo parametro). L'espressione `:` nel caso seguente significa "tutte le righe".
1. Per rendere il dataframe più facile da gestire, seleziona solo le colonne necessarie, usando la funzione `loc` che estrae dal dataframe originale un gruppo di righe (passate come primo parametro) e colonne (passate come secondo parametro). L'espressione `:` nel caso sotto significa "tutte le righe".
### Secondo, determina il prezzo medio delle zucche
### Secondo, determina il prezzo medio della zucca
Pensa a come determinare il prezzo medio di una zucca in un determinato mese. Quali colonne sceglieresti per questo compito? Suggerimento: avrai bisogno di 3 colonne.
Pensa a come determinare il prezzo medio di una zucca in un dato mese. Quali colonne sceglieresti per questo compito? Suggerimento: ti servono 3 colonne.
Soluzione: calcola la media delle colonne `Low Price` e `High Price` per popolare la nuova colonna Price, e converti la colonna Date per mostrare solo il mese. Fortunatamente, secondo il controllo sopra, non ci sono dati mancanti per date o prezzi.
Soluzione: prendi la media delle colonne `Low Price` e `High Price` per popolare la nuova colonna Price e converti la colonna Date per mostrare solo il mese. Fortunatamente, come risulta dal controllo sopra, non ci sono dati mancanti per date o prezzi.
1. Per calcolare la media, aggiungi il seguente codice:
@ -96,35 +96,35 @@ Soluzione: calcola la media delle colonne `Low Price` e `High Price` per popolar
```
✅ Sentiti libero di stampare qualsiasi dato per verificarlo utilizzando `print(month)`.
✅ Sentiti libero di stampare qualsiasi dato desideri controllare usando `print(month)`.
2. Ora, copia i tuoi dati convertiti in un nuovo dataframe Pandas:
2. Ora, copia i dati convertiti in un nuovo dataframe Pandas pulito:
Stampando il tuo dataframe vedrai un dataset pulito e ordinato su cui puoi costruire il tuo nuovo modello di regressione.
Stampare il dataframe mostra un dataset pulito e ordinato su cui puoi costruire il tuo nuovo modello di regressione.
### Ma aspetta! C'è qualcosa di strano qui
### Ma aspetta! C’è qualcosa di strano qui
Se guardi la colonna `Package`, le zucche vengono vendute in molte configurazioni diverse. Alcune sono vendute in misure di '1 1/9 bushel', altre in '1/2 bushel', alcune per zucca, alcune per libbra, e altre in grandi scatole di larghezze variabili.
Se guardi la colonna `Package`, le zucche sono vendute in molte configurazioni diverse. Alcune sono vendute in misure '1 1/9 bushel', altre in '1/2 bushel', alcune per zucca, altre per libbra, e altre in grandi scatole di larghezze variabili.
> Le zucche sembrano molto difficili da pesare in modo coerente
Esaminando i dati originali, è interessante notare che tutto ciò che ha `Unit of Sale` uguale a 'EACH' o 'PER BIN' ha anche il tipo `Package` per pollice, per bin, o 'each'. Le zucche sembrano essere molto difficili da pesare in modo coerente, quindi filtriamole selezionando solo le zucche con la stringa 'bushel' nella colonna `Package`.
Analizzando i dati originali, è interessante notare che tutto ciò che ha `Unit of Sale` uguale a 'EACH' o 'PER BIN' ha anche il tipo di `Package` per pollice, per cassetta o 'per unità'. Le zucche sembrano molto difficili da pesare in modo coerente, quindi filtra selezionando solo le zucche con la stringa 'bushel' nella colonna `Package`.
1. Aggiungi un filtro all'inizio del file, sotto l'importazione iniziale del .csv:
1. Aggiungi un filtro in cima al file, sotto l'importazione iniziale del file .csv:
Se stampi i dati ora, puoi vedere che stai ottenendo solo le circa 415 righe di dati contenenti zucche per bushel.
Se stampi i dati ora, vedrai che stai ottenendo solo le circa 415 righe di dati che contengono zucche per bushel.
### Ma aspetta! C'è un'altra cosa da fare
Hai notato che la quantità di bushel varia per riga? Devi normalizzare i prezzi in modo da mostrare il prezzo per bushel, quindi fai qualche calcolo per standardizzarlo.
Hai notato che la quantità di bushel varia per riga? Devi normalizzare il prezzo perché venga mostrato il prezzo per bushel, quindi fai qualche calcolo per standardizzarlo.
1. Aggiungi queste righe dopo il blocco che crea il dataframe new_pumpkins:
@ -134,38 +134,38 @@ Hai notato che la quantità di bushel varia per riga? Devi normalizzare i prezzi
✅ Secondo [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), il peso di un bushel dipende dal tipo di prodotto, poiché è una misura di volume. "Un bushel di pomodori, ad esempio, dovrebbe pesare 56 libbre... Foglie e verdure occupano più spazio con meno peso, quindi un bushel di spinaci pesa solo 20 libbre." È tutto piuttosto complicato! Non preoccupiamoci di fare una conversione bushel-libbra, e invece calcoliamo il prezzo per bushel. Tutto questo studio sui bushel di zucche, tuttavia, dimostra quanto sia importante comprendere la natura dei tuoi dati!
✅ Secondo [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), il peso di un bushel dipende dal tipo di prodotto, dato che è una misura di volume. "Un bushel di pomodori, per esempio, dovrebbe pesare 56 libbre... Le foglie e le verdure occupano più spazio con meno peso, quindi un bushel di spinaci pesa solo 20 libbre." È tutto piuttosto complicato! Non ci preoccuperemo di fare una conversione bushel-libbra, e invece prezzare per bushel. Tutto questo studio sui bushel di zucche, comunque, dimostra quanto sia molto importante capire la natura dei tuoi dati!
Ora puoi analizzare i prezzi per unità in base alla loro misura di bushel. Se stampi i dati un'altra volta, puoi vedere come sono stati standardizzati.
Ora, puoi analizzare il prezzo per unità basato sulla loro misura di bushel. Se stampi nuovamente i dati, puoi vedere come è standardizzato.
✅ Hai notato che le zucche vendute per mezzo bushel sono molto costose? Riesci a capire perché? Suggerimento: le zucche piccole sono molto più costose di quelle grandi, probabilmente perché ce ne sono molte di più per bushel, dato lo spazio inutilizzato occupato da una grande zucca vuota per torta.
✅ Hai notato che le zucche vendute a mezzo bushel sono molto costose? Riesci a capire perché? Suggerimento: le zucche piccole sono molto più costose di quelle grandi, probabilmente perché ce ne sono molte di più per bushel, considerando lo spazio inutilizzato occupato da una zucca cavo grande da torta.
## Strategie di visualizzazione
Parte del ruolo del data scientist è dimostrare la qualità e la natura dei dati con cui sta lavorando. Per farlo, spesso creano visualizzazioni interessanti, come grafici, diagrammi e tabelle, che mostrano diversi aspetti dei dati. In questo modo, sono in grado di mostrare visivamente relazioni e lacune che altrimenti sarebbero difficili da individuare.
Parte del ruolo dello scienziato dei dati è dimostrare la qualità e la natura dei dati con cui lavora. Per farlo, spesso crea visualizzazioni interessanti, come grafici, diagrammi e tabelle, che mostrano diversi aspetti dei dati. In questo modo, è possibile mostrare visivamente relazioni e lacune difficili da scoprire altrimenti.
[](https://youtu.be/SbUkxH6IJo0 "ML per principianti - Come visualizzare i dati con Matplotlib")
[](https://youtu.be/SbUkxH6IJo0 "ML for beginners - Come visualizzare i dati con Matplotlib")
> 🎥 Clicca sull'immagine sopra per un breve video che mostra come visualizzare i dati per questa lezione.
Le visualizzazioni possono anche aiutare a determinare la tecnica di machine learning più appropriata per i dati. Un diagramma a dispersione che sembra seguire una linea, ad esempio, indica che i dati sono un buon candidato per un esercizio di regressione lineare.
Le visualizzazioni possono anche aiutare a determinare la tecnica di machine learning più appropriata per i dati. Un grafico a dispersione che sembra seguire una linea, per esempio, indica che i dati sono un buon candidato per un esercizio di regressione lineare.
Una libreria di visualizzazione dei dati che funziona bene nei notebook Jupyter è [Matplotlib](https://matplotlib.org/) (che hai visto anche nella lezione precedente).
Una libreria di visualizzazione dei dati che funziona bene nei notebook Jupyter è [Matplotlib](https://matplotlib.org/) (che hai già visto nella lezione precedente).
> Ottieni più esperienza con la visualizzazione dei dati in [questi tutorial](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
> Acquisisci più esperienza con la visualizzazione dei dati in [questi tutorial](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
## Esercizio - sperimenta con Matplotlib
Prova a creare alcuni grafici di base per visualizzare il nuovo dataframe che hai appena creato. Cosa mostrerebbe un grafico lineare di base?
Prova a creare dei grafici base per visualizzare il nuovo dataframe che hai appena creato. Cosa mostrerà un grafico a linee base?
1. Importa Matplotlib all'inizio del file, sotto l'importazione di Pandas:
1. Importa Matplotlib in cima al file, sotto l'importazione di Pandas:
```python
import matplotlib.pyplot as plt
```
1. Esegui nuovamente l'intero notebook per aggiornare.
1. Alla fine del notebook, aggiungi una cella per tracciare i dati come un box:
1. Esegui nuovamente tutto il notebook per aggiornarlo.
1. In fondo al notebook, aggiungi una cella per tracciare i dati come boxplot:
```python
price = new_pumpkins.Price
@ -174,15 +174,15 @@ Prova a creare alcuni grafici di base per visualizzare il nuovo dataframe che ha
plt.show()
```


Questo grafico è utile? C'è qualcosa che ti sorprende?
È un grafico utile? C'è qualcosa che ti sorprende?
Non è particolarmente utile, poiché tutto ciò che fa è mostrare i tuoi dati come una distribuzione di punti in un determinato mese.
Non è particolarmente utile dato che mostra solo i tuoi dati come una dispersione di punti in un dato mese.
### Rendilo utile
Per ottenere grafici che mostrino dati utili, di solito è necessario raggruppare i dati in qualche modo. Proviamo a creare un grafico in cui l'asse y mostra i mesi e i dati dimostrano la distribuzione dei dati.
Per ottenere grafici che mostrino dati utili, di solito devi raggruppare i dati in qualche modo. Proviamo a creare un grafico dove l'asse y mostra i mesi e i dati dimostrano la distribuzione.
1. Aggiungi una cella per creare un grafico a barre raggruppato:
@ -191,21 +191,96 @@ Per ottenere grafici che mostrino dati utili, di solito è necessario raggruppar
plt.ylabel("Pumpkin Price")
```


Questa è una visualizzazione dei dati più utile! Sembra indicare che il prezzo più alto per le zucche si verifica a settembre e ottobre. Corrisponde alle tue aspettative? Perché sì o perché no?
## Esercizio - sperimenta con Seaborn
Matplotlib è potente, ma può richiedere molto codice per produrre un grafico rifinito. [Seaborn](https://seaborn.pydata.org/) è una libreria costruita _sopra_ Matplotlib progettata per la visualizzazione statistica dei dati. Lavora direttamente con i dataframe Pandas, applica stili predefiniti accattivanti e ti permette di creare grafici informativi con molto meno codice. Poiché Seaborn restituisce oggetti Matplotlib, puoi ancora usare tutto ciò che già sai su Matplotlib per perfezionare il risultato.
> Se non hai ancora installato Seaborn, installalo con `pip install seaborn`.
1. Importa Seaborn in cima al notebook, sotto gli altri import. Convenzionalmente è importato come `sns`:
```python
import seaborn as sns
```
### Grafici a dispersione per mostrare relazioni
Una parte importante dell’esplorazione dei dati prima di costruire un modello è cercare _relazioni_ tra variabili. Un [grafico a dispersione](https://en.wikipedia.org/wiki/Scatter_plot) è uno dei migliori strumenti per questo: se i punti sembrano seguire una linea, le due variabili potrebbero essere correlate, il che è un buon segno che un modello di regressione lineare potrebbe funzionare.
1. Ricrea il grafico prezzo-mese a dispersione di prima, questa volta usando [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) di Seaborn (grafico relazionale), che lavora direttamente con le colonne del tuo dataframe:

Nota come passi i _nomi delle colonne_ e il dataframe, e Seaborn si occupa delle etichette degli assi per te.
2. Puoi passare a un grafico a linee passando `kind="line"`. Seaborn disegna anche una banda sfumata che mostra l'intervallo di confidenza attorno alla linea:

Questi dati sono abbastanza rumorosi, quindi un grafico a linee non è la scelta più chiara qui — ma mostra quanto facilmente puoi cambiare tipo di grafico in Seaborn.
### Grafici a barre per mostrare distribuzioni
In precedenza hai raggruppato manualmente i dati per creare un grafico a barre con Matplotlib. [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) di Seaborn (grafico categorico) può fare il raggruppamento e l'aggregazione per te. Per impostazione predefinita, `kind="bar"` mostra la media di ogni categoria insieme a una linea nera che indica l'intervallo di confidenza.
1. Crea un grafico a barre del prezzo medio per mese:

Questo conferma ciò che hai visto con Matplotlib — i prezzi raggiungono il picco intorno a settembre e ottobre — ma Seaborn visualizza anche quanto il prezzo _varia_ all'interno di ogni mese.
### Mappe di calore per mostrare le correlazioni
I grafici a dispersione confrontano due variabili alla volta. Quando hai diverse colonne numeriche, una [heatmap](https://en.wikipedia.org/wiki/Heat_map) ti permette di visualizzare la forza della relazione tra _ogni_ coppia di colonne contemporaneamente. Questo è un modo comune per individuare quali caratteristiche sono più correlate prima di scegliere cosa inserire in un modello (e lo stesso tipo di grafico viene poi utilizzato per mostrare matrici di confusione nella classificazione).
1. Costruisci una matrice di correlazione con Pandas, poi disegnala con [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) di Seaborn. L'opzione `annot=True` stampa i valori di correlazione in ogni cella:

Valori vicini a `1` (o `-1`) significano che le colonne sono fortemente correlate _linearmente_. Nota come `Low Price` e `High Price` siano quasi perfettamente correlate. `Month`, invece, mostra solo una debole correlazione lineare con il prezzo — anche se il grafico a barre sopra ha rivelato un chiaro picco stagionale a settembre e ottobre. Questa è una lezione importante: il coefficiente di correlazione misura solo relazioni _lineari_, quindi può perdere schemi stagionali o non lineari. ✅ Perché è utile guardare sia una heatmap *che* grafici come quello a barre prima di decidere quali colonne usare?
### Matplotlib o Seaborn?
Entrambe le librerie vale la pena conoscerle:
- **Matplotlib** ti dà un controllo dettagliato su ogni elemento di un grafico ed è la base su cui si costruiscono quasi tutte le altre librerie di plotting Python.
- **Seaborn** fornisce funzioni di livello superiore e impostazioni predefinite attraenti per grafici statistici, lavora direttamente con i dataframe ed è spesso più veloce per l'analisi esplorativa dei dati.
Questo è una visualizzazione dei dati più utile! Sembra indicare che il prezzo più alto per le zucche si verifica a settembre e ottobre. Questo corrisponde alle tue aspettative? Perché o perché no?
Un flusso di lavoro comune è usare Seaborn per esplorare rapidamente i dati, poi passare a Matplotlib quando è necessario personalizzare i dettagli.
---
## 🚀Sfida
Esplora i diversi tipi di visualizzazione che Matplotlib offre. Quali tipi sono più appropriati per problemi di regressione?
Esplora i diversi tipi di visualizzazioni offerte da Matplotlib e Seaborn. Quali tipi sono più appropriati per problemi di regressione?
Dai un'occhiata ai molti modi per visualizzare i dati. Fai un elenco delle varie librerie disponibili e annota quali sono migliori per determinati tipi di compiti, ad esempio visualizzazioni 2D rispetto a visualizzazioni 3D. Cosa scopri?
Dai un'occhiata ai tanti modi per visualizzare i dati. Fai una lista delle varie librerie disponibili e annota quali sono le migliori per tipi di compiti specifici, per esempio visualizzazioni 2D vs. 3D. Cosa scopri?
## Compito
@ -213,5 +288,7 @@ Dai un'occhiata ai molti modi per visualizzare i dati. Fai un elenco delle varie
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
"[Seaborn](https://seaborn.pydata.org/) è costruito sopra Matplotlib e funziona direttamente con i dataframe, rendendo veloce la creazione di grafici statistici attraenti con pochissimo codice.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Diagrammi a dispersione per mostrare relazioni\n"
"\n---\n\n**Disclaimer**: \nQuesto documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.\n"
"### Mappe di calore per mostrare le correlazioni\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Disclaimer**:\nQuesto documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
# Introduzione al Reinforcement Learning e al Q-Learning
# Introduzione all'Apprendimento per Rinforzo e Q-Learning


> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac)
Il reinforcement learning coinvolge tre concetti fondamentali: l'agente, alcuni stati e un insieme di azioni per stato. Eseguendo un'azione in uno stato specifico, l'agente riceve una ricompensa. Immagina di nuovo il videogioco Super Mario. Tu sei Mario, ti trovi in un livello di gioco, vicino al bordo di un precipizio. Sopra di te c'è una moneta. Essere Mario, in un livello di gioco, in una posizione specifica... quello è il tuo stato. Muoversi di un passo a destra (un'azione) ti farebbe cadere nel precipizio, e questo ti darebbe un punteggio numerico basso. Tuttavia, premendo il pulsante di salto, potresti ottenere un punto e rimanere vivo. Questo è un risultato positivo e dovrebbe assegnarti un punteggio numerico positivo.
L'apprendimento per rinforzo coinvolge tre concetti importanti: l'agente, alcuni stati e un insieme di azioni per ciascuno stato. Eseguendo un'azione in uno stato specificato, l'agente riceve una ricompensa. Immagina di nuovo il gioco per computer Super Mario. Sei Mario, sei in un livello di gioco, in piedi vicino al bordo di una scogliera. Sopra di te c'è una moneta. Tu, essendo Mario, in un livello di gioco, in una posizione specifica... quello è il tuo stato. Muoversi di un passo a destra (un'azione) ti farà cadere nel vuoto, e questo ti darebbe un punteggio numerico basso. Tuttavia, premere il pulsante di salto ti permetterebbe di segnare un punto e resteresti vivo. Questo è un risultato positivo e dovrebbe premiarti con un punteggio numerico positivo.
Utilizzando il reinforcement learning e un simulatore (il gioco), puoi imparare a giocare per massimizzare la ricompensa, che consiste nel rimanere vivo e ottenere il maggior numero di punti possibile.
Usando l'apprendimento per rinforzo e un simulatore (il gioco), puoi imparare come giocare per massimizzare la ricompensa, che è rimanere vivo e segnare il maggior numero possibile di punti.
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 Clicca sull'immagine sopra per ascoltare Dmitry parlare del Reinforcement Learning
> 🎥 Clicca sull'immagine sopra per ascoltare Dmitry parlare di Apprendimento per Rinforzo
In questa lezione, sperimenteremo con del codice in Python. Dovresti essere in grado di eseguire il codice del Jupyter Notebook di questa lezione, sia sul tuo computer che in cloud.
In questa lezione, sperimenteremo con del codice in Python. Dovresti essere in grado di eseguire il codice del Jupyter Notebook di questa lezione, sia sul tuo computer che da qualche parte nel cloud.
Puoi aprire [il notebook della lezione](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) e seguire questa lezione per costruire.
> **Nota:** Se stai aprendo questo codice dal cloud, devi anche recuperare il file [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), che viene utilizzato nel codice del notebook. Aggiungilo alla stessa directory del notebook.
> **Nota:** Se stai aprendo questo codice dal cloud, devi anche recuperare il file [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), che è usato nel codice del notebook. Aggiungilo alla stessa directory del notebook.
## Introduzione
In questa lezione, esploreremo il mondo di **[Pierino e il Lupo](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, ispirato a una fiaba musicale di un compositore russo, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Utilizzeremo il **Reinforcement Learning** per permettere a Pierino di esplorare il suo ambiente, raccogliere mele gustose ed evitare di incontrare il lupo.
In questa lezione esploreremo il mondo di **[Pietro e il Lupo](https://it.wikipedia.org/wiki/Pietro_e_il_lupo)**, ispirato a una fiaba musicale di un compositore russo, [Sergej Prokof'ev](https://it.wikipedia.org/wiki/Sergej_Prokof'ev). Useremo l'**Apprendimento per Rinforzo** per permettere a Pietro di esplorare il suo ambiente, raccogliere mele gustose ed evitare di incontrare il lupo.
Il **Reinforcement Learning** (RL) è una tecnica di apprendimento che ci consente di apprendere un comportamento ottimale di un **agente** in un determinato **ambiente** eseguendo molti esperimenti. Un agente in questo ambiente dovrebbe avere un **obiettivo**, definito da una **funzione di ricompensa**.
L'**Apprendimento per Rinforzo** (RL) è una tecnica di apprendimento che ci permette di apprendere un comportamento ottimale di un **agente** in un certo **ambiente** eseguendo molti esperimenti. Un agente in questo ambiente dovrebbe avere un **obiettivo**, definito da una **funzione di ricompensa**.
## L'ambiente
Per semplicità, consideriamo il mondo di Pierino come una scacchiera di dimensioni `width` x `height`, come questa:
Per semplicità, consideriamo il mondo di Pietro come una scacchiera quadrata di dimensioni `larghezza` x `altezza`, così:


Ogni cella di questa scacchiera può essere:
* **terra**, su cui Pierino e altre creature possono camminare.
* **acqua**, su cui ovviamente non si può camminare.
* **terra**, sulla quale Pietro e altre creature possono camminare.
* **acqua**, sulla quale ovviamente non si può camminare.
* un **albero** o **erba**, un luogo dove puoi riposarti.
* una **mela**, che rappresenta qualcosa che Pierino sarebbe felice di trovare per nutrirsi.
* un **lupo**, che è pericoloso e dovrebbe essere evitato.
* una **mela**, che rappresenta qualcosa che a Pietro piacerebbe trovare per nutrirsi.
* un **lupo**, che è pericoloso e va evitato.
Esiste un modulo Python separato, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), che contiene il codice per lavorare con questo ambiente. Poiché questo codice non è importante per comprendere i nostri concetti, importeremo il modulo e lo utilizzeremo per creare la scacchiera di esempio (blocco di codice 1):
Esiste un modulo Python separato, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), che contiene il codice per lavorare con questo ambiente. Poiché questo codice non è importante per comprendere i nostri concetti, importeremo il modulo e lo useremo per creare la scacchiera di esempio (blocco codice 1):
```python
from rlboard import *
@ -56,50 +56,50 @@ Questo codice dovrebbe stampare un'immagine dell'ambiente simile a quella sopra.
## Azioni e politica
Nel nostro esempio, l'obiettivo di Pierino sarebbe trovare una mela, evitando il lupo e altri ostacoli. Per fare ciò, può essenzialmente camminare fino a trovare una mela.
Nel nostro esempio, l'obiettivo di Pietro sarebbe trovare una mela, evitando il lupo e altri ostacoli. Per farlo, può essenzialmente camminare finché non trova una mela.
Pertanto, in qualsiasi posizione, può scegliere tra una delle seguenti azioni: su, giù, sinistra e destra.
Pertanto, in ogni posizione, può scegliere tra una delle seguenti azioni: su, giù, sinistra e destra.
Definiremo queste azioni come un dizionario e le mapperemo a coppie di modifiche coordinate corrispondenti. Ad esempio, muoversi a destra (`R`) corrisponderebbe a una coppia `(1,0)`. (blocco di codice 2):
Definiremo queste azioni come un dizionario e le mapperemo a coppie di cambiamenti corrispondenti delle coordinate. Per esempio, muoversi a destra (`R`) corrisponderebbe alla coppia `(1,0)`. (blocco codice 2):
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
Riassumendo, la strategia e l'obiettivo di questo scenario sono i seguenti:
Per riassumere, la strategia e l'obiettivo di questo scenario sono i seguenti:
- **La strategia**, del nostro agente (Pierino) è definita da una cosiddetta **politica**. Una politica è una funzione che restituisce l'azione in qualsiasi stato dato. Nel nostro caso, lo stato del problema è rappresentato dalla scacchiera, inclusa la posizione attuale del giocatore.
- **La strategia**, del nostro agente (Pietro) è definita da una cosiddetta **politica**. Una politica è una funzione che restituisce l'azione in qualsiasi stato dato. Nel nostro caso, lo stato del problema è rappresentato dalla scacchiera, inclusa la posizione attuale del giocatore.
- **L'obiettivo**, del reinforcement learning è imparare alla fine una buona politica che ci permetta di risolvere il problema in modo efficiente. Tuttavia, come base di partenza, consideriamo la politica più semplice chiamata **camminata casuale**.
- **L'obiettivo**, dell'apprendimento per rinforzo è infine quello di apprendere una buona politica che ci permetta di risolvere il problema in modo efficiente. Tuttavia, come base, consideriamo la politica più semplice chiamata **camminata casuale**.
## Camminata casuale
Per prima cosa risolviamo il nostro problema implementando una strategia di camminata casuale. Con la camminata casuale, sceglieremo casualmente la prossima azione tra quelle consentite, fino a raggiungere la mela (blocco di codice 3).
Risolviamo prima il nostro problema implementando una strategia di camminata casuale. Con la camminata casuale, sceglieremo casualmente la prossima azione tra quelle consentite, finché non raggiungiamo la mela (blocco codice 3).
1. Implementa la camminata casuale con il codice seguente:
1. Implementa la camminata casuale con il codice sottostante:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # numero di passi
# imposta la posizione iniziale
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # successo!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # mangiato dal lupo o annegato
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # esegui la mossa effettiva
break
n+=1
@ -108,7 +108,7 @@ Per prima cosa risolviamo il nostro problema implementando una strategia di camm
La chiamata a `walk` dovrebbe restituire la lunghezza del percorso corrispondente, che può variare da un'esecuzione all'altra.
1. Esegui l'esperimento di camminata un certo numero di volte (ad esempio, 100) e stampa le statistiche risultanti (blocco di codice 4):
1. Esegui l'esperimento di camminata un numero di volte (ad esempio, 100), e stampa le statistiche risultanti (blocco codice 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Per prima cosa risolviamo il nostro problema implementando una strategia di camm
print_statistics(random_policy)
```
Nota che la lunghezza media di un percorso è di circa 30-40 passi, che è piuttosto elevata, considerando che la distanza media dalla mela più vicina è di circa 5-6 passi.
Nota che la lunghezza media di un percorso è intorno a 30-40 passi, che è abbastanza, dato che la distanza media alla mela più vicina è intorno a 5-6 passi.
Puoi anche vedere come si muove Pierino durante la camminata casuale:
Puoi anche vedere come si muove Pietro durante la camminata casuale:


## Funzione di ricompensa
Per rendere la nostra politica più intelligente, dobbiamo capire quali mosse sono "migliori" di altre. Per fare ciò, dobbiamo definire il nostro obiettivo.
Per rendere la nostra politica più intelligente, dobbiamo capire quali mosse sono "migliori" di altre. Per fare questo, dobbiamo definire il nostro obiettivo.
L'obiettivo può essere definito in termini di una **funzione di ricompensa**, che restituirà un valore di punteggio per ogni stato. Più alto è il numero, migliore è la funzione di ricompensa. (blocco di codice 5)
L'obiettivo può essere definito in termini di una **funzione di ricompensa**, che restituirà un valore di punteggio per ogni stato. Più alto è il numero, migliore è la funzione di ricompensa. (blocco codice 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Una cosa interessante delle funzioni di ricompensa è che nella maggior parte dei casi, *riceviamo una ricompensa significativa solo alla fine del gioco*. Ciò significa che il nostro algoritmo dovrebbe in qualche modo ricordare i "passi buoni" che portano a una ricompensa positiva alla fine e aumentarne l'importanza. Allo stesso modo, tutte le mosse che portano a risultati negativi dovrebbero essere scoraggiate.
Una cosa interessante delle funzioni di ricompensa è che nella maggior parte dei casi, *ci viene data una ricompensa sostanziale solo alla fine del gioco*. Ciò significa che il nostro algoritmo dovrebbe in qualche modo ricordare i passi "buoni" che portano a una ricompensa positiva alla fine, e aumentarne l'importanza. Allo stesso modo, tutte le mosse che portano a risultati negativi dovrebbero essere scoraggiate.
## Q-Learning
Un algoritmo che discuteremo qui si chiama **Q-Learning**. In questo algoritmo, la politica è definita da una funzione (o una struttura dati) chiamata **Q-Table**. Registra la "bontà" di ciascuna delle azioni in uno stato dato.
Un algoritmo di cui parleremo qui si chiama **Q-Learning**. In questo algoritmo, la politica è definita da una funzione (o da una struttura dati) chiamata **Tabella Q**. Essa registra la "bontà" di ognuna delle azioni in uno stato dato.
Si chiama Q-Table perché spesso è conveniente rappresentarla come una tabella o un array multidimensionale. Poiché la nostra scacchiera ha dimensioni `width` x `height`, possiamo rappresentare la Q-Table utilizzando un array numpy con forma `width` x `height` x `len(actions)`: (blocco di codice 6)
Si chiama Tabella Q perché spesso è comodo rappresentarla come una tabella, o array multidimensionale. Poiché la nostra scacchiera ha dimensioni `larghezza` x `altezza`, possiamo rappresentare la Tabella Q usando un array numpy con forma `larghezza` x `altezza` x `len(actions)`: (blocco codice 6)
Nota che inizializziamo tutti i valori della Q-Table con un valore uguale, nel nostro caso - 0.25. Questo corrisponde alla politica di "camminata casuale", perché tutte le mosse in ogni stato sono ugualmente buone. Possiamo passare la Q-Table alla funzione `plot` per visualizzare la tabella sulla scacchiera: `m.plot(Q)`.
Nota che inizializziamo tutti i valori della Tabella Q con un valore uguale, nel nostro caso - 0.25. Questo corrisponde alla politica di "camminata casuale", perché tutte le mosse in ogni stato sono ugualmente buone. Possiamo passare la Tabella Q alla funzione `plot` per visualizzare la tabella sulla scacchiera: `m.plot(Q)`.


Al centro di ogni cella c'è una "freccia" che indica la direzione preferita di movimento. Poiché tutte le direzioni sono uguali, viene visualizzato un punto.
Al centro di ogni cella c'è una "freccia" che indica la direzione preferita di movimento. Poiché tutte le direzioni sono uguali, viene mostrato un punto.
Ora dobbiamo eseguire la simulazione, esplorare il nostro ambiente e apprendere una distribuzione migliore dei valori della Q-Table, che ci permetterà di trovare il percorso verso la mela molto più velocemente.
Ora dobbiamo eseguire la simulazione, esplorare il nostro ambiente e apprendere una migliore distribuzione dei valori nella Tabella Q, che ci permetterà di trovare il percorso verso la mela molto più velocemente.
## Essenza del Q-Learning: Equazione di Bellman
Una volta che iniziamo a muoverci, ogni azione avrà una ricompensa corrispondente, cioè teoricamente possiamo selezionare la prossima azione basandoci sulla ricompensa immediata più alta. Tuttavia, nella maggior parte degli stati, la mossa non raggiungerà il nostro obiettivo di trovare la mela, e quindi non possiamo decidere immediatamente quale direzione sia migliore.
Una volta che iniziamo a muoverci, ogni azione avrà una ricompensa corrispondente, cioè possiamo teoricamente selezionare la prossima azione basandoci sulla ricompensa immediata più alta. Tuttavia, nella maggior parte degli stati, la mossa non porterà al nostro obiettivo di raggiungere la mela, e quindi non possiamo decidere immediatamente quale direzione sia migliore.
> Ricorda che non è il risultato immediato che conta, ma piuttosto il risultato finale, che otterremo alla fine della simulazione.
Per tenere conto di questa ricompensa ritardata, dobbiamo utilizzare i principi della **[programmazione dinamica](https://en.wikipedia.org/wiki/Dynamic_programming)**, che ci permettono di pensare al nostro problema in modo ricorsivo.
Per tenere conto di questa ricompensa ritardata, dobbiamo usare i principi della **[programmazione dinamica](https://it.wikipedia.org/wiki/Programmazione_dinamica)**, che ci permettono di pensare al nostro problema in modo ricorsivo.
Supponiamo di trovarci ora nello stato *s* e vogliamo passare al prossimo stato *s'*. Facendo ciò, riceveremo la ricompensa immediata *r(s,a)*, definita dalla funzione di ricompensa, più una ricompensa futura. Se supponiamo che la nostra Q-Table rifletta correttamente l'"attrattività" di ciascuna azione, allora nello stato *s'* sceglieremo un'azione *a* che corrisponde al valore massimo di *Q(s',a')*. Pertanto, la migliore ricompensa futura possibile che potremmo ottenere nello stato *s* sarà definita come `max`
Supponiamo di essere ora nello stato *s*, e di volerci muovere allo stato successivo *s'*. Facendo ciò, riceveremo la ricompensa immediata *r(s,a)*, definita dalla funzione di ricompensa, più qualche ricompensa futura. Se supponiamo che la nostra Tabella Q rifletta correttamente l'"attrattività" di ogni azione, allora nello stato *s'* sceglieremo un'azione *a* che corrisponde al valore massimo di *Q(s',a')*. Dunque, la migliore possibile ricompensa futura che potremmo ottenere nello stato *s* sarà definita come `max`<sub>a'</sub>*Q(s',a')* (il massimo qui è calcolato su tutte le possibili azioni *a'* nello stato *s'*).
Questo dà la **formula di Bellman** per calcolare il valore della Tabella Q nello stato *s*, data l'azione *a*:
Qui γ è il cosiddetto **fattore di sconto** che determina quanto dovresti preferire la ricompensa corrente rispetto a quella futura e viceversa.
## Algoritmo di Apprendimento
Data l'equazione sopra, ora possiamo scrivere il pseudo-codice per il nostro algoritmo di apprendimento:
* Inizializza la Tabella Q con numeri uguali per tutti gli stati e azioni
* Imposta il tasso di apprendimento α ← 1
* Ripeti la simulazione molte volte
1. Parti da una posizione casuale
1. Ripeti
1. Seleziona un'azione *a* nello stato *s*
2. Esegui l'azione muovendoti in un nuovo stato *s'*
3. Se incontriamo la condizione di fine gioco, o la ricompensa totale è troppo bassa - esci dalla simulazione
4. Calcola la ricompensa *r* nel nuovo stato
5. Aggiorna la funzione Q secondo l'equazione di Bellman: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Aggiorna la ricompensa totale e diminuisci α.
## Sfruttare vs. esplorare
Nell'algoritmo sopra, non abbiamo specificato esattamente come scegliere un'azione al passo 2.1. Se scegliamo l'azione casualmente, esploreremo casualmente l'ambiente, e molto probabilmente moriremo spesso e esploreremo aree dove normalmente non andremmo. Un approccio alternativo sarebbe **sfruttare** i valori della Tabella Q che già conosciamo, e quindi scegliere la migliore azione (con valore Tabella Q più alto) nello stato *s*. Tuttavia, questo ci impedirà di esplorare altri stati, e probabilmente non troveremo la soluzione ottimale.
Dunque, il miglior approccio è trovare un equilibrio tra esplorazione e sfruttamento. Ciò può essere fatto scegliendo l'azione nello stato *s* con probabilità proporzionali ai valori nella Tabella Q. Inizialmente, quando i valori della Tabella Q sono tutti uguali, ciò corrisponderebbe a una selezione casuale, ma man mano che impariamo di più sul nostro ambiente, saremo più propensi a seguire la rotta ottimale consentendo però all'agente di scegliere di tanto in tanto un percorso inesplorato.
## Implementazione in Python
Ora siamo pronti per implementare l'algoritmo di apprendimento. Prima di farlo, ci serve anche una funzione che converta numeri arbitrari nella Tabella Q in un vettore di probabilità per le azioni corrispondenti.
1. Crea una funzione `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Aggiungiamo un po' di `eps` al vettore originale per evitare divisioni per 0 nel caso iniziale, quando tutte le componenti del vettore sono identiche.
Esegui l'algoritmo di apprendimento per 5000 esperimenti, chiamati anche **epoche**: (blocco codice 8)
```python
for epoch in range(5000):
# Scegli il punto iniziale
m.random_start()
# Inizia il viaggio
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # permettiamo al giocatore di muoversi fuori dalla plancia, il che termina l'episodio
Dopo aver eseguito questo algoritmo, la Tabella Q dovrebbe essere aggiornata con valori che definiscono l'attrattività delle diverse azioni in ogni passo. Possiamo provare a visualizzare la Tabella Q disegnando un vettore in ogni cella che indichi nella direzione desiderata di movimento. Per semplicità, disegniamo un piccolo cerchio anziché una punta di freccia.
Poiché la Q-Table elenca l'"attrattività" di ogni azione in ciascuno stato, è piuttosto semplice utilizzarla per definire una navigazione efficiente nel nostro mondo. Nel caso più semplice, possiamo selezionare l'azione corrispondente al valore più alto nella Q-Table: (blocco di codice 9)
Poiché la Tabella Q elenca l'"attrattività" di ogni azione in ogni stato, è abbastanza semplice usarla per definire una navigazione efficiente nel nostro mondo. Nel caso più semplice, possiamo selezionare l'azione corrispondente al valore massimo nella Tabella Q: (blocco codice 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Se provi il codice sopra più volte, potresti notare che a volte "si blocca" e devi premere il pulsante STOP nel notebook per interromperlo. Questo accade perché potrebbero verificarsi situazioni in cui due stati "puntano" l'uno verso l'altro in termini di Q-Value ottimale, nel qual caso l'agente finisce per muoversi tra quegli stati all'infinito.
> Se provi il codice sopra diverse volte, potresti notare che a volte “si blocca” e devi premere il pulsante STOP nel notebook per interromperlo. Questo accade perché potrebbero esserci situazioni in cui due stati “si puntano” a vicenda in termini di Q-Value ottimale, nel qual caso l'agente finisce per muoversi indefinitamente tra quegli stati.
## 🚀Sfida
> **Compito 1:** Modifica la funzione `walk` per limitare la lunghezza massima del percorso a un certo numero di passi (ad esempio, 100) e osserva il codice sopra restituire questo valore di tanto in tanto.
> **Compito 1:** Modifica la funzione `walk` per limitare la lunghezza massima del percorso a un certo numero di passi (ad esempio 100), e osserva il codice sopra restituire questo valore di tanto in tanto.
> **Compito 2:** Modifica la funzione `walk` in modo che non torni nei luoghi in cui è già stato in precedenza. Questo impedirà a `walk` di entrare in un ciclo, tuttavia, l'agente potrebbe comunque finire "intrappolato" in una posizione da cui non riesce a uscire.
> **Compito 2:** Modifica la funzione `walk` in modo che non torni nei luoghi in cui è già stato in precedenza. Questo eviterà che `walk` entri in un ciclo, tuttavia, l'agente può ancora finire “intrappolato” in una posizione da cui non è in grado di uscire.
## Navigazione
Una politica di navigazione migliore sarebbe quella che abbiamo utilizzato durante l'addestramento, che combina sfruttamento ed esplorazione. In questa politica, selezioneremo ogni azione con una certa probabilità, proporzionale ai valori nella Q-Table. Questa strategia potrebbe comunque portare l'agente a tornare in una posizione già esplorata, ma, come puoi vedere dal codice qui sotto, risulta in un percorso medio molto breve verso la posizione desiderata (ricorda che `print_statistics` esegue la simulazione 100 volte): (blocco di codice 10)
Una politica di navigazione migliore sarebbe quella che abbiamo usato durante l'addestramento, che combina sfruttamento ed esplorazione. In questa politica, selezioneremo ogni azione con una certa probabilità, proporzionale ai valori nella Q-Table. Questa strategia può ancora far sì che l'agente torni in una posizione che ha già esplorato, ma, come puoi vedere dal codice qui sotto, risulta in un percorso medio molto breve fino alla posizione desiderata (ricorda che `print_statistics` esegue la simulazione 100 volte): (blocco di codice 10)
```python
def qpolicy(m):
@ -220,21 +297,23 @@ def qpolicy(m):
print_statistics(qpolicy)
```
Dopo aver eseguito questo codice, dovresti ottenere una lunghezza media del percorso molto più breve rispetto a prima, nell'intervallo di 3-6.
Dopo aver eseguito questo codice, dovresti ottenere una lunghezza media del percorso molto più piccola rispetto a prima, nell'intervallo di 3-6.
## Analisi del processo di apprendimento
## Esaminare il processo di apprendimento
Come abbiamo detto, il processo di apprendimento è un equilibrio tra esplorazione e sfruttamento della conoscenza acquisita sulla struttura dello spazio del problema. Abbiamo visto che i risultati dell'apprendimento (la capacità di aiutare un agente a trovare un percorso breve verso l'obiettivo) sono migliorati, ma è anche interessante osservare come si comporta la lunghezza media del percorso durante il processo di apprendimento:
Come abbiamo accennato, il processo di apprendimento è un equilibrio tra esplorazione e sfruttamento delle conoscenze acquisite sulla struttura dello spazio del problema. Abbiamo visto che i risultati dell'apprendimento (la capacità di aiutare un agente a trovare un percorso breve verso l'obiettivo) sono migliorati, ma è anche interessante osservare come si comporta la lunghezza media del percorso durante il processo di apprendimento:
Le lezioni apprese possono essere riassunte come segue:
Le conclusioni possono essere riassunte come segue:
- **La lunghezza media del percorso aumenta**. Quello che vediamo qui è che all'inizio la lunghezza media del percorso aumenta. Questo probabilmente è dovuto al fatto che, quando non sappiamo nulla dell'ambiente, è probabile che ci ritroviamo intrappolati in stati sfavorevoli, come acqua o lupi. Man mano che impariamo di più e iniziamo a utilizzare queste conoscenze, possiamo esplorare l'ambiente più a lungo, ma non sappiamo ancora bene dove si trovano le mele.
- **La lunghezza media del percorso aumenta**. Qui vediamo che all'inizio la lunghezza media del percorso aumenta. Questo è probabilmente dovuto al fatto che quando non sappiamo nulla dell'ambiente, è probabile che rimaniamo intrappolati in stati sfavorevoli, acqua o lupo. Man mano che impariamo e iniziamo a usare questa conoscenza, possiamo esplorare più a lungo l'ambiente, ma ancora non sappiamo molto bene dove sono le mele.
- **La lunghezza del percorso diminuisce man mano che impariamo di più**. Una volta che impariamo abbastanza, diventa più facile per l'agente raggiungere l'obiettivo, e la lunghezza del percorso inizia a diminuire. Tuttavia, siamo ancora aperti all'esplorazione, quindi spesso ci allontaniamo dal percorso migliore ed esploriamo nuove opzioni, rendendo il percorso più lungo del necessario.
- **La lunghezza del percorso diminuisce man mano che impariamo**. Una volta appreso abbastanza, diventa più facile per l’agente raggiungere l'obiettivo, e la lunghezza del percorso inizia a diminuire. Tuttavia, siamo ancora aperti all’esplorazione, quindi spesso ci allontaniamo dal percorso migliore ed esploriamo nuove opzioni, rendendo il percorso più lungo di quello ottimale.
- **La lunghezza aumenta improvvisamente**. Quello che osserviamo anche in questo grafico è che a un certo punto la lunghezza aumenta improvvisamente. Questo indica la natura stocastica del processo e che a un certo punto possiamo "rovinare" i coefficienti della Q-Table sovrascrivendoli con nuovi valori. Questo idealmente dovrebbe essere minimizzato riducendo il tasso di apprendimento (ad esempio, verso la fine dell'addestramento, regoliamo i valori della Q-Table solo di una piccola quantità).
- **La lunghezza aumenta bruscamente**. Ciò che osserviamo anche in questo grafico è che ad un certo punto la lunghezza è aumentata bruscamente. Questo indica la natura stocastica del processo, e che possiamo a un certo punto “rovinare” i coefficienti della Q-Table sovrascrivendoli con nuovi valori. Idealmente questo dovrebbe essere ridotto diminuendo il tasso di apprendimento (per esempio, verso la fine dell’addestramento, modifichiamo i valori della Q-Table solo di una piccola quantità).
In generale, è importante ricordare che il successo e la qualità del processo di apprendimento dipendono significativamente dai parametri, come il tasso di apprendimento, il decadimento del tasso di apprendimento e il fattore di sconto. Questi sono spesso chiamati **iperparametri**, per distinguerli dai **parametri**, che ottimizziamo durante l'addestramento (ad esempio, i coefficienti della Q-Table). Il processo di trovare i migliori valori per gli iperparametri si chiama **ottimizzazione degli iperparametri**, e merita un argomento a sé stante.
In generale, è importante ricordare che il successo e la qualità del processo di apprendimento dipendono molto dai parametri, come il tasso di apprendimento, il decadimento del tasso di apprendimento e il fattore di sconto. Questi sono spesso chiamati **iperparametri**, per distinguerli dai **parametri**, che ottimizziamo durante l’addestramento (ad esempio, i coefficienti della Q-Table). Il processo di trovare i valori migliori degli iperparametri si chiama **ottimizzazione degli iperparametri**, e merita un argomento a parte.
@ -243,5 +322,7 @@ In generale, è importante ricordare che il successo e la qualità del processo
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
Il problema che abbiamo risolto nella lezione precedente potrebbe sembrare un problema giocattolo, non veramente applicabile a scenari della vita reale. Non è così, perché molti problemi del mondo reale condividono questo scenario - incluso giocare a Scacchi o Go. Sono simili perché abbiamo anche una scacchiera con regole date e uno **stato discreto**.
In questa lezione applicheremo gli stessi principi del Q-Learning a un problema con **stato continuo**, cioè uno stato dato da uno o più numeri reali. Affronteremo il seguente problema:
> **Problema**: Se Peter vuole sfuggire al lupo, deve essere in grado di muoversi più velocemente. Vedremo come Peter può imparare a pattinare, in particolare a mantenere l'equilibrio, usando il Q-Learning.

> Peter e i suoi amici diventano creativi per scappare dal lupo! Immagine di [Jen Looper](https://twitter.com/jenlooper)
Useremo una versione semplificata dell'equilibrio nota come problema **CartPole**. Nel mondo del cartpole abbiamo uno slider orizzontale che può muoversi a sinistra o a destra, e l'obiettivo è bilanciare un palo verticale sopra lo slider.
In questa lezione utilizzeremo una libreria chiamata **OpenAI Gym** per simulare diversi **ambienti**. Puoi eseguire il codice di questa lezione localmente (ad esempio, da Visual Studio Code), nel qual caso la simulazione si aprirà in una nuova finestra. Quando esegui il codice online, potrebbe essere necessario apportare alcune modifiche al codice, come descritto [qui](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
In questa lezione useremo una libreria chiamata **OpenAI Gym** per simulare diversi **ambienti**. Puoi eseguire il codice di questa lezione localmente (ad esempio da Visual Studio Code), nel qual caso la simulazione si aprirà in una nuova finestra. Quando esegui il codice online, potresti dover apportare alcune modifiche al codice, come descritto [qui](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
## OpenAI Gym
Nella lezione precedente, le regole del gioco e lo stato erano definiti dalla classe `Board` che abbiamo creato noi stessi. Qui utilizzeremo un **ambiente di simulazione** speciale, che simulerà la fisica dietro il bilanciamento del palo. Uno degli ambienti di simulazione più popolari per l'addestramento di algoritmi di apprendimento per rinforzo è chiamato [Gym](https://gym.openai.com/), mantenuto da [OpenAI](https://openai.com/). Utilizzando questo Gym possiamo creare diversi **ambienti**, dalla simulazione del cartpole ai giochi Atari.
Nella lezione precedente, le regole del gioco e lo stato erano definiti dalla classe `Board` che abbiamo definito noi stessi. Qui useremo un **ambiente di simulazione** speciale, che simula la fisica dietro il palo in equilibrio. Uno degli ambienti di simulazione più popolari per l'addestramento di algoritmi di apprendimento per rinforzo si chiama [Gym](https://gym.openai.com/), mantenuto da [OpenAI](https://openai.com/). Usando questo gym possiamo creare diversi **ambienti** da una simulazione di cartpole a giochi Atari.
> **Nota**: Puoi vedere altri ambienti disponibili su OpenAI Gym [qui](https://gym.openai.com/envs/#classic_control).
> **Nota**: Puoi vedere altri ambienti disponibili in OpenAI Gym [qui](https://gym.openai.com/envs/#classic_control).
Per prima cosa, installiamo Gym e importiamo le librerie necessarie (blocco di codice 1):
Per prima cosa, installiamo il gym e importiamo le librerie richieste (blocco di codice 1):
```python
import sys
@ -22,11 +42,11 @@ import random
## Esercizio - inizializzare un ambiente cartpole
Per lavorare con il problema del bilanciamento del cartpole, dobbiamo inizializzare l'ambiente corrispondente. Ogni ambiente è associato a:
Per lavorare con un problema di bilanciamento cartpole, dobbiamo inizializzare l'ambiente corrispondente. Ogni ambiente è associato a:
- **Observation space** che definisce la struttura delle informazioni che riceviamo dall'ambiente. Per il problema del cartpole, riceviamo la posizione del palo, la velocità e altri valori.
- **Spazio di osservazione** che definisce la struttura dell'informazione che riceviamo dall'ambiente. Per il problema cartpole, riceviamo la posizione del palo, la velocità e alcuni altri valori.
- **Action space** che definisce le azioni possibili. Nel nostro caso, lo spazio delle azioni è discreto e consiste in due azioni:**sinistra** e **destra**. (blocco di codice 2)
- **Spazio di azione** che definisce le azioni possibili. Nel nostro caso, lo spazio delle azioni è discreto e consiste di due azioni -**sinistra** e **destra**. (blocco di codice 2)
1. Per inizializzare, digita il seguente codice:
@ -37,11 +57,11 @@ Per lavorare con il problema del bilanciamento del cartpole, dobbiamo inizializz
print(env.action_space.sample())
```
Per vedere come funziona l'ambiente, eseguiamo una breve simulazione per 100 passi. Ad ogni passo, forniamo una delle azioni da intraprendere: in questa simulazione selezioniamo casualmente un'azione da `action_space`.
Per vedere come funziona l'ambiente, eseguiamo una breve simulazione di 100 passi. Ad ogni passo, forniamo una delle azioni da eseguire - in questa simulazione scegliamo casualmente un'azione da `action_space`.
1. Esegui il codice qui sotto e osserva cosa succede.
1. Esegui il codice qui sotto e guarda cosa succede.
✅ Ricorda che è preferibile eseguire questo codice su un'installazione locale di Python! (blocco di codice 3)
✅ Ricorda che è preferibile eseguire questo codice su un'installazione Python locale! (blocco di codice 3)
```python
env.reset()
@ -54,9 +74,9 @@ Per vedere come funziona l'ambiente, eseguiamo una breve simulazione per 100 pas
Dovresti vedere qualcosa di simile a questa immagine:


1. Durante la simulazione, dobbiamo ottenere osservazioni per decidere come agire. Infatti, la funzione step restituisce le osservazioni attuali, una funzione di ricompensa e il flag "done" che indica se ha senso continuare la simulazione o meno: (blocco di codice 4)
1. Durante la simulazione, dobbiamo ottenere osservazioni per decidere come agire. Infatti, la funzione step restituisce osservazioni correnti, una funzione di ricompensa e il flag done che indica se ha senso continuare la simulazione o no: (blocco di codice 4)
```python
env.reset()
@ -69,7 +89,7 @@ Per vedere come funziona l'ambiente, eseguiamo una breve simulazione per 100 pas
env.close()
```
Vedrai qualcosa di simile a questo nell'output del notebook:
Vedrai qualcosa di simile nell'output del notebook:
Il vettore di osservazione restituito ad ogni passo della simulazione contiene i seguenti valori:
Il vettore di osservazione restituito a ogni passo della simulazione contiene i seguenti valori:
- Posizione del carrello
- Velocità del carrello
- Angolo del palo
@ -95,30 +115,30 @@ Per vedere come funziona l'ambiente, eseguiamo una breve simulazione per 100 pas
print(env.observation_space.high)
```
Potresti anche notare che il valore della ricompensa ad ogni passo della simulazione è sempre 1. Questo perché il nostro obiettivo è sopravvivere il più a lungo possibile, ovvero mantenere il palo in una posizione ragionevolmente verticale per il periodo di tempo più lungo.
Potresti anche notare che il valore della ricompensa ad ogni passo della simulazione è sempre 1. Questo perché il nostro obiettivo è sopravvivere il più a lungo possibile, cioè mantenere il palo in posizione ragionevolmente verticale per il massimo tempo.
✅ Infatti, la simulazione CartPole è considerata risolta se riusciamo a ottenere una ricompensa media di 195 su 100 prove consecutive.
## Discretizzazione dello stato
Nel Q-Learning, dobbiamo costruire una Q-Table che definisca cosa fare in ogni stato. Per poterlo fare, lo stato deve essere **discreto**, più precisamente, deve contenere un numero finito di valori discreti. Pertanto, dobbiamo in qualche modo **discretizzare** le nostre osservazioni, mappandole a un insieme finito di stati.
Nel Q-Learning, dobbiamo costruire una Q-Table che definisca cosa fare in ogni stato. Per poterlo fare, lo stato deve essere **discreto**, più precisamente deve contenere un numero finito di valori discreti. Quindi, dobbiamo in qualche modo **discretizzare** le nostre osservazioni, mappandole a un insieme finito di stati.
Ci sono alcuni modi per farlo:
Ci sono diversi modi per farlo:
- **Dividere in intervalli**. Se conosciamo l'intervallo di un certo valore, possiamo dividere questo intervallo in un numero di **intervalli**, e poi sostituire il valore con il numero dell'intervallo a cui appartiene. Questo può essere fatto utilizzando il metodo [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) di numpy. In questo caso, conosceremo esattamente la dimensione dello stato, poiché dipenderà dal numero di intervalli che selezioniamo per la digitalizzazione.
- **Dividere in bins**. Se conosciamo l'intervallo di un certo valore, possiamo dividere questo intervallo in un numero di **bins**, e poi sostituire il valore con il numero del bin a cui appartiene. Questo può essere fatto usando il metodo numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). In questo caso, conosceremo precisamente la dimensione dello stato, perché dipenderà dal numero di bins scelti per la digitalizzazione.
✅ Possiamo utilizzare l'interpolazione lineare per portare i valori a un intervallo finito (ad esempio, da -20 a 20), e poi convertire i numeri in interi arrotondandoli. Questo ci dà un po' meno controllo sulla dimensione dello stato, soprattutto se non conosciamo gli intervalli esatti dei valori di input. Ad esempio, nel nostro caso 2 dei 4 valori non hanno limiti superiori/inferiori, il che potrebbe portare a un numero infinito di stati.
✅ Possiamo usare l'interpolazione lineare per portare i valori in un intervallo finito (ad esempio da -20 a 20), e poi convertire i numeri in interi arrotondandoli. Questo ci dà un controllo un po' minore sulla dimensione dello stato, specialmente se non conosciamo gli intervalli esatti dei valori in input. Per esempio, nel nostro caso 2 su 4 valori non hanno limiti superiori o inferiori, il che può risultare in un numero infinito di stati.
Nel nostro esempio, utilizzeremo il secondo approccio. Come potrai notare in seguito, nonostante i limiti superiori/inferiori indefiniti, quei valori raramente assumono valori al di fuori di certi intervalli finiti, quindi quegli stati con valori estremi saranno molto rari.
Nel nostro esempio, useremo il secondo approccio. Come noterai più avanti, nonostante i limiti superiori/inferiori indefiniti, questi valori raramente prendono valori al di fuori di certi intervalli finiti, quindi quegli stati con valori estremi saranno molto rari.
1. Ecco la funzione che prenderà l'osservazione dal nostro modello e produrrà una tupla di 4 valori interi: (blocco di codice 6)
1. Ecco la funzione che prende l'osservazione dal nostro modello e produce una tupla di 4 valori interi: (blocco di codice 6)
1. Esploriamo anche un altro metodo di discretizzazione utilizzando gli intervalli: (blocco di codice 7)
1. Esploriamo anche un altro metodo di discretizzazione usando i bins: (blocco di codice 7)
```python
def create_bins(i,num):
@ -126,17 +146,17 @@ Nel nostro esempio, utilizzeremo il secondo approccio. Come potrai notare in seg
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervalli di valori per ogni parametro
nbins = [20,20,10,10] # numero di intervalli per ogni parametro
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. Ora eseguiamo una breve simulazione e osserviamo quei valori discreti dell'ambiente. Sentiti libero di provare sia `discretize` che `discretize_bins` e vedere se c'è una differenza.
1. Ora eseguiamo una breve simulazione e osserviamo quei valori discreti dell'ambiente. Sentiti libero di provare sia `discretize` che `discretize_bins` e vedere se c'è differenza.
✅ `discretize_bins` restituisce il numero dell'intervallo, che è basato su 0. Quindi, per valori della variabile di input intorno a 0, restituisce il numero dal centro dell'intervallo (10). In `discretize`, non ci siamo preoccupati dell'intervallo dei valori di output, permettendo loro di essere negativi, quindi i valori dello stato non sono spostati e 0 corrisponde a 0. (blocco di codice 8)
✅ discretize_bins restituisce il numero del bin, che è basato su zero. Quindi per valori della variabile di input intorno a 0 restituisce il numero dal centro dell'intervallo (10). In discretize, non abbiamo considerato l'intervallo dei valori di output, permettendo che siano negativi, quindi i valori dello stato non sono spostati, e 0 corrisponde a 0. (blocco di codice 8)
```python
env.reset()
@ -150,15 +170,15 @@ Nel nostro esempio, utilizzeremo il secondo approccio. Come potrai notare in seg
env.close()
```
✅ Decommenta la riga che inizia con `env.render` se vuoi vedere come l'ambiente viene eseguito. Altrimenti puoi eseguirlo in background, il che è più veloce. Utilizzeremo questa esecuzione "invisibile" durante il nostro processo di Q-Learning.
✅ Decommenta la riga che inizia con env.render se vuoi vedere come l'ambiente esegue. Altrimenti puoi eseguirlo in background, che è più veloce. Useremo questa esecuzione "invisibile" durante il nostro processo di Q-Learning.
## La struttura della Q-Table
Nella lezione precedente, lo stato era una semplice coppia di numeri da 0 a 8, e quindi era conveniente rappresentare la Q-Table con un tensore numpy con una forma di 8x8x2. Se utilizziamo la discretizzazione con intervalli, la dimensione del nostro vettore di stato è anche nota, quindi possiamo utilizzare lo stesso approccio e rappresentare lo stato con un array di forma 20x20x10x10x2 (qui 2 è la dimensione dello spazio delle azioni, e le prime dimensioni corrispondono al numero di intervalli che abbiamo selezionato per ciascuno dei parametri nello spazio di osservazione).
Nella nostra lezione precedente, lo stato era una semplice coppia di numeri da 0 a 8, quindi era comodo rappresentare la Q-Table con un tensore numpy di forma 8x8x2. Se usiamo la discretizzazione a bins, la dimensione del nostro vettore stato è nota, quindi possiamo usare lo stesso approccio e rappresentare lo stato con un array di forma 20x20x10x10x2 (qui 2 è la dimensione dello spazio azioni, e le prime dimensioni corrispondono al numero di bins selezionati per ciascun parametro nello spazio di osservazione).
Tuttavia, a volte le dimensioni precise dello spazio di osservazione non sono note. Nel caso della funzione `discretize`, non possiamo mai essere sicuri che il nostro stato rimanga entro certi limiti, poiché alcuni dei valori originali non sono limitati. Pertanto, utilizzeremo un approccio leggermente diverso e rappresenteremo la Q-Table con un dizionario.
Tuttavia, a volte le dimensioni precise dello spazio di osservazione non sono note. Nel caso della funzione `discretize`, non possiamo mai essere sicuri che il nostro stato rimanga entro certi limiti, perché alcuni dei valori originali non sono vincolati. Quindi useremo un approccio leggermente diverso e rappresenteremo la Q-Table con un dizionario.
1. Usa la coppia *(state,action)* come chiave del dizionario, e il valore corrisponderà al valore della Q-Table. (blocco di codice 9)
1. Usa la coppia *(stato, azione)* come chiave del dizionario, e il valore corrisponderà a una voce della Q-Table. (blocco di codice 9)
```python
Q = {}
@ -168,38 +188,38 @@ Tuttavia, a volte le dimensioni precise dello spazio di osservazione non sono no
return [Q.get((state,a),0) for a in actions]
```
Qui definiamo anche una funzione `qvalues()`, che restituisce un elenco di valori della Q-Table per un dato stato che corrisponde a tutte le azioni possibili. Se la voce non è presente nella Q-Table, restituiremo 0 come valore predefinito.
Qui definiamo anche una funzione `qvalues()`, che restituisce una lista di valori della Q-Table per uno stato dato, corrispondenti a tutte le azioni possibili. Se la voce non è presente nella Q-Table, ritorneremo 0 come valore predefinito.
## Iniziamo il Q-Learning
## Iniziamo Q-Learning
Ora siamo pronti per insegnare a Peter a bilanciarsi!
Ora siamo pronti per insegnare a Peter a mantenere l'equilibrio!
1. Per prima cosa, impostiamo alcuni iperparametri: (blocco di codice 10)
1. Prima, impostiamo alcuni iperparametri: (blocco di codice 10)
```python
# hyperparameters
# iperparametri
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Qui, `alpha` è il **learning rate** che definisce in che misura dovremmo regolare i valori attuali della Q-Table ad ogni passo. Nella lezione precedente abbiamo iniziato con 1, e poi abbiamo ridotto `alpha` a valori più bassi durante l'addestramento. In questo esempio lo manterremo costante per semplicità, e puoi sperimentare con l'aggiustamento dei valori di `alpha` più tardi.
Qui, `alpha` è il **tasso di apprendimento** che definisce in quale misura dobbiamo aggiornare i valori attuali della Q-Table a ogni passo. Nella lezione precedente abbiamo iniziato con 1 e poi diminuito `alpha` durante l'addestramento. In questo esempio lo manterremo costante per semplicità, e potrai sperimentare con la regolazione di `alpha` più tardi.
`gamma` è il **discount factor** che mostra in che misura dovremmo dare priorità alla ricompensa futura rispetto a quella attuale.
`gamma` è il **fattore di sconto** che mostra in quale misura dobbiamo dare priorità alla ricompensa futura rispetto a quella attuale.
`epsilon` è il **exploration/exploitation factor** che determina se dovremmo preferire l'esplorazione o lo sfruttamento. Nel nostro algoritmo, in una percentuale di casi determinata da `epsilon` selezioneremo la prossima azione in base ai valori della Q-Table, e nel restante numero di casi eseguiremo un'azione casuale. Questo ci permetterà di esplorare aree dello spazio di ricerca che non abbiamo mai visto prima.
`epsilon` è il **fattore esplorazione/sfruttamento** che determina se preferiamo l'esplorazione allo sfruttamento o viceversa. Nel nostro algoritmo, nel `epsilon` percento dei casi selezioneremo la prossima azione in base ai valori della Q-Table, e nel restante selezioneremo un'azione casuale. Questo ci permetterà di esplorare aree dello spazio di ricerca mai viste prima.
✅ In termini di bilanciamento - scegliere un'azione casuale (esplorazione) agirebbe come un colpo casuale nella direzione sbagliata, e il palo dovrebbe imparare a recuperare l'equilibrio da questi "errori".
✅ In termini di bilanciamento - scegliere un'azione casuale (esplorazione) corrisponderebbe a un colpo casuale nella direzione sbagliata, e il palo dovrà imparare a recuperare l'equilibrio da quegli "errori".
### Migliorare l'algoritmo
Possiamo anche apportare due miglioramenti al nostro algoritmo rispetto alla lezione precedente:
Possiamo anche fare due miglioramenti al nostro algoritmo dalla lezione precedente:
- **Calcolare la ricompensa cumulativa media**, su un numero di simulazioni. Stampiamo i progressi ogni 5000 iterazioni e calcoliamo la media della ricompensa cumulativa su quel periodo di tempo. Significa che se otteniamo più di 195 punti, possiamo considerare il problema risolto, con una qualità anche superiore a quella richiesta.
- **Calcolare la ricompensa cumulativa media**, su un numero di simulazioni. Stamperemo i progressi ogni 5000 iterazioni, e faremo la media della ricompensa cumulativa in quel periodo. Significa che se otteniamo più di 195 punti possiamo considerare il problema risolto, con qualità anche superiore a quella richiesta.
- **Calcolare il massimo risultato cumulativo medio**, `Qmax`, e memorizzeremo la Q-Table corrispondente a quel risultato. Quando esegui l'addestramento noterai che a volte il risultato cumulativo medio inizia a diminuire, e vogliamo mantenere i valori della Q-Table che corrispondono al miglior modello osservato durante l'addestramento.
- **Calcolare il massimo risultato medio cumulativo**, `Qmax`, e memorizzeremo la Q-Table corrispondente a quel risultato. Quando alleniamo, noterai che a volte il risultato medio cumulativo inizia a diminuire, e vogliamo mantenere i valori della Q-Table corrispondenti al miglior modello osservato durante l'addestramento.
1. Raccogli tutte le ricompense cumulative ad ogni simulazione nel vettore `rewards` per un successivo grafico. (blocco di codice 11)
1. Raccogli tutte le ricompense cumulative a ogni simulazione nel vettore `rewards` per eventuali grafici futuri. (blocco di codice 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Possiamo anche apportare due miglioramenti al nostro algoritmo rispetto alla lez
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == esegui la simulazione ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# sfruttamento - scegli l'azione secondo le probabilità della tabella Q
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# esplorazione - scegli casualmente l'azione
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Possiamo anche apportare due miglioramenti al nostro algoritmo rispetto alla lez
@ -240,25 +260,25 @@ Possiamo anche apportare due miglioramenti al nostro algoritmo rispetto alla lez
cum_rewards=[]
```
Cosa puoi notare da questi risultati:
Ciò che potresti notare da questi risultati:
- **Vicini al nostro obiettivo**. Siamo molto vicini a raggiungere l'obiettivo di ottenere 195 ricompense cumulative su 100+ esecuzioni consecutive della simulazione, o potremmo averlo effettivamente raggiunto! Anche se otteniamo numeri più piccoli, non lo sappiamo con certezza, perché calcoliamo la media su 5000 esecuzioni, e solo 100 esecuzioni sono richieste nei criteri formali.
- **Vicino al nostro obiettivo**. Siamo molto vicini a raggiungere l'obiettivo di ottenere 195 ricompense cumulative su 100+ esecuzioni consecutive della simulazione, o potremmo averlo effettivamente raggiunto! Anche se otteniamo numeri più piccoli, non lo sappiamo ancora, perché facciamo la media su 5000 esecuzioni e solo 100 sono richieste nel criterio formale.
- **La ricompensa inizia a diminuire**. A volte la ricompensa inizia a diminuire, il che significa che possiamo "distruggere" i valori già appresi nella Q-Table con quelli che peggiorano la situazione.
Questa osservazione è più chiaramente visibile se tracciamo i progressi dell'addestramento.
Questa osservazione è più visibile se tracciamo i progressi dell'addestramento.
## Tracciare i progressi dell'addestramento
## Grafico del progresso nell'addestramento
Durante l'addestramento, abbiamo raccolto il valore della ricompensa cumulativa ad ogni iterazione nel vettore `rewards`. Ecco come appare quando lo tracciamo rispetto al numero di iterazioni:
Durante l'addestramento, abbiamo raccolto il valore della ricompensa cumulativa a ogni iterazione nel vettore `rewards`. Ecco come appare se lo tracciamo rispetto al numero iterazione:
Da questo grafico, non è possibile dedurre nulla, perché a causa della natura del processo di addestramento stocastico la lunghezza delle sessioni di addestramento varia notevolmente. Per dare più senso a questo grafico, possiamo calcolare la **media mobile** su una serie di esperimenti, diciamo 100. Questo può essere fatto comodamente usando `np.convolve`: (blocco di codice 12)
Da questo grafico non è possibile trarre conclusioni, perché a causa della natura stocastica del processo di addestramento la durata delle sessioni varia molto. Per dare più senso a questo grafico, possiamo calcolare la **media mobile** su una serie di esperimenti, diciamo 100. Questo può essere fatto comodamente usando `np.convolve`: (blocco di codice 12)
Per rendere l'apprendimento più stabile, ha senso regolare alcuni dei nostri iperparametri durante l'addestramento. In particolare:
- **Per il learning rate**, `alpha`, possiamo iniziare con valori vicini a 1 e poi continuare a diminuire il parametro. Con il tempo, otterremo buone probabilità nella Q-Table, e quindi dovremmo regolarle leggermente, senza sovrascrivere completamente con nuovi valori.
- **Per il tasso di apprendimento**, `alpha`, possiamo iniziare con valori vicini a 1 e poi diminuire gradualmente il parametro. Con il tempo otterremo buone probabilità nella Q-Table, quindi dovremmo aggiustarle leggermente, non sovrascriverle completamente con nuovi valori.
- **Aumentare epsilon**. Potremmo voler aumentare lentamente `epsilon`, per esplorare di meno e sfruttare di più. Probabilmente conviene partire da un valore basso di `epsilon` e salire quasi a 1.
> **Compito 1**: Gioca con i valori degli iperparametri e vedi se riesci a ottenere una ricompensa cumulativa più alta. Riuscirai a superare 195?
- **Aumentare epsilon**. Potremmo voler aumentare lentamente `epsilon`, per esplorare meno e sfruttare di più. Probabilmente ha senso iniziare con un valore più basso di `epsilon` e aumentarlo fino a quasi 1.
> **Compito 1**: Prova a modificare i valori degli iperparametri e verifica se riesci a ottenere un premio cumulativo più alto. Riesci a superare 195?
> **Task 2**: Per risolvere formalmente il problema, è necessario ottenere una ricompensa media di 195 su 100 esecuzioni consecutive. Misura questo durante l'addestramento e assicurati di aver risolto formalmente il problema!
> **Compito 2**: Per risolvere formalmente il problema, devi ottenere una ricompensa media di 195 su 100 esecuzioni consecutive. Misura questo durante l’addestramento e assicurati di aver risolto formalmente il problema!
## Vedere il risultato in azione
Sarebbe interessante vedere effettivamente come si comporta il modello addestrato. Eseguiamo la simulazione e seguiamo la stessa strategia di selezione delle azioni utilizzata durante l'addestramento, campionando secondo la distribuzione di probabilità nella Q-Table: (blocco di codice 13)
Sarebbe interessante vedere effettivamente come si comporta il modello addestrato. Eseguiamo la simulazione e seguiamo la stessa strategia di selezione delle azioni usata durante l’addestramento, campionando secondo la distribuzione di probabilità nella Q-Table: (blocco codice 13)
```python
obs = env.reset()
@ -295,30 +318,32 @@ while not done:
env.close()
```
Dovresti vedere qualcosa di simile:
Dovresti vedere qualcosa di simile a questo:


---
## 🚀Sfida
> **Task 3**: Qui abbiamo utilizzato la copia finale della Q-Table, che potrebbe non essere la migliore. Ricorda che abbiamo salvato la Q-Table con le migliori prestazioni nella variabile `Qbest`! Prova lo stesso esempio con la Q-Table con le migliori prestazioni copiando `Qbest` su `Q` e verifica se noti la differenza.
> **Compito 3**: Qui abbiamo usato la copia finale della Q-Table, che potrebbe non essere la migliore. Ricorda che abbiamo salvato la Q-Table con le migliori prestazioni nella variabile `Qbest`! Prova lo stesso esempio con la Q-Table con le migliori prestazioni copiando `Qbest` su `Q` e verifica se noti la differenza.
> **Task 4**: Qui non stavamo selezionando l'azione migliore a ogni passo, ma piuttosto campionando con la corrispondente distribuzione di probabilità. Avrebbe più senso selezionare sempre l'azione migliore, con il valore più alto nella Q-Table? Questo può essere fatto utilizzando la funzione `np.argmax` per trovare il numero dell'azione corrispondente al valore più alto nella Q-Table. Implementa questa strategia e verifica se migliora l'equilibrio.
> **Compito 4**: Qui non abbiamo selezionato l’azione migliore a ogni passo, ma abbiamo campionato secondo la corrispondente distribuzione di probabilità. Ha senso selezionare sempre l’azione migliore, con il valore più alto della Q-Table? Questo può essere fatto usando la funzione `np.argmax` per trovare il numero dell’azione corrispondente al valore più alto nella Q-Table. Implementa questa strategia e verifica se migliora l’equilibrio.
Abbiamo ora imparato come addestrare agenti per ottenere buoni risultati semplicemente fornendo loro una funzione di ricompensa che definisce lo stato desiderato del gioco e dando loro l'opportunità di esplorare in modo intelligente lo spazio di ricerca. Abbiamo applicato con successo l'algoritmo di Q-Learning nei casi di ambienti discreti e continui, ma con azioni discrete.
Ora abbiamo imparato come addestrare agenti a ottenere buoni risultati fornendo loro una funzione di ricompensa che definisce lo stato desiderato del gioco, e dando loro l’opportunità di esplorare in modo intelligente lo spazio di ricerca. Abbiamo applicato con successo l’algoritmo Q-Learning in ambienti discreti e continui, ma con azioni discrete.
È importante studiare anche situazioni in cui lo stato delle azioni è continuo e quando lo spazio di osservazione è molto più complesso, come l'immagine dello schermo di un gioco Atari. In questi problemi spesso è necessario utilizzare tecniche di machine learning più potenti, come le reti neurali, per ottenere buoni risultati. Questi argomenti più avanzati saranno trattati nel nostro prossimo corso avanzato di intelligenza artificiale.
È importante studiare anche situazioni in cui lo stato dell’azione è continuo e quando lo spazio di osservazione è molto più complesso, come l’immagine dello schermo di un gioco Atari. In questi problemi spesso è necessario usare tecniche di apprendimento automatico più potenti, come le reti neurali, per ottenere buoni risultati. Questi argomenti più avanzati sono oggetto del nostro prossimo corso avanzato di AI.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
# Budowanie rozwiązań Machine Learning z odpowiedzialną sztuczną inteligencją
# Tworzenie rozwiązań uczenia maszynowego z odpowiedzialną AI

> Szkicowa notatka autorstwa [Tomomi Imura](https://www.twitter.com/girlie_mac)

> Szkic autorstwa [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
## Wprowadzenie
W tym programie nauczania zaczniesz odkrywać, jak uczenie maszynowe wpływa na nasze codzienne życie. Już teraz systemy i modele są zaangażowane w codzienne zadania decyzyjne, takie jak diagnozy medyczne, zatwierdzanie kredytów czy wykrywanie oszustw. Dlatego ważne jest, aby te modele działały dobrze i dostarczały wyniki, którym można zaufać. Podobnie jak każda aplikacja programowa, systemy AI mogą nie spełniać oczekiwań lub prowadzić do niepożądanych rezultatów. Dlatego kluczowe jest zrozumienie i wyjaśnienie zachowania modelu AI.
W tym programie nauczania zaczniesz odkrywać, jak uczenie maszynowe może wpływać i wpływa na nasze codzienne życie. Już teraz systemy i modele biorą udział w codziennych zadaniach decyzyjnych, takich jak diagnozy medyczne, zatwierdzanie pożyczek czy wykrywanie oszustw. Dlatego ważne jest, aby te modele działały dobrze i dostarczały wyniki godne zaufania. Podobnie jak każda aplikacja oprogramowania, systemy AI mogą nie spełnić oczekiwań lub mieć niepożądany rezultat. Dlatego tak istotne jest, aby rozumieć i móc wyjaśnić zachowanie modelu AI.
Wyobraź sobie, co może się stać, gdy dane używane do budowy tych modeli nie uwzględniają pewnych grup demograficznych, takich jak rasa, płeć, poglądy polityczne, religia, lub gdy są one nadmiernie reprezentowane. Co, jeśli wyniki modelu są interpretowane w sposób faworyzujący pewne grupy demograficzne? Jakie są konsekwencje dla aplikacji? Co się dzieje, gdy model prowadzi do szkodliwych rezultatów? Kto jest odpowiedzialny za zachowanie systemów AI? To są pytania, które będziemy eksplorować w tym programie nauczania.
Wyobraź sobie, co może się stać, gdy dane używane do budowy tych modeli nie zawierają pewnych grup demograficznych, takich jak rasa, płeć, poglądy polityczne, religia, lub gdy takie grupy są nierównomiernie reprezentowane. Co się stanie, gdy wyniki modelu będą interpretowane tak, aby faworyzować niektóre grupy demograficzne? Jakie będą tego konsekwencje dla aplikacji? Dodatkowo, co się stanie, gdy model da negatywny wynik i zaszkodzi ludziom? Kto jest odpowiedzialny za zachowanie systemów AI? To są pytania, które omówimy w tym programie nauczania.
W tej lekcji dowiesz się:
W tej lekcji:
- Dlaczego sprawiedliwość w uczeniu maszynowym i związane z nią szkody są tak ważne.
- Jak badać odstające przypadki i nietypowe scenariusze, aby zapewnić niezawodność i bezpieczeństwo.
- Dlaczego projektowanie inkluzywnych systemów jest kluczowe dla wzmocnienia pozycji wszystkich ludzi.
- Jak istotne jest chronienie prywatności i bezpieczeństwa danych oraz osób.
- Dlaczego podejście „szklanej skrzynki” jest ważne dla wyjaśnienia zachowania modeli AI.
- Jak odpowiedzialność buduje zaufanie do systemów AI.
- Zwiększysz świadomość na temat znaczenia sprawiedliwości w uczeniu maszynowym oraz szkodliwych skutków związanych z niesprawiedliwością.
- Zapoznasz się z praktyką badania wartości odstających i nietypowych scenariuszy, aby zapewnić niezawodność i bezpieczeństwo.
- Zdobędziesz zrozumienie potrzeby upodmiotowienia wszystkich poprzez projektowanie systemów inkluzywnych.
- Zbadasz, jak ważne jest ochronienie prywatności i bezpieczeństwa danych oraz osób.
- Zrozumiesz znaczenie podejścia typu „szklana skrzynka” do wyjaśniania zachowania modeli AI.
- Będziesz świadomy, jak istotna jest odpowiedzialność dla budowania zaufania do systemów AI.
## Wymagania wstępne
Jako wymaganie wstępne, zapoznaj się z „Zasadami odpowiedzialnej AI” w ścieżce nauki i obejrzyj poniższy film na ten temat:
Jako wymaganie wstępne, proszę ukończ ścieżkę nauki „Zasady odpowiedzialnej AI” oraz obejrzyj poniższy film na ten temat:
Dowiedz się więcej o odpowiedzialnej AI, korzystając z tej [ścieżki nauki](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
Dowiedz się więcej o odpowiedzialnej AI, śledząc tę [Ścieżkę nauki](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[](https://youtu.be/dnC8-uUZXSc "Podejście Microsoftu do odpowiedzialnej AI")
[](https://youtu.be/dnC8-uUZXSc "Podejście Microsoft do odpowiedzialnej AI")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć film: Podejście Microsoftu do odpowiedzialnej AI
> 🎥 Kliknij obraz powyżej, aby obejrzeć film: Podejście Microsoft do odpowiedzialnej AI
## Sprawiedliwość
Systemy AI powinny traktować wszystkich sprawiedliwie i unikać różnic w traktowaniu podobnych grup ludzi. Na przykład, gdy systemy AI udzielają wskazówek dotyczących leczenia medycznego, aplikacji kredytowych czy zatrudnienia, powinny wydawać takie same rekomendacje wszystkim osobom o podobnych objawach, sytuacji finansowej czy kwalifikacjach zawodowych. Każdy z nas jako człowiek nosi w sobie odziedziczone uprzedzenia, które wpływają na nasze decyzje i działania. Te uprzedzenia mogą być widoczne w danych, które wykorzystujemy do trenowania systemów AI. Czasami takie manipulacje zdarzają się nieumyślnie. Często trudno jest świadomie zauważyć, kiedy wprowadzamy uprzedzenia do danych.
Systemy AI powinny traktować wszystkich sprawiedliwie i unikać różnicowania podobnych grup osób w różny sposób. Na przykład, gdy systemy AI udzielają wskazówek dotyczących leczenia medycznego, aplikacji o pożyczkę czy zatrudnienia, powinny udzielać tych samych rekomendacji wszystkim z podobnymi objawami, sytuacją finansową lub kwalifikacjami zawodowymi. Każdy z nas jako człowiek nosi w sobie dziedziczone uprzedzenia, które wpływają na nasze decyzje i działania. Uprzedzenia te mogą być widoczne w danych, których używamy do trenowania systemów AI. Takie manipulacje mogą czasem zachodzić nieświadomie. Często trudno jest świadomie rozpoznać, kiedy wprowadzasz stronniczość do danych.
**„Niesprawiedliwość”** obejmuje negatywne skutki, czyli „szkody”, dla grupy ludzi, takich jak te zdefiniowane na podstawie rasy, płci, wieku czy statusu niepełnosprawności. Główne szkody związane ze sprawiedliwością można sklasyfikować jako:
**„Niesprawiedliwość”** obejmuje negatywne skutki, czyli „szkody”, które dotyczą pewnej grupy ludzi, definiowanej np. przez rasę, płeć, wiek czy status niepełnosprawności. Główne szkody związane ze sprawiedliwością można sklasyfikować jako:
- **Alokacja**, gdy na przykład płeć lub etniczność jest faworyzowana kosztem innych.
- **Jakość usług**. Jeśli dane są trenowane dla jednego konkretnego scenariusza, ale rzeczywistość jest znacznie bardziej złożona, prowadzi to do słabo działającej usługi. Na przykład dozownik mydła, który nie potrafił rozpoznać osób o ciemnej skórze. [Źródło](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Oczernianie**. Niesprawiedliwe krytykowanie i etykietowanie czegoś lub kogoś. Na przykład technologia etykietowania obrazów niesławnie błędnie oznaczyła zdjęcia osób o ciemnej skórze jako goryle.
- **Nadmierna lub niedostateczna reprezentacja**. Chodzi o to, że pewna grupa nie jest widoczna w określonym zawodzie, a każda usługa lub funkcja, która to utrwala, przyczynia się do szkody.
- **Stereotypizacja**. Przypisywanie określonej grupie z góry ustalonych cech. Na przykład system tłumaczenia językowego między angielskim a tureckim może mieć nieścisłości wynikające ze stereotypowych skojarzeń z płcią.
- **Alokacja**, jeśli np. jedna płeć lub etniczność jest faworyzowana nad inną.
- **Jakość usług**. Jeśli dane są szkolone dla jednego konkretnego scenariusza, ale rzeczywistość jest znacznie bardziej złożona, prowadzi to do słabej jakości usług. Na przykład dozownik mydła, który nie jest w stanie wykryć osób o ciemnej skórze. [Odnośnik](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Oczernianie**. Niesprawiedliwe krytykowanie i etykietowanie czegoś lub kogoś. Na przykład technologia rozpoznawania obrazów niesłusznie oznaczyła zdjęcia osób o ciemnej skórze jako goryle.
- **Nadmierna lub niedostateczna reprezentacja**. Idea, że dana grupa nie występuje w pewnym zawodzie, a każda usługa lub funkcja, która to utrzymuje, przyczynia się do szkód.
- **Stereotypowanie**. Kojarzenie danej grupy z przypisanymi atrybutami. Na przykład system tłumaczeń między angielskim a tureckim może mieć niedokładności ze względu na słowa o stereotypowych powiązaniach z płcią.


> tłumaczenie na turecki


> tłumaczenie z powrotem na angielski
Podczas projektowania i testowania systemów AI musimy upewnić się, że AI jest sprawiedliwe i nie jest zaprogramowane do podejmowania stronniczych lub dyskryminujących decyzji, których ludzie również nie powinni podejmować. Zapewnienie sprawiedliwości w AI i uczeniu maszynowym pozostaje złożonym wyzwaniem socjotechnicznym.
Projektując i testując systemy AI, musimy zapewnić, że AI jest sprawiedliwa i nie jest zaprogramowana do podejmowania stronniczych lub dyskryminujących decyzji, których również zakazuje się ludziom. Zapewnienie sprawiedliwości w AI i uczeniu maszynowym pozostaje skomplikowanym wyzwaniem socjotechnicznym.
### Niezawodność i bezpieczeństwo
Aby budować zaufanie, systemy AI muszą być niezawodne, bezpieczne i spójne w normalnych i nieoczekiwanych warunkach. Ważne jest, aby wiedzieć, jak systemy AI będą się zachowywać w różnych sytuacjach, zwłaszcza w przypadku odstających przypadków. Podczas budowania rozwiązań AI należy poświęcić znaczną uwagę temu, jak radzić sobie z szeroką gamą okoliczności, które mogą napotkać rozwiązania AI. Na przykład samochód autonomiczny musi stawiać bezpieczeństwo ludzi na pierwszym miejscu. W związku z tym AI napędzające samochód musi uwzględniać wszystkie możliwe scenariusze, które samochód może napotkać, takie jak noc, burze, zamiecie śnieżne, dzieci biegnące przez ulicę, zwierzęta domowe, roboty drogowe itd. To, jak dobrze system AI radzi sobie z szerokim zakresem warunków w sposób niezawodny i bezpieczny, odzwierciedla poziom przewidywania, który naukowiec danych lub programista AI uwzględnił podczas projektowania lub testowania systemu.
Aby budować zaufanie, systemy AI muszą być niezawodne, bezpieczne i spójne w normalnych i nieoczekiwanych warunkach. Ważne jest, by znać zachowanie systemów AI w różnych sytuacjach, zwłaszcza gdy są wartościami odstającymi. Budując rozwiązania AI, należy poświęcić dużo uwagi na to, jak poradzić sobie z różnorodnymi okolicznościami, które system AI może napotkać. Na przykład samochód autonomiczny musi stawiać bezpieczeństwo ludzi na pierwszym miejscu. W efekcie AI napędzająca ten samochód musi rozważyć wszystkie możliwe scenariusze, takie jak noc, burze, śnieżyce, dzieci przebiegające przez ulicę, zwierzęta domowe, roboty drogowe itd. Jak dobrze system AI radzi sobie z szerokim zakresem warunków, odzwierciedla poziom przewidywań, które naukowiec danych lub deweloper AI uwzględnił podczas projektowania lub testowania systemu.
> [🎥 Kliknij tutaj, aby obejrzeć film: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inkluzywność
Systemy AI powinny być projektowane tak, aby angażować i wzmacniać pozycję wszystkich ludzi. Podczas projektowania i wdrażania systemów AI naukowcy danych i programiści AI identyfikują i rozwiązują potencjalne bariery w systemie, które mogłyby nieumyślnie wykluczyć ludzi. Na przykład na świecie jest 1 miliard osób z niepełnosprawnościami. Dzięki postępowi w dziedzinie AI mogą oni łatwiej uzyskiwać dostęp do szerokiego zakresu informacji i możliwości w codziennym życiu. Rozwiązywanie barier tworzy możliwości innowacji i rozwijania produktów AI z lepszymi doświadczeniami, które przynoszą korzyści wszystkim.
Systemy AI powinny być projektowane tak, aby angażować i upodmiotawiać wszystkich. Projektując i wdrażając systemy AI, naukowcy danych i deweloperzy AI identyfikują i usuwają potencjalne bariery w systemie, które mogą nieświadomie wykluczać ludzi. Na przykład na świecie jest 1 miliard osób z niepełnosprawnościami. Dzięki rozwojowi AI mogą one łatwiej mieć dostęp do szerokiej gamy informacji i możliwości w codziennym życiu. Usuwanie barier tworzy możliwości innowacji i opracowania produktów AI z lepszym doświadczeniem, które przynosi korzyści wszystkim.
> [🎥 Kliknij tutaj, aby obejrzeć film: inkluzywność w AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Bezpieczeństwo i prywatność
Systemy AI powinny być bezpieczne i szanować prywatność ludzi. Ludzie mają mniejsze zaufanie do systemów, które narażają ich prywatność, informacje lub życie na ryzyko. Podczas trenowania modeli uczenia maszynowego polegamy na danych, aby uzyskać najlepsze wyniki. W związku z tym należy wziąć pod uwagę pochodzenie danych i ich integralność. Na przykład, czy dane zostały dostarczone przez użytkownika, czy były publicznie dostępne? Następnie, pracując z danymi, kluczowe jest opracowanie systemów AI, które mogą chronić poufne informacje i opierać się atakom. W miarę jak AI staje się coraz bardziej powszechne, ochrona prywatności i zabezpieczanie ważnych informacji osobistych i biznesowych staje się coraz bardziej istotna i złożona. Problemy związane z prywatnością i bezpieczeństwem danych wymagają szczególnej uwagi w przypadku AI, ponieważ dostęp do danych jest niezbędny, aby systemy AI mogły dokonywać dokładnych i świadomych prognoz oraz podejmować decyzje dotyczące ludzi.
Systemy AI powinny być bezpieczne i szanować prywatność ludzi. Ludzie mniej ufają systemom, które narażają ich prywatność, informacje lub życie na ryzyko. Trenując modele uczenia maszynowego, opieramy się na danych, aby uzyskać najlepsze wyniki. W związku z tym należy rozważyć pochodzenie danych i ich integralność. Na przykład, czy dane zostały przesłane przez użytkownika, czy są publicznie dostępne? Następnie, podczas pracy z danymi, kluczowe jest opracowanie systemów AI, które chronią informacje poufne i są odporne na ataki. W miarę jak AI staje się bardziej powszechna, ochrona prywatności i zabezpieczenie ważnych informacji osobistych i biznesowych staje się coraz ważniejsze i bardziej skomplikowane. Problemy prywatności i bezpieczeństwa danych wymagają szczególnej uwagi w AI, ponieważ dostęp do danych jest niezbędny, aby systemy AI mogły dokonywać dokładnych i świadomych przewidywań oraz decyzji dotyczących ludzi.
> [🎥 Kliknij tutaj, aby obejrzeć film: bezpieczeństwo w AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Branża poczyniła znaczące postępy w zakresie prywatności i bezpieczeństwa, w dużej mierze dzięki regulacjom takim jak GDPR (Ogólne Rozporządzenie o Ochronie Danych).
- Jednak w przypadku systemów AI musimy uznać napięcie między potrzebą większej ilości danych osobowych w celu uczynienia systemów bardziej osobistymi i skutecznymi – a prywatnością.
- Podobnie jak w przypadku narodzin połączonych komputerów z internetem, obserwujemy również ogromny wzrost liczby problemów związanych z bezpieczeństwem w kontekście AI.
- Jednocześnie widzimy, że AI jest wykorzystywane do poprawy bezpieczeństwa. Na przykład większość nowoczesnych skanerów antywirusowych jest dziś napędzana przez heurystyki AI.
- Musimy upewnić się, że nasze procesy Data Science harmonijnie współgrają z najnowszymi praktykami dotyczącymi prywatności i bezpieczeństwa.
- Jako branża dokonaliśmy znaczących postępów w zakresie prywatności i bezpieczeństwa, w dużej mierze dzięki regulacjom takim jak RODO (Ogólne rozporządzenie o ochronie danych).
- Jednak w systemach AI musimy uznać napięcie między potrzebą większej ilości danych osobowych, aby uczynić systemy bardziej osobistymi i skutecznymi – a prywatnością.
- Podobnie jak przy narodzinach połączonych komputerów z internetem, obserwujemy również gwałtowny wzrost problemów związanych z bezpieczeństwem w AI.
- Jednocześnie widzimy, że AI jest wykorzystywana do poprawy bezpieczeństwa. Na przykład większość nowoczesnych skanerów antywirusowych opiera się obecnie na heurystykach AI.
- Musimy zapewnić, że nasze procesy Data Science harmonijnie współgrają z najnowszymi praktykami w zakresie prywatności i bezpieczeństwa.
### Przejrzystość
Systemy AI powinny być zrozumiałe. Kluczowym elementem przejrzystości jest wyjaśnienie zachowania systemów AI i ich komponentów. Poprawa zrozumienia systemów AI wymaga, aby interesariusze rozumieli, jak i dlaczego działają, aby mogli zidentyfikować potencjalne problemy z wydajnością, obawy dotyczące bezpieczeństwa i prywatności, uprzedzenia, praktyki wykluczające lub niezamierzone rezultaty. Wierzymy również, że ci, którzy korzystają z systemów AI, powinni być uczciwi i otwarci w kwestii tego, kiedy, dlaczego i jak decydują się je wdrażać. A także w kwestii ograniczeń systemów, z których korzystają. Na przykład, jeśli bank korzysta z systemu AI wspierającego decyzje kredytowe dla konsumentów, ważne jest, aby przeanalizować wyniki i zrozumieć, które dane wpływają na rekomendacje systemu. Rządy zaczynają regulować AI w różnych branżach, więc naukowcy danych i organizacje muszą wyjaśnić, czy system AI spełnia wymagania regulacyjne, zwłaszcza gdy pojawia się niepożądany rezultat.
### Przejrzystość
Systemy AI powinny być zrozumiałe. Kluczową częścią przejrzystości jest wyjaśnianie zachowania systemów AI i ich komponentów. Poprawa zrozumienia systemów AI wymaga, aby interesariusze rozumieli, jak i dlaczego one funkcjonują, tak aby mogli zidentyfikować potencjalne problemy z wydajnością, bezpieczeństwem i prywatnością, uprzedzeniami, praktykami wykluczającymi lub niezamierzonymi skutkami. Wierzymy również, że osoby korzystające z systemów AI powinny być uczciwe i otwarte, kiedy, dlaczego i jak decydują się je wdrożyć, a także znać ograniczenia używanych systemów. Na przykład, jeśli bank wykorzystuje system AI do wspierania decyzji kredytowych, ważne jest, aby badać wyniki i rozumieć, które dane wpływają na rekomendacje systemu. Rządy zaczynają regulować AI w różnych branżach, dlatego naukowcy danych i organizacje muszą wyjaśnić, czy system AI spełnia wymagania regulacyjne, szczególnie gdy wystąpi niepożądany wynik.
> [🎥 Kliknij tutaj, aby obejrzeć film: przejrzystość w AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Ponieważ systemy AI są tak złożone, trudno jest zrozumieć, jak działają i interpretować wyniki.
- Ten brak zrozumienia wpływa na sposób zarządzania, operacjonalizacji i dokumentowania tych systemów.
- Co ważniejsze, brak zrozumienia wpływa na decyzje podejmowane na podstawie wyników, które te systemy produkują.
- Brak zrozumienia wpływa na sposób, w jaki systemy te są zarządzane, wdrażane i dokumentowane.
- Co ważniejsze, brak zrozumienia wpływa na decyzje podejmowane na podstawie wyników produkowanych przez te systemy.
### Odpowiedzialność
Osoby projektujące i wdrażające systemy AI muszą być odpowiedzialne za sposób, w jaki ich systemy działają. Potrzeba odpowiedzialności jest szczególnie istotna w przypadku technologii wrażliwych, takich jak rozpoznawanie twarzy. W ostatnim czasie rośnie zapotrzebowanie na technologię rozpoznawania twarzy, zwłaszcza ze strony organizacji zajmujących się egzekwowaniem prawa, które dostrzegają potencjał tej technologii w takich zastosowaniach jak odnajdywanie zaginionych dzieci. Jednak te technologie mogą być potencjalnie wykorzystywane przez rządy do naruszania podstawowych wolności obywateli, na przykład poprzez umożliwienie ciągłego monitorowania konkretnych osób. Dlatego naukowcy danych i organizacje muszą być odpowiedzialni za to, jak ich systemy AI wpływają na jednostki lub społeczeństwo.
Osoby projektujące i wdrażające systemy AI muszą być odpowiedzialne za sposób działania swoich systemów. Potrzeba odpowiedzialności jest szczególnie ważna w przypadku technologii wrażliwych, takich jak rozpoznawanie twarzy. Ostatnio rośnie zapotrzebowanie na technologię rozpoznawania twarzy, zwłaszcza ze strony organów ścigania, które widzą potencjał tej technologii w zastosowaniach, takich jak odnajdywanie zaginionych dzieci. Jednakże technologie te mogą być potencjalnie używane przez rządy do zagrożenia podstawowym wolnościom obywateli, na przykład umożliwiając ciągłe monitorowanie określonych osób. Dlatego też naukowcy danych i organizacje muszą ponosić odpowiedzialność za wpływ ich systemów AI na jednostki lub społeczeństwo.
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Podejście Microsoftu do odpowiedzialnej AI")
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Podejście Microsoft do odpowiedzialnej AI")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć film: Ostrzeżenia przed masową inwigilacją za pomocą rozpoznawania twarzy
> 🎥 Kliknij obraz powyżej, aby obejrzeć film: Ostrzeżenia przed masową inwigilacją przez rozpoznawanie twarzy
Ostatecznie jednym z największych pytań dla naszego pokolenia, jako pierwszego pokolenia wprowadzającego AI do społeczeństwa, jest to, jak zapewnić, że komputery pozostaną odpowiedzialne wobec ludzi i jak zapewnić, że osoby projektujące komputery pozostaną odpowiedzialne wobec innych.
Ostatecznie, jedno z największych pytań dla naszego pokolenia, jako pierwszego, które wprowadza AI do społeczeństwa, brzmi: jak zapewnić, aby komputery pozostały odpowiedzialne wobec ludzi oraz jak sprawić, by osoby projektujące komputery pozostały odpowiedzialne wobec wszystkich innych.
## Ocena wpływu
Przed trenowaniem modelu uczenia maszynowego ważne jest przeprowadzenie oceny wpływu, aby zrozumieć cel systemu AI; jego zamierzone zastosowanie; miejsce wdrożenia; oraz osoby, które będą wchodzić w interakcję z systemem. Są to pomocne informacje dla recenzentów lub testerów oceniających system, aby wiedzieć, jakie czynniki należy wziąć pod uwagę przy identyfikowaniu potencjalnych ryzyk i oczekiwanych konsekwencji.
Przed trenowaniem modelu uczenia maszynowego ważne jest przeprowadzenie oceny wpływu, aby zrozumieć cel systemu AI; do jakiego użytku jest przeznaczony; gdzie będzie wdrażany oraz kto będzie wchodził w interakcję z systemem. To jest pomocne dla recenzenta(ów) lub testerów oceniających system, którzy muszą wiedzieć, jakie czynniki wziąć pod uwagę przy identyfikowaniu potencjalnych ryzyk i przewidywanych konsekwencji.
Poniżej znajdują się obszary, na których należy się skupić podczas przeprowadzania oceny wpływu:
Poniżej przedstawiono obszary uwagi przy przeprowadzaniu oceny wpływu:
* **Negatywny wpływ na jednostki**. Świadomość wszelkich ograniczeń lub wymagań, nieobsługiwanych zastosowań lub znanych ograniczeń utrudniających działanie systemu jest niezbędna, aby zapobiec wykorzystywaniu systemu w sposób mogący szkodzić jednostkom.
* **Wymagania dotyczące danych**. Zrozumienie, jak i gdzie system będzie używał danych, pozwala recenzentom zbadać wszelkie wymagania dotyczące danych, na które należy uważać (np. przepisy RODO lub HIPAA). Dodatkowo należy sprawdzić, czy źródło lub ilość danych jest wystarczająca do treningu.
* **Podsumowanie wpływu**. Sporządź listę potencjalnych szkód, które mogą wyniknąć z używania systemu. W trakcie cyklu życia ML sprawdź, czy kwestie te zostały zminimalizowane lub rozwiązane.
* **Celowe cele** dla każdego z sześciu podstawowych zasad. Oceń, czy cele z każdej zasady zostały spełnione i czy istnieją jakiekolwiek luki.
* **Negatywny wpływ na jednostki**. Ważne jest, aby być świadomym wszelkich ograniczeń lub wymagań, nieobsługiwanych zastosowań lub znanych ograniczeń utrudniających działanie systemu, aby upewnić się, że system nie jest używany w sposób, który mógłby zaszkodzić jednostkom.
* **Wymagania dotyczące danych**. Zrozumienie, jak i gdzie system będzie korzystał z danych, pozwala recenzentom zbadać wszelkie wymagania dotyczące danych, które należy uwzględnić (np. regulacje GDPR lub HIPPA). Ponadto należy sprawdzić, czy źródło lub ilość danych są wystarczające do trenowania.
* **Podsumowanie wpływu**. Zbierz listę potencjalnych szkód, które mogą wyniknąć z używania systemu. Przez cały cykl życia ML sprawdzaj, czy zidentyfikowane problemy zostały złagodzone lub rozwiązane.
* **Cele dla każdej z sześciu podstawowych zasad**. Oceń, czy cele wynikające z każdej zasady zostały osiągnięte i czy istnieją jakieś luki.
## Debugowanie z odpowiedzialną AI
Podobnie jak debugowanie aplikacji programowej, debugowanie systemu AI jest niezbędnym procesem identyfikowania i rozwiązywania problemów w systemie. Istnieje wiele czynników, które mogą wpływać na to, że model nie działa zgodnie z oczekiwaniami lub odpowiedzialnie. Większość tradycyjnych metryk wydajności modelu to ilościowe agregaty wydajności modelu, które nie są wystarczające do analizy, w jaki sposób model narusza zasady odpowiedzialnej AI. Ponadto model uczenia maszynowego jest „czarną skrzynką”, co utrudnia zrozumienie, co napędza jego wyniki lub wyjaśnienie, dlaczego popełnia błędy. W dalszej części tego kursu nauczymy się, jak korzystać z pulpitu odpowiedzialnej AI, aby pomóc w debugowaniu systemów AI. Pulpit zapewnia kompleksowe narzędzie dla naukowców danych i programistów AI do wykonywania:
Podobnie jak debugowanie aplikacji oprogramowania, debugowanie systemu AI to niezbędny proces identyfikowania i rozwiązywania problemów w systemie. Istnieje wiele czynników, które mogą wpływać na to, że model nie działa zgodnie z oczekiwaniami lub odpowiedzialnie. Większość tradycyjnych metryk wydajności modelu to ilościowe agregaty wydajności modelu, które nie wystarczają do analizy, jak model narusza zasady odpowiedzialnej AI. Ponadto model uczenia maszynowego jest czarną skrzynką, co utrudnia zrozumienie, co napędza jego wynik lub wyjaśnienie, gdy popełnia błąd. W dalszej części tego kursu nauczymy się, jak korzystać z pulpitu odpowiedzialnej AI, aby pomóc w debugowaniu systemów AI. Pulpit zapewnia całościowe narzędzie dla naukowców danych i deweloperów AI do wykonywania:
* **Analizy błędów**. Aby zidentyfikować rozkład błędów modelu, które mogą wpłynąć na sprawiedliwość lub niezawodność systemu.
* **Przeglądu modelu**. Aby odkryć miejsca, gdzie występują różnice w wydajności modelu w różnych kohortach danych.
* **Analizy danych**. Aby zrozumieć rozkład danych i zidentyfikować potencjalne uprzedzenia w danych, które mogą prowadzić do problemów ze sprawiedliwością, inkluzywnością i niezawodnością.
* **Interpretowalności modelu**. Aby zrozumieć, co wpływa lub wpływa na prognozy modelu. Pomaga to wyjaśnić zachowanie modelu, co jest ważne dla przejrzystości i odpowiedzialności.
## 🚀 Wyzwanie
Aby zapobiec pojawieniu się szkód, powinniśmy:
- zatrudniać osoby o różnorodnym pochodzeniu i perspektywach wśród zespołów pracujących nad systemami
- inwestować w zestawy danych odzwierciedlające różnorodność naszego społeczeństwa
- rozwijać lepsze metody na wszystkich etapach cyklu życia uczenia maszynowego, aby wykrywać i naprawiać problemy z odpowiedzialną AI, gdy się pojawiają
Pomyśl o scenariuszach z życia, gdzie brak wiarygodności modelu jest widoczny podczas tworzenia i używania modelu. Co jeszcze powinniśmy rozważyć?
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
## Podsumowanie i samodzielna nauka
W tej lekcji nauczyłeś się podstaw pojęć sprawiedliwości i niesprawiedliwości w uczeniu maszynowym.
* **Analizy błędów**. Aby zidentyfikować rozkład błędów modelu, który może wpływać na sprawiedliwość lub niezawodność systemu.
* **Przeglądu modelu**. Aby odkryć, gdzie występują różnice w wydajności modelu w różnych grupach danych.
* **Analizy danych**. Aby zrozumieć rozkład danych i zidentyfik
Obejrzyj ten warsztat, aby zgłębić tematy:
Obejrzyj ten warsztat, aby zagłębić się w te tematy:
- W pogoni za odpowiedzialną AI: Wprowadzenie zasad w praktykę przez Besmirę Nushi, Mehrnoosh Sameki i Amita Sharmę
- W dążeniu do odpowiedzialnej sztucznej inteligencji: Wprowadzanie zasad w praktykę przez Besmirę Nushi, Mehrnoosh Sameki i Amit Sharmę
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Otwartoźródłowe narzędzie do budowy odpowiedzialnej AI")
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć wideo: RAI Toolbox: Otwartoźródłowe narzędzie do budowy odpowiedzialnej AI przez Besmirę Nushi, Mehrnoosh Sameki i Amita Sharmę
> 🎥 Kliknij obraz powyżej, aby obejrzeć wideo: RAI Toolbox: Open-source’owy framework do tworzenia odpowiedzialnej SI przez Besmirę Nushi, Mehrnoosh Sameki i Amit Sharmę
Przeczytaj również:
- Centrum zasobów RAI Microsoftu: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Centrum zasobów Microsoft ds. RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Grupa badawcza FATE Microsoftu: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Grupa badawcza Microsoft FATE: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
- [Repozytorium GitHub Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)
- [Repozytorium Responsible AI Toolbox na GitHub](https://github.com/microsoft/responsible-ai-toolbox)
Przeczytaj o narzędziach Azure Machine Learning zapewniających sprawiedliwość:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby zapewnić dokładność, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
# Rozpocznij pracę z Pythonem i Scikit-learn dla modeli regresji


> Sketchnote autorstwa [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Quiz przed lekcją](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
> ### [Ta lekcja jest dostępna w R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
> ### [Ta lekcja dostępna jest w R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Wprowadzenie
## Wstęp
W tych czterech lekcjach dowiesz się, jak budować modele regresji. Wkrótce omówimy, do czego one służą. Ale zanim zaczniesz, upewnij się, że masz odpowiednie narzędzia, aby rozpocząć proces!
W tych czterech lekcjach odkryjesz, jak budować modele regresji. Wkrótce omówimy, do czego służą. Ale zanim zaczniesz, upewnij się, że masz odpowiednie narzędzia do rozpoczęcia pracy!
W tej lekcji nauczysz się:
- Konfigurować komputer do lokalnych zadań związanych z uczeniem maszynowym.
- Pracować z notatnikami Jupyter.
- Korzystać z Scikit-learn, w tym instalacji.
- Eksplorować regresję liniową w praktycznym ćwiczeniu.
- Konfigurować swój komputer do lokalnych zadań uczenia maszynowego.
- Pracować z Jupyter Notebooks.
- Używać Scikit-learn, w tym instalować tę bibliotekę.
- Eksplorować regresję liniową na praktycznym ćwiczeniu.
## Instalacje i konfiguracje
[](https://youtu.be/-DfeD2k2Kj0 "ML dla początkujących - Przygotuj narzędzia do budowy modeli uczenia maszynowego")
[](https://youtu.be/-DfeD2k2Kj0 "ML dla początkujących - Skonfiguruj swoje narzędzia do tworzenia modeli uczenia maszynowego")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film o konfiguracji komputera do ML.
> 🎥 Kliknij powyższy obraz, aby zobaczyć krótki film pokazujący konfigurację komputera do ML.
1. **Zainstaluj Python**. Upewnij się, że [Python](https://www.python.org/downloads/) jest zainstalowany na Twoim komputerze. Będziesz używać Pythona do wielu zadań związanych z nauką o danych i uczeniem maszynowym. Większość systemów komputerowych ma już zainstalowanego Pythona. Dostępne są również przydatne [Pakiety Kodowania w Pythonie](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), które ułatwiają konfigurację dla niektórych użytkowników.
1. **Zainstaluj Pythona**. Upewnij się, że [Python](https://www.python.org/downloads/) jest zainstalowany na Twoim komputerze. Będziesz używać Pythona dla wielu zadań z zakresu analizy danych i uczenia maszynowego. Większość systemów komputerowych ma już zainstalowanego Pythona. Dostępne są również przydatne [Pakiety do Kodowania w Pythonie](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), które ułatwiają konfigurację niektórym użytkownikom.
Niektóre zastosowania Pythona wymagają jednej wersji oprogramowania, podczas gdy inne wymagają innej wersji. Z tego powodu warto pracować w [wirtualnym środowisku](https://docs.python.org/3/library/venv.html).
Jednak niektóre zastosowania Pythona wymagają jednej wersji oprogramowania, a inne innej wersji. Dlatego warto pracować w ramach [środowiska wirtualnego](https://docs.python.org/3/library/venv.html).
2. **Zainstaluj Visual Studio Code**. Upewnij się, że Visual Studio Code jest zainstalowany na Twoim komputerze. Postępuj zgodnie z tymi instrukcjami, aby [zainstalować Visual Studio Code](https://code.visualstudio.com/) w podstawowej wersji. W tym kursie będziesz używać Pythona w Visual Studio Code, więc warto zapoznać się z tym, jak [skonfigurować Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) do pracy z Pythonem.
2. **Zainstaluj Visual Studio Code**. Upewnij się, że masz zainstalowany Visual Studio Code na swoim komputerze. Postępuj zgodnie z instrukcjami, aby [zainstalować Visual Studio Code](https://code.visualstudio.com/) w podstawowej instalacji. Będziesz używać Pythona w Visual Studio Code podczas tego kursu, więc warto się także zapoznać z tym, jak [konfigurować Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) do pracy z Pythonem.
> Zapoznaj się z Pythonem, przechodząc przez tę kolekcję [modułów Learn](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
> Zapoznaj się z Pythonem, realizując tę kolekcję [modułów nauki](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [](https://youtu.be/yyQM70vi7V8 "Konfiguracja Pythona w Visual Studio Code")
>
> 🎥 Kliknij obrazek powyżej, aby obejrzeć film: używanie Pythona w VS Code.
> 🎥 Kliknij powyższy obraz, aby zobaczyć film: używanie Pythona wewnątrz VS Code.
3. **Zainstaluj Scikit-learn**, postępując zgodnie z [tymi instrukcjami](https://scikit-learn.org/stable/install.html). Ponieważ musisz upewnić się, że używasz Pythona 3, zaleca się korzystanie z wirtualnego środowiska. Jeśli instalujesz tę bibliotekę na komputerze Mac z procesorem M1, na stronie podanej powyżej znajdują się specjalne instrukcje.
3. **Zainstaluj Scikit-learn**, postępując zgodnie z [tym instrukcjami](https://scikit-learn.org/stable/install.html). Ponieważ musisz mieć pewność, że używasz Pythona 3, zaleca się korzystanie ze środowiska wirtualnego. Uwaga, jeśli instalujesz tę bibliotekę na M1 Macu, są specjalne instrukcje na stronie powyżej.
1. **Zainstaluj Jupyter Notebook**. Będziesz musiał [zainstalować pakiet Jupyter](https://pypi.org/project/jupyter/).
## Twoje środowisko do tworzenia ML
## Twoje środowisko do pracy z ML
Będziesz używać **notatników** do tworzenia kodu w Pythonie i budowania modeli uczenia maszynowego. Ten typ pliku jest popularnym narzędziem dla naukowców zajmujących się danymi i można go rozpoznać po rozszerzeniu `.ipynb`.
Będziesz używać **notebooków** do tworzenia kodu w Pythonie oraz tworzenia modeli uczenia maszynowego. Ten typ pliku jest popularnym narzędziem wśród analityków danych i można go rozpoznać po rozszerzeniu `.ipynb`.
Notatniki to interaktywne środowisko, które pozwala programiście zarówno kodować, jak i dodawać notatki oraz pisać dokumentację wokół kodu, co jest bardzo pomocne w projektach eksperymentalnych lub badawczych.
Notebooki to interaktywne środowisko, które pozwala programiście zarówno pisać kod, jak i dodawać notatki oraz dokumentację wokół kodu, co jest bardzo przydatne w projektach eksperymentalnych lub badawczych.
[](https://youtu.be/7E-jC8FLA2E "ML dla początkujących - Konfiguracja Jupyter Notebooks do budowy modeli regresji")
[](https://youtu.be/7E-jC8FLA2E "ML dla początkujących - Konfiguracja Jupyter Notebooks do rozpoczęcia budowy modeli regresji")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film przechodzący przez to ćwiczenie.
> 🎥 Kliknij powyższy obraz, aby zobaczyć krótki film przedstawiający to ćwiczenie.
### Ćwiczenie - praca z notatnikiem
### Ćwiczenie - praca z notebookiem
W tym folderze znajdziesz plik _notebook.ipynb_.
1. Otwórz _notebook.ipynb_ w Visual Studio Code.
Serwer Jupyter uruchomi się z Pythonem 3+. Znajdziesz obszary notatnika, które można `uruchomić`, czyli fragmenty kodu. Możesz uruchomić blok kodu, wybierając ikonę przypominającą przycisk odtwarzania.
Serwer Jupyter uruchomi się z Pythonem 3+. Znajdziesz obszary notebooka, które można `uruchomić`, fragmenty kodu. Możesz uruchomić blok kodu, wybierając ikonę wyglądającą jak przycisk odtwarzania.
2. Wybierz ikonę `md` i dodaj trochę markdown, a następnie tekst **# Witamy w Twoim notatniku**.
1. Wybierz ikonę `md` i dodaj trochę markdown, wpisując następujący tekst **# Welcome to your notebook**.
Następnie dodaj trochę kodu w Pythonie.
Następnie dodaj trochę kodu Python.
3. Wpisz **print('hello notebook')** w bloku kodu.
4. Wybierz strzałkę, aby uruchomić kod.
1. Wpisz **print('hello notebook')** w bloku kodu.
1. Wybierz strzałkę, aby uruchomić kod.
Powinieneś zobaczyć wydrukowany komunikat:
Powinieneś zobaczyć wydrukowane zdanie:
```output
hello notebook
```


Możesz przeplatać swój kod komentarzami, aby samodokumentować notatnik.
Możesz przeplatać swój kod komentarzami, aby dokumentować notebook dla samego siebie.
✅ Zastanów się przez chwilę, jak różni się środowisko pracy programisty webowego od środowiska naukowca zajmującego się danymi.
✅ Pomyśl przez chwilę, jak bardzo różni się środowisko pracy web developera od środowiska naukowca danych.
## Rozpoczęcie pracy z Scikit-learn
## Uruchomienie Scikit-learn
Teraz, gdy Python jest skonfigurowany w Twoim lokalnym środowisku, a Ty czujesz się komfortowo z notatnikami Jupyter, czas na zapoznanie się z Scikit-learn (wymawiaj `sci` jak w `science`). Scikit-learn oferuje [rozbudowane API](https://scikit-learn.org/stable/modules/classes.html#api-ref), które pomoże Ci wykonywać zadania związane z ML.
Teraz, gdy Python jest skonfigurowany w Twoim lokalnym środowisku, a Ty czujesz się pewnie z Jupyter Notebooks, zaznajomimy się również ze Scikit-learn (wymowa `sci` jak w `science`). Scikit-learn dostarcza [obszerny API](https://scikit-learn.org/stable/modules/classes.html#api-ref), który pomoże Ci wykonywać zadania ML.
Według ich [strony internetowej](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn to otwartoźródłowa biblioteka uczenia maszynowego, która wspiera uczenie nadzorowane i nienadzorowane. Oferuje również różne narzędzia do dopasowywania modeli, przetwarzania danych, wyboru modeli i ich oceny oraz wiele innych funkcji."
Według ich [strony internetowej](https://scikit-learn.org/stable/getting_started.html), „Scikit-learn jest otwartoźródłową biblioteką do uczenia maszynowego, która wspiera uczenie nadzorowane i nienadzorowane. Zapewnia także różnorodne narzędzia do dopasowywania modeli, przetwarzania wstępnego danych, wyboru modelu i ewaluacji oraz wiele innych użytecznych funkcji.”
W tym kursie będziesz używać Scikit-learn i innych narzędzi do budowy modeli uczenia maszynowego, aby wykonywać zadania, które nazywamy 'tradycyjnym uczeniem maszynowym'. Celowo uniknęliśmy sieci neuronowych i uczenia głębokiego, ponieważ są one lepiej omówione w naszym nadchodzącym programie 'AI dla początkujących'.
W tym kursie będziesz korzystać ze Scikit-learn i innych narzędzi, aby budować modele uczenia maszynowego wykonujące tzw. „tradycyjne zadania uczenia maszynowego”. Świadomie uniknęliśmy sieci neuronowych i głębokiego uczenia, gdyż są one lepiej omówione w naszym nadchodzącym kursie „AI dla początkujących”.
Scikit-learn ułatwia budowanie modeli i ich ocenę pod kątem zastosowania. Skupia się głównie na danych numerycznych i zawiera kilka gotowych zestawów danych do wykorzystania jako narzędzia edukacyjne. Zawiera również wstępnie zbudowane modele, które studenci mogą wypróbować. Przyjrzyjmy się procesowi ładowania gotowych danych i używania wbudowanego estymatora do pierwszego modelu ML z Scikit-learn na podstawie podstawowych danych.
Scikit-learn ułatwia tworzenie modeli i ocenianie ich do użytku. Skupia się przede wszystkim na danych liczbowych i zawiera kilka gotowych zbiorów danych służących jako narzędzia do nauki. Obejmuje także gotowe modele do wypróbowania przez uczniów. Najpierw przyjrzyjmy się procesowi ładowania gotowych danych i użycia wbudowanego estymatora, aby stworzyć pierwszy model ML w Scikit-learn z podstawowymi danymi.
## Ćwiczenie - Twój pierwszy notatnik z Scikit-learn
## Ćwiczenie - Twój pierwszy notatnik Scikit-learn
> Ten samouczek był inspirowany [przykładem regresji liniowej](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) na stronie Scikit-learn.
> Ten tutorial został zainspirowany [przykładem regresji liniowej](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) na stronie Scikit-learn.
[](https://youtu.be/2xkXL5EUpS0 "ML dla początkujących - Twój pierwszy projekt regresji liniowej w Pythonie")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film przechodzący przez to ćwiczenie.
> 🎥 Kliknij powyższy obraz, aby zobaczyć krótki film przedstawiający to ćwiczenie.
W pliku _notebook.ipynb_ powiązanym z tą lekcją, wyczyść wszystkie komórki, naciskając ikonę 'kosza'.
W pliku _notebook.ipynb_ powiązanym z tą lekcją wyczyść wszystkie komórki, klikając ikonę „kosza”.
W tej sekcji będziesz pracować z małym zestawem danych o cukrzycy, który jest wbudowany w Scikit-learn do celów edukacyjnych. Wyobraź sobie, że chcesz przetestować leczenie dla pacjentów z cukrzycą. Modele uczenia maszynowego mogą pomóc Ci określić, którzy pacjenci lepiej zareagują na leczenie, na podstawie kombinacji zmiennych. Nawet bardzo podstawowy model regresji, gdy zostanie zwizualizowany, może pokazać informacje o zmiennych, które pomogą Ci zorganizować teoretyczne badania kliniczne.
W tej sekcji będziesz pracować z małym zbiorem danych o cukrzycy, który jest wbudowany w Scikit-learn do celów edukacyjnych. Wyobraź sobie, że chcesz przetestować leczenie dla pacjentów z cukrzycą. Modele uczenia maszynowego mogą pomóc ustalić, którzy pacjenci lepiej zareagują na leczenie na podstawie kombinacji różnych zmiennych. Nawet bardzo prosty model regresji, gdy zostanie zwizualizowany, może dostarczyć informacji o zmiennych, które pomogą Ci zorganizować teoretyczne badania kliniczne.
✅ Istnieje wiele rodzajów metod regresji, a wybór odpowiedniej zależy od pytania, na które chcesz odpowiedzieć. Jeśli chcesz przewidzieć prawdopodobny wzrost osoby w określonym wieku, użyjesz regresji liniowej, ponieważ szukasz **wartości numerycznej**. Jeśli interesuje Cię ustalenie, czy dany typ kuchni powinien być uznany za wegański, szukasz **przypisania kategorii**, więc użyjesz regresji logistycznej. Dowiesz się więcej o regresji logistycznej później. Zastanów się chwilę nad pytaniami, które możesz zadać danym, i które z tych metod byłyby bardziej odpowiednie.
✅ Istnieje wiele typów metod regresji, a wybór zależy od pytania, na które chcesz odpowiedzieć. Jeśli chcesz przewidzieć prawdopodobny wzrost osoby w danym wieku, użyjesz regresji liniowej, ponieważ szukasz **wartości liczbowej**. Jeśli natomiast chcesz odkryć, czy dany typ kuchni powinien być uznany za wegański, szukasz **przypisania do kategorii**, więc użyjesz regresji logistycznej. O regresji logistycznej dowiesz się więcej później. Pomyśl trochę o pytaniach, które możesz zadać danym, i która z tych metod byłaby odpowiednia.
Zaczynajmy.
Zaczynajmy zadanie.
### Import bibliotek
Do tego zadania zaimportujemy kilka bibliotek:
- **matplotlib**. Jest to przydatne [narzędzie do tworzenia wykresów](https://matplotlib.org/), które wykorzystamy do stworzenia wykresu liniowego.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) to przydatna biblioteka do obsługi danych numerycznych w Pythonie.
- **sklearn**. To jest [biblioteka Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
- **matplotlib**. To przydatne [narzędzie do tworzenia wykresów](https://matplotlib.org/), którego użyjemy do narysowania wykresu liniowego.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) to przydatna biblioteka do obsługi danych liczbowych w Pythonie.
- **sklearn**. To biblioteka [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
Zaimportuj kilka bibliotek, które pomogą w zadaniach.
Zaimportuj biblioteki, które pomogą Ci w zadaniach.
1. Dodaj importy, wpisując następujący kod:
@ -122,24 +123,24 @@ Zaimportuj kilka bibliotek, które pomogą w zadaniach.
from sklearn import datasets, linear_model, model_selection
```
Powyżej importujesz `matplotlib`, `numpy` oraz `datasets`, `linear_model` i `model_selection` z `sklearn`. `model_selection` służy do dzielenia danych na zestawy treningowe i testowe.
Powyżej importujesz skróty `matplotlib`, `numpy` oraz importujesz `datasets`, `linear_model` i `model_selection` z `sklearn`. `model_selection` służy do dzielenia danych na zestawy treningowe i testowe.
### Zestaw danych o cukrzycy
### Zbiór danych o cukrzycy
Wbudowany [zestaw danych o cukrzycy](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) zawiera 442 próbki danych dotyczących cukrzycy, z 10 zmiennymi cech, w tym:
Wbudowany [zbiór danych o cukrzycy](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) zawiera 442 próbki danych dotyczących cukrzycy, z 10 zmiennymi cechowymi, z których niektóre to:
- wiek: wiek w latach
- bmi: wskaźnik masy ciała
- bp: średnie ciśnienie krwi
- s1 tc: komórki T (rodzaj białych krwinek)
- s1 tc: limfocyty T (rodzaj białych krwinek)
✅ Ten zestaw danych zawiera koncepcję 'płci' jako zmiennej cechy ważnej w badaniach nad cukrzycą. Wiele medycznych zestawów danych zawiera tego typu klasyfikację binarną. Zastanów się chwilę, jak takie kategoryzacje mogą wykluczać pewne części populacji z leczenia.
✅ Ten zbiór danych zawiera koncepcję „płci” jako zmiennej cechowej istotnej dla badań nad cukrzycą. Wiele medycznych zbiorów danych zawiera tego rodzaju binarną klasyfikację. Przemyśl, jak takie kategoryzacje mogą wykluczać pewne części populacji z leczenia.
Teraz załaduj dane X i y.
> 🎓 Pamiętaj, że to uczenie nadzorowane,więc potrzebujemy nazwanej zmiennej docelowej 'y'.
> 🎓 Pamiętaj, że to uczenie nadzorowane i potrzebujemy nazwanej zmiennej celowej 'y'.
W nowej komórce kodu załaduj zestaw danych o cukrzycy, wywołując `load_diabetes()`. Parametr `return_X_y=True` sygnalizuje, że `X` będzie macierzą danych, a `y`będzie celem regresji.
W nowej komórce kodu załaduj zbiór danych o cukrzycy, wywołując `load_diabetes()`. Parametr `return_X_y=True` sygnalizuje, że `X` będzie macierzą danych, a `y`docelową zmienną regresji.
1. Dodaj polecenia print, aby pokazać kształt macierzy danych i jej pierwszy element:
@ -149,9 +150,9 @@ W nowej komórce kodu załaduj zestaw danych o cukrzycy, wywołując `load_diabe
print(X[0])
```
To, co otrzymujesz jako odpowiedź, to krotka. Przypisujesz dwie pierwsze wartości krotki odpowiednio do `X` i`y`. Dowiedz się więcej [o krotkach](https://wikipedia.org/wiki/Tuple).
To, co otrzymujesz jako odpowiedź, to krotka. Przypisujesz dwie pierwsze wartości krotki do `X` oraz`y`. Dowiedz się więcej [o krotkach](https://wikipedia.org/wiki/Tuple).
Możesz zobaczyć, że te dane mają 442 elementy ułożone w tablicach po 10 elementów:
Widać, że dane zawierają 442 elementy uformowane w tablice po 10 elementów:
```text
(442, 10)
@ -159,39 +160,39 @@ W nowej komórce kodu załaduj zestaw danych o cukrzycy, wywołując `load_diabe
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Zastanów się chwilę nad związkiem między danymi a celem regresji. Regresja liniowa przewiduje związki między cechą X a zmienną docelową y. Czy możesz znaleźć [cel](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) dla zestawu danych o cukrzycy w dokumentacji? Co pokazuje ten zestaw danych, biorąc pod uwagę cel?
✅ Pomyśl trochę o relacji między danymi a celem regresji. Regresja liniowa przewiduje zależności między cechą X a zmienną docelową y. Czy w dokumentacji możesz znaleźć [cel](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) dla zbioru danych o cukrzycy? Co ten zbiór danych pokazuje, biorąc pod uwagę ten cel?
2. Następnie wybierz część tego zestawu danych do wykreślenia, wybierając 3. kolumnę zestawu danych. Możesz to zrobić, używając operatora `:` do wyboru wszystkich wierszy, a następnie wybierając 3. kolumnę za pomocą indeksu (2). Możesz również zmienić kształt danych na tablicę 2D - jak wymaga tego wykreślenie - używając `reshape(n_rows, n_columns)`. Jeśli jeden z parametrów to -1, odpowiedni wymiar jest obliczany automatycznie.
2. Następnie wybierz część tego zbioru do wykreślenia, wybierając 3 kolumnę zbioru. Możesz to zrobić, używając operatora `:`, aby wybrać wszystkie wiersze, a następnie wybierając 3 kolumnę za pomocą indeksu (2). Możesz również przekształcić dane w tablicę 2D — wymaganą do wykresu — używając `reshape(n_rows, n_columns)`. Jeśli jeden z parametrów to -1, odpowiadający mu wymiar jest obliczany automatycznie.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ W dowolnym momencie wydrukuj dane, aby sprawdzić ich kształt.
✅ W każdym momencie wypisz dane, aby sprawdzić ich kształt.
3. Teraz, gdy masz dane gotowe do wykreślenia, możesz sprawdzić, czy maszyna może pomóc w określeniu logicznego podziału między liczbami w tym zestawie danych. Aby to zrobić, musisz podzielić zarówno dane (X), jak i cel (y) na zestawy testowe i treningowe. Scikit-learn ma prosty sposób na to; możesz podzielić swoje dane testowe w określonym punkcie.
3. Teraz, gdy masz dane gotowe do wykresu, sprawdź, czy maszyna może pomóc ustalić logiczny podział między liczbami w tym zbiorze. Aby to zrobić, musisz podzielić zarówno dane (X), jak i cel (y) na zestawy testowe i treningowe. Scikit-learn ma prosty sposób na to — możesz podzielić dane testowe w wyznaczonym punkcie.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Teraz jesteś gotowy do trenowania swojego modelu! Załaduj model regresji liniowej i wytrenuj go za pomocą zestawów treningowych X i y, używając`model.fit()`:
4. Teraz jesteś gotowy, aby wytrenować swój model! Załaduj model regresji liniowej i wytrenuj go na swoich zestawach treningowych X i y przy użyciu`model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ `model.fit()` to funkcja, którą zobaczysz w wielu bibliotekach ML, takich jak TensorFlow.
✅ `model.fit()` to funkcja, którą zobaczysz w wielu bibliotekach ML, np. w TensorFlow
5. Następnie stwórz przewidywanie, używając danych testowych, za pomocą funkcji `predict()`. Zostanie to użyte do narysowania linii między grupami danych.
5. Następnie wykonaj predykcję za pomocą danych testowych, używając funkcji `predict()`. To posłuży do narysowania linii między grupami danych
```python
y_pred = model.predict(X_test)
```
6. Teraz czas na pokazanie danych na wykresie. Matplotlib to bardzo przydatne narzędzie do tego zadania. Stwórz wykres punktowy wszystkich danych testowych X i y, a następnie użyj przewidywania, aby narysować linię w najbardziej odpowiednim miejscu, między grupami danych modelu.
6. Teraz czas pokazać dane na wykresie. Matplotlib jest bardzo przydatnym narzędziem do tego zadania. Stwórz wykres punktowy wszystkich danych testowych X i y, a następnie użyj predykcji, aby narysować linię w najbardziej odpowiednim miejscu, między grupami danych modelu.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,22 +203,24 @@ W nowej komórce kodu załaduj zestaw danych o cukrzycy, wywołując `load_diabe
plt.show()
```

✅ Zastanów się chwilę, co tu się dzieje. Przez wiele małych punktów danych przebiega prosta linia, ale co dokładnie robi? Czy widzisz, jak można użyć tej linii do przewidzenia, gdzie nowy, niewidziany wcześniej punkt danych powinien pasować w odniesieniu do osi y wykresu? Spróbuj opisać praktyczne zastosowanie tego modelu.

✅ Pomyśl trochę o tym, co się tutaj dzieje. Prosta linia przebiega przez wiele małych punktów danych, ale co dokładnie robi? Czy widzisz, jak powinieneś móc użyć tej linii, aby przewidzieć, gdzie nowy, niewidziany punkt danych powinien się znaleźć w odniesieniu do osi y wykresu? Spróbuj opisać praktyczne zastosowanie tego modelu.
Gratulacje, stworzyłeś swój pierwszy model regresji liniowej, wykonałeś prognozę za jego pomocą i wyświetliłeś ją na wykresie!
Gratulacje, zbudowałeś swój pierwszy model regresji liniowej, utworzyłeś na jego podstawie predykcję i wyświetliłeś ją na wykresie!
---
## 🚀Wyzwanie
Zobrazuj inną zmienną z tego zbioru danych. Wskazówka: edytuj tę linię: `X = X[:,2]`. Biorąc pod uwagę cel tego zbioru danych, co możesz odkryć na temat postępu cukrzycy jako choroby?
Wykreśl inną zmienną z tego zbioru danych. Podpowiedź: zmodyfikuj tę linię: `X = X[:,2]`. Biorąc pod uwagę cel tego zbioru danych, co możesz odkryć na temat postępu cukrzycy jako choroby?
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
## Przegląd i samodzielna nauka
W tym samouczku pracowałeś z prostą regresją liniową, a nie z regresją jednowymiarową czy wielowymiarową. Przeczytaj trochę o różnicach między tymi metodami lub obejrzyj [ten film](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
W tym samouczku pracowałeś z prostą regresją liniową, a nie z jednoliniową lub wieloliniową regresją liniową. Przeczytaj trochę o różnicach między tymi metodami lub obejrzyj [ten film](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
Przeczytaj więcej o koncepcji regresji i zastanów się, na jakie pytania można odpowiedzieć za pomocą tej techniki. Weź udział w [tym samouczku](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott), aby pogłębić swoją wiedzę.
Przeczytaj więcej na temat pojęcia regresji i zastanów się, na jakie pytania można odpowiedzieć za pomocą tej techniki. Skorzystaj z tego [samouczka](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott), aby pogłębić swoją wiedzę.
## Zadanie
@ -225,5 +228,7 @@ Przeczytaj więcej o koncepcji regresji i zastanów się, na jakie pytania możn
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zastrzeżenie**:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
Infografika autorstwa [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
> ### [Ta lekcja jest dostępna w języku R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [Ta lekcja jest dostępna w R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Wprowadzenie
Teraz, gdy masz już narzędzia potrzebne do rozpoczęcia budowy modeli uczenia maszynowego za pomocą Scikit-learn, możesz zacząć zadawać pytania dotyczące swoich danych. Pracując z danymi i stosując rozwiązania ML, bardzo ważne jest, aby umieć zadawać właściwe pytania, aby w pełni wykorzystać potencjał swojego zbioru danych.
Gdy masz już skonfigurowane narzędzia potrzebne do rozpoczęcia budowy modeli uczenia maszynowego za pomocą Scikit-learn, możesz zacząć zadawać pytania swoim danym. Pracując z danymi i stosując rozwiązania ML, bardzo ważne jest, aby wiedzieć, jak zadać właściwe pytanie, by odpowiednio wykorzystać potencjał swojego zbioru danych.
W tej lekcji dowiesz się:
W tej lekcji nauczysz się:
- Jak przygotować dane do budowy modelu.
- Jak używać Matplotlib do wizualizacji danych.
- Jak korzystać z Seaborn do bardziej wyrazistej wizualizacji danych.
## Zadawanie właściwych pytań dotyczących danych
## Zadawanie właściwego pytania swoim danym
Pytanie, na które chcesz uzyskać odpowiedź, określi, jakie algorytmy ML zastosujesz. Jakość odpowiedzi, którą uzyskasz, będzie w dużej mierze zależała od charakteru danych.
Pytanie, na które potrzebujesz odpowiedzi, określi, jakiego typu algorytmy ML wykorzystasz. A jakość uzyskanej odpowiedzi będzie w dużej mierze zależała od natury twoich danych.
Spójrz na [dane](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) dostarczone do tej lekcji. Możesz otworzyć ten plik .csv w VS Code. Szybki przegląd od razu pokazuje, że są puste pola oraz mieszanka ciągów znaków i danych numerycznych. Jest też dziwna kolumna o nazwie 'Package', w której dane to mieszanka wartości takich jak 'sacks', 'bins' i inne. Dane są, mówiąc wprost, trochę chaotyczne.
Spójrz na [dane](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) udostępnione do tej lekcji. Możesz otworzyć ten plik .csv w VS Code. Szybkie przejrzenie pokazuje natychmiast, że są tam puste miejsca oraz mieszanka danych tekstowych i numerycznych. Jest też dziwna kolumna o nazwie 'Package', gdzie dane to mieszanka 'sacks', 'bins' oraz innych wartości. Dane są w rzeczywistości dość nieuporządkowane.
[](https://youtu.be/5qGjczWTrDQ "ML dla początkujących - Jak analizować i czyścić zbiór danych")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film o przygotowywaniu danych do tej lekcji.
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film pokazujący przygotowanie danych do tej lekcji.
W rzeczywistości rzadko zdarza się, aby otrzymać zbiór danych, który jest całkowicie gotowy do użycia w modelu ML. W tej lekcji nauczysz się, jak przygotować surowy zbiór danych za pomocą standardowych bibliotek Pythona. Poznasz również różne techniki wizualizacji danych.
W rzeczywistości nie jest często tak, że otrzymujesz dane całkowicie gotowe do użycia od razu do stworzenia modelu ML. W tej lekcji nauczysz się, jak przygotować surowy zbiór danych przy użyciu standardowych bibliotek Pythona. Nauczysz się także różnych technik wizualizacji danych.
## Studium przypadku: 'rynek dyni'
W tym folderze znajdziesz plik .csv w katalogu głównym `data` o nazwie [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), który zawiera 1757 wierszy danych o rynku dyni, posortowanych według miast. Są to surowe dane wyciągnięte z [Raportów Standardowych Rynków Terminalnych dla Upraw Specjalnych](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) dystrybuowanych przez Departament Rolnictwa Stanów Zjednoczonych.
W tym folderze znajdziesz plik .csv w głównym folderze`data` o nazwie [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), który zawiera 1757 linii danych dotyczących rynku dyni, posegregowanych według miast. Są to surowe dane wyodrębnione z [Standardowych raportów z terminali rynków specjalistycznych upraw](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) dystrybuowanych przez Departament Rolnictwa Stanów Zjednoczonych.
### Przygotowanie danych
Te dane są w domenie publicznej. Można je pobrać w wielu oddzielnych plikach, po jednym dla każdego miasta, ze strony internetowej USDA. Aby uniknąć zbyt wielu oddzielnych plików, połączyliśmy wszystkie dane miejskie w jeden arkusz kalkulacyjny, więc dane zostały już trochę _przygotowane_. Teraz przyjrzyjmy się im bliżej.
Dane te są domeną publiczną. Można je pobrać w wielu osobnych plikach, po jednym na miasto, ze strony USDA. Aby uniknąć zbyt wielu osobnych plików, połączyliśmy wszystkie dane miast w jeden arkusz kalkulacyjny, więc dane są już częściowo _przygotowane_. Teraz przyjrzyjmy się danym bliżej.
### Dane o dyniach - wstępne wnioski
Co zauważasz w tych danych? Już widziałeś, że jest to mieszanka ciągów znaków, liczb, pustych pól i dziwnych wartości, które trzeba zrozumieć.
Jakie pytanie możesz zadać tym danym, korzystając z techniki regresji? Na przykład: "Przewidzieć cenę dyni na sprzedaż w danym miesiącu". Patrząc ponownie na dane, zauważysz, że trzeba wprowadzić pewne zmiany, aby stworzyć strukturę danych potrzebną do tego zadania.
Co zauważasz w tych danych? Już widziałeś, że jest tam mieszanka tekstów, liczb, pustych miejsc i dziwnych wartości, które trzeba zrozumieć.
Jakie pytanie możesz zadać tym danym, wykorzystując technikę regresji? Na przykład: "Przewidzieć cenę dyni na sprzedaż w danym miesiącu". Patrząc na dane ponownie, istnieją pewne zmiany, które trzeba wprowadzić, aby stworzyć strukturę danych niezbędną do zadania.
## Ćwiczenie - analiza danych o dyniach
Użyjmy [Pandas](https://pandas.pydata.org/) (nazwa pochodzi od `Python Data Analysis`), narzędzia bardzo przydatnego do kształtowania danych, aby przeanalizować i przygotować dane o dyniach.
Użyjmy [Pandas](https://pandas.pydata.org/), (nazwa pochodzi od `Python Data Analysis`) narzędzia bardzo przydatnego do przekształcania danych, aby przeanalizować i przygotować te dane o dyniach.
### Najpierw sprawdź brakujące daty
### Najpierw sprawdź, czy nie brakuje dat
Najpierw musisz podjąć kroki, aby sprawdzić brakujące daty:
1. Przekształć daty na format miesięczny (są to daty w formacie amerykańskim, więc format to `MM/DD/YYYY`).
1. Przekonwertuj daty do formatu miesiąca (są to daty w formacie amerykańskim, więc format to `MM/DD/YYYY`).
2. Wyodrębnij miesiąc do nowej kolumny.
Otwórz plik _notebook.ipynb_ w Visual Studio Code i zaimportuj arkusz kalkulacyjny do nowej ramki danych Pandas.
Otwórz plik _notebook.ipynb_ w Visual Studio Code i zaimportuj arkusz kalkulacyjny do nowego dataframe Pandas.
1. Użyj funkcji `head()`, aby zobaczyć pierwsze pięć wierszy.
1. Użyj funkcji `head()`, aby wyświetlić pierwsze pięć wierszy.
```python
import pandas as pd
@ -64,28 +64,28 @@ Otwórz plik _notebook.ipynb_ w Visual Studio Code i zaimportuj arkusz kalkulacy
pumpkins.head()
```
✅ Jakiej funkcji użyłbyś, aby zobaczyć ostatnie pięć wierszy?
✅ Jaką funkcję użyłbyś, by wyświetlić ostatnie pięć wierszy?
1. Sprawdź, czy w bieżącej ramce danych są brakujące dane:
1. Sprawdź, czy w aktualnym dataframe brakuje danych:
```python
pumpkins.isnull().sum()
```
Są brakujące dane, ale może nie będą miały znaczenia dla tego zadania.
Są braki danych, ale może nie wpłyną one na zadanie.
1. Aby ułatwić pracę z ramką danych, wybierz tylko potrzebne kolumny, używając funkcji `loc`, która wyodrębnia z oryginalnej ramki danych grupę wierszy (przekazanych jako pierwszy parametr) i kolumn (przekazanych jako drugi parametr). Wyrażenie `:` w poniższym przypadku oznacza "wszystkie wiersze".
1. Aby ułatwić sobie pracę z dataframe, wybierz tylko te kolumny, których potrzebujesz, używając funkcji `loc`, która wyciąga z oryginalnego dataframe grupę wierszy (pierwszy argument) oraz kolumn (drugi argument). Wyrażenie `:` w poniższym przypadku oznacza "wszystkie wiersze".
Zastanów się, jak określić średnią cenę dyni w danym miesiącu. Jakie kolumny wybrałbyś do tego zadania? Podpowiedź: będziesz potrzebować 3 kolumn.
Pomyśl, jak obliczyć średnią cenę dyni w danym miesiącu. Jakie kolumny wybierzesz do tego zadania? Podpowiedź: potrzebujesz 3 kolumn.
Rozwiązanie: oblicz średnią z kolumn `Low Price` i `High Price`, aby wypełnić nową kolumnę Price, i przekształć kolumnę Date, aby pokazywała tylko miesiąc. Na szczęście, zgodnie z powyższą kontrolą, nie ma brakujących danych dotyczących dat ani cen.
Rozwiązanie: weź średnią z kolumn `Low Price` i `High Price`, aby wypełnić nową kolumnę Price, a kolumnę Date przekształć tak, aby pokazywała tylko miesiąc. Na szczęście, zgodnie z wcześniejszą kontrolą, nie brakuje danych dotyczących dat i cen.
1. Aby obliczyć średnią, dodaj następujący kod:
@ -96,37 +96,37 @@ Rozwiązanie: oblicz średnią z kolumn `Low Price` i `High Price`, aby wypełni
```
✅ Możesz wydrukować dowolne dane, które chcesz sprawdzić, używając `print(month)`.
✅ Śmiało możesz wyświetlić dowolne dane za pomocą `print(month)`, by je sprawdzić.
2. Teraz skopiuj przekształcone dane do nowej ramki danych Pandas:
2. Teraz skopiuj przekształcone dane do nowego dataframe Pandas:
Wyświetlenie ramki danych pokaże ci czysty, uporządkowany zbiór danych, na którym możesz zbudować nowy model regresji.
Wyświetlenie dataframe pokaże ci czysty, uporządkowany zbiór danych, na którym możesz zbudować swój nowy model regresji.
### Ale chwila! Coś tu jest dziwnego
### Ale chwileczkę! Jest coś niepokojącego
Jeśli spojrzysz na kolumnę `Package`, dynie są sprzedawane w wielu różnych konfiguracjach. Niektóre są sprzedawane w miarach '1 1/9 bushel', inne w '1/2 bushel', niektóre na sztuki, inne na funty, a jeszcze inne w dużych pudełkach o różnych rozmiarach.
Jeśli spojrzysz na kolumnę `Package`, dynie są sprzedawane w wielu różnych konfiguracjach. Niektóre są sprzedawane w miarach '1 1/9 bushel', inne w '1/2 bushel', jeszcze inne na sztuki, na funty, a niektóre w dużych skrzyniach o różnych szerokościach.
> Dynie wydają się bardzo trudne do ważenia w sposób spójny
> Dynie wydają się bardzo trudne do jednolitego ważenia
Zaglądając do oryginalnych danych, interesujące jest to, że wszystko, co ma `Unit of Sale` równe 'EACH' lub 'PER BIN', ma również typ `Package` na cal, na pojemnik lub 'każda'. Dynie wydają się bardzo trudne do ważenia w sposób spójny, więc przefiltrujmy je, wybierając tylko dynie z ciągiem 'bushel' w kolumnie `Package`.
Zagłębiając się w oryginalne dane, interesujące jest, że wszystko z `Unit of Sale` równym 'EACH' lub 'PER BIN' ma również typ `Package` na jednostkę calową, na bin lub 'sztukę'. Dynie są więc bardzo trudne do jednolitego ważenia, więc przefiltrujmy je, wybierając tylko dynie z ciągiem 'bushel' w kolumnie `Package`.
1. Dodaj filtr na początku pliku, pod początkowym importem .csv:
1. Dodaj filtr na początku pliku, pod importem pliku .csv:
Jeśli teraz wydrukujesz dane, zobaczysz, że masz tylko około 415 wierszy danych zawierających dynie sprzedawane na buszel.
Jeśli teraz wyświetlisz dane, zobaczysz, że otrzymujesz tylko około 415 wierszy z dyniami sprzedawanymi na bushels.
### Ale chwila! Jest jeszcze jedna rzecz do zrobienia
### Ale chwileczkę! Jest jeszcze jedna rzecz do zrobienia
Czy zauważyłeś, że ilość buszli różni się w zależności od wiersza? Musisz znormalizować ceny, aby pokazać ceny za buszel, więc wykonaj kilka obliczeń, aby je ujednolicić.
Zauważyłeś, że ilość busheli różni się w poszczególnych wierszach? Musisz znormalizować ceny tak, aby pokazać ceny za bushel, więc wykonaj trochę obliczeń, aby to ustandaryzować.
1. Dodaj te linie po bloku tworzącym ramkę danych `new_pumpkins`:
1. Dodaj poniższe linijki po bloku tworzącym dataframe new_pumpkins:
✅ Według [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), waga buszla zależy od rodzaju produktu, ponieważ jest to miara objętości. "Buszel pomidorów, na przykład, powinien ważyć 56 funtów... Liście i zielenina zajmują więcej miejsca przy mniejszej wadze, więc buszel szpinaku waży tylko 20 funtów." To wszystko jest dość skomplikowane! Nie przejmujmy się przeliczaniem buszli na funty i zamiast tego wyceńmy je na buszel. Całe to badanie buszli dyni pokazuje jednak, jak ważne jest zrozumienie natury swoich danych!
✅ Według [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), waga bushela zależy od rodzaju produktu, ponieważ jest to jednostka objętości. "Buszel pomidorów, na przykład, waży około 56 funtów... Liście i zielone warzywa zajmują więcej miejsca przy mniejszej wadze, więc buszel szpinaku waży tylko 20 funtów." To wszystko dość skomplikowane! Nie będziemy przeprowadzać konwersji z buszeli na funty, a zamiast tego będziemy wyceniać za buszel. Całe to badanie buszeli dyni pokazuje jednak, jak ważne jest zrozumienie charakteru swoich danych!
Teraz możesz analizować ceny za jednostkę na podstawie ich miary buszla. Jeśli wydrukujesz dane jeszcze raz, zobaczysz, jak zostały ujednolicone.
Teraz możesz analizować ceny jednostkowe bazując na ich pomiarze na bushel. Jeśli jeszcze raz wyświetlisz dane, zobaczysz, jak są ustandaryzowane.
✅ Czy zauważyłeś, że dynie sprzedawane na pół buszla są bardzo drogie? Czy potrafisz wyjaśnić dlaczego? Podpowiedź: małe dynie są znacznie droższe niż duże, prawdopodobnie dlatego, że jest ich znacznie więcej na buszel, biorąc pod uwagę niewykorzystaną przestrzeń zajmowaną przez jedną dużą pustą dynię na ciasto.
✅ Zauważyłeś, że dynie sprzedawane na pół buszela są bardzo drogie? Potrafisz zgadnąć dlaczego? Podpowiedź: małe dynie są znacznie droższe niż duże, prawdopodobnie dlatego, że w buszlu jest ich znacznie więcej, ze względu na niewykorzystaną przestrzeń zajmowaną przez dużą, pustą dynię na ciasto.
## Strategie wizualizacji
Częścią roli naukowca danych jest demonstrowanie jakości i charakteru danych, z którymi pracuje. Aby to zrobić, często tworzą interesujące wizualizacje, takie jak wykresy punktowe, słupkowe czy liniowe, pokazujące różne aspekty danych. W ten sposób mogą wizualnie pokazać relacje i luki, które w przeciwnym razie byłyby trudne do odkrycia.
Częścią pracy data scientist jest demonstrowanie jakości i charakteru danych, z którymi pracuje. W tym celu często tworzą interesujące wizualizacje, takie jak wykresy, diagramy i grafiki, pokazujące różne aspekty danych. Dzięki temu są w stanie wizualnie ujawnić związki i luki, które inaczej trudno zauważyć.
[](https://youtu.be/SbUkxH6IJo0 "ML dla początkujących - Jak wizualizować dane za pomocą Matplotlib")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film o wizualizacji danych do tej lekcji.
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film pokazujący wizualizację danych w tej lekcji.
Wizualizacje mogą również pomóc w określeniu techniki uczenia maszynowego najbardziej odpowiedniej dla danych. Na przykład wykres punktowy, który wydaje się podążać za linią, wskazuje, że dane są dobrym kandydatem do ćwiczenia regresji liniowej.
Wizualizacje mogą również pomóc ustalić, która technika uczenia maszynowego najlepiej nadaje się do danych. Na przykład wykres punktowy, który wydaje się podążać linią, wskazuje, że dane są dobrym kandydatem do zadania regresji liniowej.
Jedną z bibliotek wizualizacji danych, która dobrze działa w notatnikach Jupyter, jest [Matplotlib](https://matplotlib.org/) (którą widziałeś również w poprzedniej lekcji).
Jedną z bibliotek do wizualizacji danych, która dobrze działa w notatnikach Jupyter, jest [Matplotlib](https://matplotlib.org/) (którą też widziałeś w poprzedniej lekcji).
> Zdobądź więcej doświadczenia z wizualizacją danych w [tych samouczkach](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
> Zdobądź więcej praktyki z wizualizacją danych w [tych samouczkach](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
## Ćwiczenie - eksperymentowanie z Matplotlib
## Ćwiczenie - eksperymentuj z Matplotlib
Spróbuj stworzyć podstawowe wykresy, aby wyświetlić nową ramkę danych, którą właśnie stworzyłeś. Co pokaże podstawowy wykres liniowy?
Spróbuj stworzyć kilka podstawowych wykresów, aby wyświetlić nowy dataframe, który właśnie utworzyłeś. Co pokazałby podstawowy wykres liniowy?
1. Zaimportuj Matplotlib na początku pliku, pod importem Pandas:
1. Zaimportuj Matplotlib na górze pliku, pod importem Pandas:
```python
import matplotlib.pyplot as plt
```
1. Uruchom ponownie cały notatnik, aby odświeżyć.
1. Na dole notatnika dodaj komórkę, aby narysować dane jako wykres pudełkowy:
1. Uruchom ponownie cały notatnik, aby odświeżyć dane.
1. Na dole notatnika dodaj komórkę, by wyświetlić wykres w formie pudełka:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ Spróbuj stworzyć podstawowe wykresy, aby wyświetlić nową ramkę danych, kt
plt.show()
```


Czy ten wykres jest użyteczny? Czy coś cię w nim zaskakuje?
Czy to jest użyteczny wykres? Czy coś Cię zaskakuje?
Nie jest szczególnie użyteczny, ponieważ pokazuje jedynie rozkład punktów w danym miesiącu.
Nie jest on szczególnie użyteczny, bo pokazuje tylko rozrzut punktów w danych dla danych miesięcy.
### Uczyń go użytecznym
Aby wykresy pokazywały użyteczne dane, zazwyczaj trzeba jakoś pogrupować dane. Spróbujmy stworzyć wykres, na którym oś y pokazuje miesiące, a dane przedstawiają rozkład.
Aby wykresy pokazywały użyteczne dane, zwykle trzeba grupować dane w jakiś sposób. Spróbujmy stworzyć wykres, gdzie oś Y pokazuje miesiące, a dane pokazują rozkład danych.
1. Dodaj komórkę, aby stworzyć grupowany wykres słupkowy:
1. Dodaj komórkę, aby stworzyć wykres słupkowy z grupowaniem:


To jest bardziej użyteczna wizualizacja! Wskazuje, że najwyższa cena za dynie występuje we wrześniu i październiku. Czy to jest zgodne z Twoimi oczekiwaniami? Dlaczego tak lub dlaczego nie?
## Ćwiczenie - eksperymentuj z Seaborn
Matplotlib jest potężny, ale do stworzenia atrakcyjnego wykresu potrzeba dużo kodu. [Seaborn](https://seaborn.pydata.org/) to biblioteka zbudowana _na podstawie_ Matplotlib, zaprojektowana do statystycznej wizualizacji danych. Działa bezpośrednio z dataframe Pandas, stosuje atrakcyjne domyślne style i pozwala tworzyć informatywne wykresy z znacznie mniejszą ilością kodu. Ponieważ Seaborn zwraca obiekty Matplotlib, nadal możesz używać wszystkiego, co już wiesz o Matplotlib, aby dopracować wynik.
> Jeśli jeszcze nie masz zainstalowanego Seaborn, zainstaluj go za pomocą `pip install seaborn`.
1. Zaimportuj Seaborn na górze notatnika, pod pozostałymi importami. Konwencjonalnie importuje się je jako `sns`:
```python
import seaborn as sns
```
### Wykresy punktowe pokazujące zależności
Duża część eksploracji danych przed budową modelu polega na poszukiwaniu _zależności_ między zmiennymi. [Wykres punktowy](https://en.wikipedia.org/wiki/Scatter_plot) jest jednym z najlepszych narzędzi do tego celu: jeśli punkty wydają się podążać linią, dwie zmienne mogą być skorelowane, co jest dobrym znakiem, że model regresji liniowej może działać.
1. Odwzoruj ponownie wykres ceny w funkcji miesiąca z wcześniejszego przykładu, tym razem używając funkcji Seaborn [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (wykres relacyjny), która działa bezpośrednio z kolumnami dataframe:

Te dane są dość hałaśliwe, więc wykres liniowy nie jest tutaj najczytelniejszym wyborem — ale pokazuje, jak łatwo zmienić typ wykresu w Seaborn.
### Wykresy słupkowe pokazujące rozkłady
Wcześniej grupowałeś dane ręcznie, aby stworzyć wykres słupkowy za pomocą Matplotlib. Funkcja Seaborn [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (wykres kategoryczny) może wykonać grupowanie i agregację za Ciebie. Domyślnie `kind="bar"` pokazuje średnią dla każdej kategorii wraz z czarną linią wskazującą przedział ufności.
1. Stwórz wykres słupkowy średniej ceny na miesiąc:

Potwierdza to, co widziałeś z Matplotlib — ceny osiągają szczyt wokół września i października — ale Seaborn pokazuje również, jak bardzo cena _zróżnicowana_ jest w każdym miesiącu.
### Mapy cieplne do pokazywania korelacji
Wykresy punktowe porównują dwie zmienne naraz. Gdy masz kilka kolumn numerycznych, [mapa cieplna](https://en.wikipedia.org/wiki/Heat_map) pozwala zobaczyć siłę relacji pomiędzy _każdą_ parą kolumn jednocześnie. To popularny sposób, by zauważyć, które cechy są najbardziej skorelowane przed wyborem, co wprowadzić do modelu (a ten sam rodzaj wykresu jest później używany do wyświetlania macierzy konfuzji w klasyfikacji).
1. Zbuduj macierz korelacji za pomocą Pandas, a następnie narysuj ją za pomocą Seaborn [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html). Opcja `annot=True` drukuje wartości korelacji w każdej komórce:

Wartości bliskie `1` (lub `-1`) oznaczają, że kolumny są silnie _liniowo_ skorelowane. Zauważ, jak `Low Price` i `High Price` są prawie doskonale skorelowane. `Month`, z drugiej strony, pokazuje tylko słabą korelację liniową z ceną — mimo że wykres słupkowy powyżej ujawnił wyraźny sezonowy szczyt we wrześniu i październiku. To ważna lekcja: współczynnik korelacji mierzy tylko _prostoliniowe_ zależności, więc może nie dostrzec sezonowych lub innych nieliniowych wzorców. ✅ Dlaczego warto spojrzeć zarówno na mapę cieplną, *jak i* wykresy takie jak wykres słupkowy przed podjęciem decyzji, które kolumny wykorzystać?
### Matplotlib czy Seaborn?
Obie biblioteki warto znać:
- **Matplotlib** daje Ci szczegółową kontrolę nad każdym elementem wykresu i jest fundamentem, na którym opiera się niemal każda inna biblioteka do wykresów w Pythonie.
- **Seaborn** zapewnia funkcje wyższego poziomu i atrakcyjne domyślne ustawienia dla wykresów statystycznych, działa bezpośrednio na data framach i często jest szybszy w eksploracyjnej analizie danych.
To jest bardziej użyteczna wizualizacja danych! Wydaje się wskazywać, że najwyższe ceny dyni występują we wrześniu i październiku. Czy to odpowiada twoim oczekiwaniom? Dlaczego tak lub dlaczego nie?
Powszechnym sposobem pracy jest sięgnięcie po Seaborn, by szybko zbadać dane, a następnie zejść do Matplotlib, gdy potrzebujesz dostosować szczegóły.
---
## 🚀Wyzwanie
Zbadaj różne typy wizualizacji oferowane przez Matplotlib. Które typy są najbardziej odpowiednie dla problemów regresji?
Zbadaj różne typy wizualizacji oferowane przez Matplotlib i Seaborn. Które typy są najbardziej odpowiednie dla problemów regresji?
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
## Przegląd i samodzielna nauka
Przyjrzyj się różnym sposobom wizualizacji danych. Sporządź listę różnych dostępnych bibliotek i zanotuj, które są najlepsze do określonych typów zadań, na przykład wizualizacji 2D vs. 3D. Co odkrywasz?
Przyjrzyj się wielu sposobom wizualizacji danych. Sporządź listę dostępnych bibliotek i zaznacz, które są najlepsze do określonych zadań, na przykład wizualizacje 2D vs. 3D. Co odkryjesz?
## Zadanie
[Odkrywanie wizualizacji](assignment.md)
[Eksplorowanie wizualizacji](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zastrzeżenie**:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby zapewnić dokładność, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
"[Seaborn](https://seaborn.pydata.org/) jest zbudowany na bazie Matplotlib i działa bezpośrednio z dataframe’ami, co pozwala szybko tworzyć atrakcyjne wykresy statystyczne przy minimalnej ilości kodu.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Wykresy rozproszenia do pokazywania zależności\n"
"\n---\n\n**Zastrzeżenie**: \nTen dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za źródło autorytatywne. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Zastrzeżenie**:\nNiniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
# Wprowadzenie do uczenia ze wzmocnieniem i Q-Learningu


> Sketchnote autorstwa [Tomomi Imura](https://www.twitter.com/girlie_mac)
Uczenie ze wzmocnieniem opiera się na trzech kluczowych pojęciach: agencie, stanach oraz zestawie akcji dla każdego stanu. Wykonując akcję w określonym stanie, agent otrzymuje nagrodę. Wyobraź sobie grę komputerową Super Mario. Jesteś Mario, znajdujesz się na poziomie gry, stojąc obok krawędzi klifu. Nad tobą jest moneta. Ty, jako Mario, w poziomie gry, w określonej pozycji... to twój stan. Przesunięcie się o krok w prawo (akcja) spowoduje, że spadniesz z klifu, co da ci niską wartość punktową. Jednak naciśnięcie przycisku skoku pozwoli ci zdobyć punkt i pozostać przy życiu. To pozytywny wynik, który powinien nagrodzić cię dodatnią wartością punktową.
Uczenie ze wzmocnieniem obejmuje trzy ważne pojęcia: agenta, pewne stany oraz zestaw akcji dla każdego stanu. Poprzez wykonanie akcji w określonym stanie agent otrzymuje nagrodę. Ponownie wyobraź sobie grę komputerową Super Mario. Jesteś Mario, znajdujesz się na poziomie gry, stojąc tuż przy krawędzi przepaści. Nad tobą jest moneta. Ty, jako Mario, na poziomie gry, w określonej pozycji ... to jest twój stan. Przesunięcie się o krok w prawo (akcja) spowoduje, że spadniesz z krawędzi, co da ci niski wynik liczbowy. Naciśnięcie przycisku skoku pozwoli ci zdobyć punkt i pozostać przy życiu. To jest pozytywny rezultat, za który powinna być przyznana dodatnia wartość liczbową.
Korzystając z uczenia ze wzmocnieniem i symulatora (gry), możesz nauczyć się grać w grę, aby maksymalizować nagrodę, czyli pozostawać przy życiu i zdobywać jak najwięcej punktów.
Korzystając z uczenia ze wzmocnieniem i symulatora (gry), możesz nauczyć się grać maksymalizując nagrodę, którą jest pozostanie przy życiu i zdobycie jak największej liczby punktów.
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 Kliknij obrazek powyżej, aby posłuchać Dmitry'ego omawiającego uczenie ze wzmocnieniem
> 🎥 Kliknij obraz powyżej, aby posłuchać Dmitry'ego omawiającego uczenie ze wzmocnieniem
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
## Wymagania wstępne i konfiguracja
W tej lekcji będziemy eksperymentować z kodem w Pythonie. Powinieneś być w stanie uruchomić kod z Jupyter Notebook z tej lekcji, zarówno na swoim komputerze, jak i w chmurze.
W tej lekcji będziemy eksperymentować z kodem w Pythonie. Powinieneś być w stanie uruchomić kod z notatnika Jupyter z tej lekcji, zarówno na swoim komputerze, jak i w chmurze.
Możesz otworzyć [notebook lekcji](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) i przejść przez tę lekcję, aby ją zbudować.
Możesz otworzyć [notatnik lekcji](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) i przejść przez tę lekcję, aby zbudować projekt.
> **Uwaga:** Jeśli otwierasz ten kod z chmury, musisz również pobrać plik [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), który jest używany w kodzie notebooka. Dodaj go do tego samego katalogu co notebook.
> **Uwaga:** Jeśli otwierasz ten kod z chmury, musisz również pobrać plik [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), który jest używany w kodzie notatnika. Dodaj go do tego samego katalogu co notatnik.
## Wprowadzenie
W tej lekcji zagłębimy się w świat **[Piotrusia i Wilka](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, inspirowany muzyczną bajką rosyjskiego kompozytora, [Siergieja Prokofiewa](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Wykorzystamy **uczenie ze wzmocnieniem**, aby pozwolić Piotrusiowi eksplorować swoje otoczenie, zbierać smaczne jabłka i unikać spotkania z wilkiem.
W tej lekcji poznamy świat **[Piotrusia i Wilka](https://pl.wikipedia.org/wiki/Piotruś_i_wilk)**, zainspirowany muzyczną baśnią rosyjskiego kompozytora, [Siergieja Prokofjewa](https://pl.wikipedia.org/wiki/Siergiej_Prokofjew). Użyjemy **uczenia ze wzmocnieniem**, aby pozwolić Piotrusiowi eksplorować środowisko, zbierać smaczne jabłka i unikać wilka.
**Uczenie ze wzmocnieniem** (RL) to technika uczenia, która pozwala nam nauczyć się optymalnego zachowania **agenta** w określonym **środowisku** poprzez przeprowadzanie wielu eksperymentów. Agent w tym środowisku powinien mieć jakiś **cel**, zdefiniowany przez **funkcję nagrody**.
**Uczenie ze wzmocnieniem** (RL) to technika uczenia, która pozwala nauczyć optymalne zachowanie **agenta** w pewnym **środowisku** poprzez przeprowadzenie wielu eksperymentów. Agent w tym środowisku powinien mieć jakiś **cel**, określony przez **funkcję nagrody**.
## Środowisko
Dla uproszczenia, wyobraźmy sobie świat Piotrusia jako kwadratową planszę o rozmiarze `szerokość` x `wysokość`, jak poniżej:
Dla uproszczenia rozważmy świat Piotrusia jako kwadratową planszę o rozmiarze `width` x `height`, taką jak ta:
* **ziemią**, po której Piotruś i inne stworzenia mogą chodzić.
* **wodą**, po której oczywiście nie można chodzić.
* **drzewem** lub **trawą**, miejscem, gdzie można odpocząć.
* **jabłkiem**, które Piotruś chętnie znajdzie, aby się nakarmić.
* **wilkiem**, który jest niebezpieczny i należy go unikać.
* **jabłkiem**, które oznacza coś, co Piotruś chętnie znajdzie, żeby się nakarmić.
* **wilkiem**, który jest niebezpieczny i powinien być omijany.
Istnieje osobny moduł Pythona, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), który zawiera kod do pracy z tym środowiskiem. Ponieważ ten kod nie jest istotny dla zrozumienia naszych koncepcji, zaimportujemy moduł i użyjemy go do stworzenia przykładowej planszy (blok kodu 1):
Istnieje osobny moduł Pythona, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), który zawiera kod do pracy z tym środowiskiem. Ponieważ ten kod nie jest istotny do zrozumienia naszych koncepcji, zaimportujemy moduł i użyjemy go do stworzenia przykładowej planszy (blok kodu 1):
```python
from rlboard import *
@ -52,30 +52,30 @@ m.randomize(seed=13)
m.plot()
```
Ten kod powinien wydrukować obraz środowiska podobny do powyższego.
Ten kod powinien wyświetlić obraz środowiska podobny do powyższego.
## Akcje i polityka
W naszym przykładzie celem Piotrusia będzie znalezienie jabłka, unikając wilka i innych przeszkód. Aby to zrobić, może zasadniczo chodzić po planszy, aż znajdzie jabłko.
W naszym przykładzie celem Piotrusia będzie znalezienie jabłka, unikając wilka i innych przeszkód. W tym celu może on po prostu chodzić aż znajdzie jabłko.
Dlatego w dowolnej pozycji może wybrać jedną z następujących akcji: góra, dół, lewo i prawo.
Dlatego w każdej pozycji może wybrać jedną z następujących akcji: w górę, w dół, w lewo i w prawo.
Zdefiniujemy te akcje jako słownik i przypiszemy je do par odpowiadających zmian współrzędnych. Na przykład, ruch w prawo (`R`) odpowiada parze `(1,0)`. (blok kodu 2):
Zdefiniujemy te akcje jako słownik, mapując je do par odpowiadających zmian współrzędnych. Na przykład ruch w prawo (`R`) będzie odpowiadać parze `(1,0)`. (blok kodu 2):
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
Podsumowując, strategia i cel tego scenariusza są następujące:
Podsumowując, strategia i cel tego scenariusza wyglądają następująco:
- **Strategia** naszego agenta (Piotrusia) jest zdefiniowana przez tzw. **politykę**. Polityka to funkcja, która zwraca akcję w dowolnym stanie. W naszym przypadku stan problemu jest reprezentowany przez planszę, w tym aktualną pozycję gracza.
- **Strategia**, naszego agenta (Piotrusia), jest określona przez tzw. **politykę**. Polityka to funkcja, która zwraca akcję dla dowolnego stanu. W naszym przypadku stan problemu jest reprezentowany przez planszę, włączając w to aktualną pozycję gracza.
- **Cel** uczenia ze wzmocnieniem to ostatecznie nauczenie się dobrej polityki, która pozwoli nam efektywnie rozwiązać problem. Jednak jako punkt odniesienia rozważmy najprostszą politykę zwaną **losowym spacerem**.
- **Cel** uczenia ze wzmocnieniem to w końcu nauczyć się dobrej polityki, która pozwoli rozwiązać problem efektywnie. Jako punkt wyjścia rozważmy najprostszą politykę zwaną **losowym spacerem**.
## Losowy spacer
Najpierw rozwiążmy nasz problem, implementując strategię losowego spaceru. W przypadku losowego spaceru będziemy losowo wybierać następną akcję z dozwolonych akcji, aż dotrzemy do jabłka (blok kodu 3).
Najpierw rozwiążmy nasz problem implementując strategię losowego spaceru. Przy losowym spacerze losowo wybierzemy następną akcję spośród dozwolonych, aż dotrzemy do jabłka (blok kodu 3).
1. Zaimplementuj losowy spacer za pomocą poniższego kodu:
@ -84,31 +84,31 @@ Najpierw rozwiążmy nasz problem, implementując strategię losowego spaceru. W
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # liczba kroków
# ustaw początkową pozycję
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # sukces!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # zjedzony przez wilka lub utonął
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # wykonaj właściwy ruch
break
n+=1
walk(m,random_policy)
```
Wywołanie `walk` powinno zwrócić długość odpowiadającej ścieżki, która może się różnić w zależności od uruchomienia.
Wywołanie `walk` powinno zwrócić długość odpowiadającej ścieżki, która może się różnić w zależności od próby.
1. Uruchom eksperyment spaceru kilka razy (np. 100) i wydrukuj wynikowe statystyki (blok kodu 4):
1. Uruchom eksperyment spaceru wielokrotnie (np. 100 razy) i wypisz uzyskane statystyki (blok kodu 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Najpierw rozwiążmy nasz problem, implementując strategię losowego spaceru. W
print_statistics(random_policy)
```
Zauważ, że średnia długość ścieżki wynosi około 30-40 kroków, co jest dość dużo, biorąc pod uwagę fakt, że średnia odległość do najbliższego jabłka wynosi około 5-6 kroków.
Zauważ, że średnia długość ścieżki to około 30-40 kroków, co jest całkiem sporo, biorąc pod uwagę, że średnia odległość do najbliższego jabłka wynosi około 5-6 kroków.
Możesz również zobaczyć, jak wygląda ruch Piotrusia podczas losowego spaceru:
Możesz też zobaczyć, jak wygląda ruch Piotrusia podczas losowego spaceru:
Aby nasza polityka była bardziej inteligentna, musimy zrozumieć, które ruchy są "lepsze" od innych. Aby to zrobić, musimy zdefiniować nasz cel.
Aby nasza polityka była bardziej inteligentna, musimy rozpoznać, które ruchy są „lepsze” od innych. W tym celu musimy zdefiniować nasz cel.
Cel można zdefiniować w kategoriach **funkcji nagrody**, która zwróci pewną wartość punktową dla każdego stanu. Im wyższa liczba, tym lepsza funkcja nagrody. (blok kodu 5)
Cel może być zdefiniowany za pomocą **funkcji nagrody**, która zwraca pewną wartość punktową dla każdego stanu. Im wyższa liczba, tym lepsza nagroda. (blok kodu 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Interesującą rzeczą dotyczącą funkcji nagrody jest to, że w większości przypadków *otrzymujemy znaczącą nagrodę dopiero na końcu gry*. Oznacza to, że nasz algorytm powinien jakoś zapamiętać "dobre" kroki, które prowadzą do pozytywnej nagrody na końcu, i zwiększyć ich znaczenie. Podobnie, wszystkie ruchy prowadzące do złych wyników powinny być zniechęcane.
Ciekawą rzeczą dotyczącą funkcji nagrody jest to, że w większości przypadków *otrzymujemy znaczącą nagrodę dopiero na końcu gry*. Oznacza to, że nasz algorytm powinien w jakiś sposób zapamiętać „dobre” kroki prowadzące do pozytywnej nagrody na końcu i zwiększyć ich wagę. Podobnie, wszystkie ruchy prowadzące do złych rezultatów powinny zostać zniechęcone.
## Q-Learning
Algorytm, który omówimy tutaj, nazywa się **Q-Learning**. W tym algorytmie polityka jest definiowana przez funkcję (lub strukturę danych) zwaną **Q-Tablicą**. Rejestruje ona "dobroć" każdej z akcji w danym stanie.
Algorytm, który tutaj omówimy, nazywa się **Q-Learning**. W tym algorytmie polityka jest definiowana przez funkcję (lub strukturę danych) zwaną **Q-Table**. Rejestruje ona „jakość” każdej akcji w danym stanie.
Nazywa się ją Q-Tablicą, ponieważ często wygodnie jest ją reprezentować jako tablicę lub wielowymiarową macierz. Ponieważ nasza plansza ma wymiary `szerokość` x `wysokość`, możemy reprezentować Q-Tablicę za pomocą tablicy numpy o kształcie `szerokość` x `wysokość` x `len(actions)`: (blok kodu 6)
Nazywa się ją Q-Table, ponieważ wygodnie jest ją reprezentować jako tabelę lub wielowymiarową tablicę. Ponieważ nasza plansza ma wymiary `width` x `height`, możemy reprezentować Q-Table używając tablicy numpy o kształcie `width` x `height` x `len(actions)`: (blok kodu 6)
Zauważ, że inicjalizujemy wszystkie wartości Q-Tablicy równą wartością, w naszym przypadku - 0.25. Odpowiada to polityce "losowego spaceru", ponieważ wszystkie ruchy w każdym stanie są równie dobre. Możemy przekazać Q-Tablicę do funkcji `plot`, aby zwizualizować tablicę na planszy: `m.plot(Q)`.
Zwróć uwagę, że inicjalizujemy wszystkie wartości Q-Table równą wartością, w naszym przypadku - 0.25. Odpowiada to polityce „losowego spaceru”, ponieważ wszystkie ruchy w każdym stanie są równie dobre. Możemy przekazać Q-Table do funkcji `plot`, aby zwizualizować tabelę na planszy: `m.plot(Q)`.
W centrum każdej komórki znajduje się "strzałka", która wskazuje preferowany kierunek ruchu. Ponieważ wszystkie kierunki są równe, wyświetlany jest punkt.
W centrum każdej komórki znajduje się „strzałka” wskazująca preferowany kierunek ruchu. Ponieważ wszystkie kierunki są równe, wyświetlany jest punkt.
Teraz musimy uruchomić symulację, zbadać nasze środowisko i nauczyć się lepszego rozkładu wartości Q-Tablicy, który pozwoli nam znacznie szybciej znaleźć drogę do jabłka.
Teraz musimy uruchomić symulację, eksplorować środowisko i nauczyć się lepszego rozkładu wartości w Q-Table, co pozwoli nam szybciej znaleźć drogę do jabłka.
## Istota Q-Learningu: Równanie Bellmana
Gdy zaczniemy się poruszać, każda akcja będzie miała odpowiadającą jej nagrodę, tj. teoretycznie możemy wybrać następną akcję na podstawie najwyższej natychmiastowej nagrody. Jednak w większości stanów ruch nie osiągnie naszego celu, jakim jest dotarcie do jabłka, i dlatego nie możemy od razu zdecydować, który kierunek jest lepszy.
Po rozpoczęciu ruchu każda akcja będzie miała odpowiadającą nagrodę, tzn. teoretycznie możemy wybrać następną akcję na podstawie najwyższej bezpośredniej nagrody. Jednak w większości stanów ruch nie doprowadzi do osiągnięcia celu, jakim jest dotarcie do jabłka, więc nie możemy od razu zdecydować, który kierunek jest lepszy.
> Pamiętaj, że nie liczy się natychmiastowy wynik, ale raczej ostateczny wynik, który uzyskamy na końcu symulacji.
> Pamiętaj, że liczy się nie natychmiastowy wynik, lecz wynik końcowy, który uzyskamy na końcu symulacji.
Aby uwzględnić tę opóźnioną nagrodę, musimy skorzystać z zasad **[programowania dynamicznego](https://en.wikipedia.org/wiki/Dynamic_programming)**, które pozwalają nam myśleć o naszym problemie w sposób rekurencyjny.
Aby uwzględnić tę opóźnioną nagrodę, musimy użyć zasad **[programowania dynamicznego](https://pl.wikipedia.org/wiki/Programowanie_dynamiczne)**, które pozwala rozważać problem rekurencyjnie.
Załóżmy, że teraz znajdujemy się w stanie *s*, i chcemy przejść do następnego stanu *s'*. Wykonując to, otrzymamy natychmiastową nagrodę *r(s,a)*, zdefiniowaną przez funkcję nagrody, plus jakąś przyszłą nagrodę. Jeśli założymy, że nasza Q-Tablica poprawnie odzwierciedla "atrakcyjność" każdej akcji, to w stanie *s'* wybierzemy akcję *a*, która odpowiada maksymalnej wartości *Q(s',a')*. Tak więc najlepsza możliwa przyszła nagroda, jaką możemy uzyskać w stanie *s*, będzie zdefiniowana jako `max`
Załóżmy, że jesteśmy teraz w stanie *s* i chcemy przejść do następnego stanu *s'*. W ten sposób otrzymamy natychmiastową nagrodę *r(s,a)*, zdefiniowaną przez funkcję nagrody, plus pewną przyszłą nagrodę. Jeśli założymy, że nasza Q-Table poprawnie odzwierciedla „atrakcyjność” każdej akcji, to w stanie *s'* wybierzemy akcję *a*, która odpowiada maksymalnej wartości *Q(s',a')*. Zatem najlepsza możliwa przyszła nagroda w stanie *s* będzie zdefiniowana jako `max`<sub>a'</sub>*Q(s',a')* (maksimum tutaj jest liczone po wszystkich możliwych akcjach *a'* w stanie *s'*).
To daje **wzór Bellmana** do obliczenia wartości Q-Table w stanie *s*, wykonując akcję *a*:
Tutaj γ to tzw. **współczynnik dyskontujący**, który określa, w jakim stopniu powinieneś woleć nagrodę obecną nad przyszłą i odwrotnie.
## Algorytm uczenia
Mając powyższe równanie, możemy teraz napisać pseudokod dla naszego algorytmu uczenia:
* Zainicjalizuj Q-Table Q równymi wartościami dla wszystkich stanów i akcji
* Ustaw współczynnik uczenia α ← 1
* Powtarzaj symulację wiele razy
1. Zacznij od losowej pozycji
1. Powtarzaj
1. Wybierz akcję *a* w stanie *s*
2. Wykonaj akcję, przechodząc do nowego stanu *s'*
3. Jeśli nastąpi warunek zakończenia gry lub suma nagród jest zbyt mała - zakończ symulację
4. Oblicz nagrodę *r* w nowym stanie
5. Zaktualizuj funkcję Q według wzoru Bellmana: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Zaktualizuj sumę nagród i zmniejsz α.
## Eksploatacja vs. eksploracja
W powyższym algorytmie nie określiliśmy dokładnie, jak wybrać akcję w kroku 2.1. Jeśli wybieramy akcję losowo, będziemy losowo **eksplorować** środowisko, i jest duże prawdopodobieństwo, że często zginiesz oraz będziesz eksplorować obszary, gdzie normalnie byś nie poszedł. Alternatywne podejście to **eksploatacja** wartości w Q-Table, które już znamy i wybieranie najlepszej akcji (z wyższą wartością Q) w stanie *s*. To jednak uniemożliwia eksplorację innych stanów i istnieje duże prawdopodobieństwo, że nie znajdziemy optymalnego rozwiązania.
Dlatego najlepiej jest zachować równowagę między eksploracją i eksploatacją. Można to osiągnąć, wybierając akcję w stanie *s* z prawdopodobieństwami proporcjonalnymi do wartości w Q-Table. Na początku, gdy wartości Q-Table są wszystkie takie same, będzie to odpowiadać losowemu wyborowi, ale w miarę poznawania środowiska bardziej prawdopodobne będzie podążanie optymalną ścieżką, umożliwiając agentowi od czasu do czasu wybrać nieznaną ścieżkę.
## Implementacja w Pythonie
Jesteśmy gotowi, aby zaimplementować algorytm uczenia. Zanim to zrobimy, potrzebujemy funkcji, która przekształci dowolne liczby w Q-Table na wektor prawdopodobieństw odpowiadających akcjom.
1. Stwórz funkcję `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Dodajemy kilka `eps` do oryginalnego wektora, aby uniknąć dzielenia przez 0 w początkowym przypadku, gdy wszystkie składowe wektora są identyczne.
Uruchom algorytm uczenia przez 5000 eksperymentów, zwanych też **epokami**: (blok kodu 8)
```python
for epoch in range(5000):
# Wybierz punkt początkowy
m.random_start()
# Rozpocznij podróż
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # pozwalamy graczowi poruszać się poza planszą, co kończy epizod
Po wykonaniu tego algorytmu Q-Table powinna zostać zaktualizowana o wartości określające atrakcyjność różnych akcji na każdym kroku. Możemy spróbować zwizualizować Q-Table, rysując wektor w każdej komórce, który wskaże pożądany kierunek ruchu. Dla uproszczenia rysujemy małe kółko zamiast grotu strzałki.
Ponieważ Q-Table zawiera "atrakcyjność" każdej akcji w każdym stanie, łatwo jest wykorzystać ją do zdefiniowania efektywnej nawigacji w naszym świecie. W najprostszym przypadku możemy wybrać akcję odpowiadającą najwyższej wartości w Q-Table: (blok kodu 9)
Ponieważ Q-Table wskazuje „atrakcyjność” każdej akcji w każdym stanie, łatwo jest użyć jej do określenia efektywnej nawigacji w naszym świecie. W najprostszym przypadku możemy wybrać akcję odpowiadającą najwyższej wartości w Q-Table: (blok kodu 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Jeśli uruchomisz powyższy kod kilka razy, możesz zauważyć, że czasami "zawiesza się" i musisz nacisnąć przycisk STOP w notebooku, aby go przerwać. Dzieje się tak, ponieważ mogą wystąpić sytuacje, w których dwa stany "wskazują" na siebie nawzajem pod względem optymalnej wartości Q-Value, w wyniku czego agent porusza się między tymi stanami w nieskończoność.
> Jeśli spróbujesz powyższego kodu kilka razy, możesz zauważyć, że czasami "zawiesza się" i musisz nacisnąć przycisk STOP w notatniku, aby go przerwać. Dzieje się tak, ponieważ mogą istnieć sytuacje, gdy dwa stany "wskazują" na siebie nawzajem pod względem optymalnej wartości Q, w takim przypadku agent kończy poruszając się między tymi stanami w nieskończoność.
## 🚀Wyzwanie
> **Zadanie 1:** Zmodyfikuj funkcję `walk`, aby ograniczyć maksymalną długość ścieżki do określonej liczby kroków (np. 100) i zobacz, jak powyższy kod czasami zwraca tę wartość.
> **Zadanie 1:** Zmodyfikuj funkcję `walk`, aby ograniczyć maksymalną długość ścieżki do określonej liczby kroków (na przykład 100) i obserwuj, jak powyższy kod od czasu do czasu zwraca tę wartość.
> **Zadanie 2:** Zmodyfikuj funkcję `walk`, aby nie wracała do miejsc, w których już wcześniej była. Zapobiegnie to zapętleniu `walk`, jednak agent nadal może utknąć w miejscu, z którego nie może się wydostać.
> **Zadanie 2:** Zmodyfikuj funkcję `walk`, tak aby nie wracała do miejsc, w których już wcześniej była. Zapobiegnie to zapętleniu się funkcji `walk`, jednak agent nadal może zostać "uwięziony" w miejscu, z którego nie będzie mógł uciec.
## Nawigacja
Lepszą polityką nawigacji byłaby ta, którą stosowaliśmy podczas treningu, łącząca eksploatację i eksplorację. W tej polityce wybieramy każdą akcję z określonym prawdopodobieństwem, proporcjonalnym do wartości w Q-Table. Ta strategia może nadal prowadzić do powrotu agenta do pozycji, którą już eksplorował, ale, jak widać w poniższym kodzie, skutkuje bardzo krótką średnią ścieżką do pożądanej lokalizacji (pamiętaj, że `print_statistics` uruchamia symulację 100 razy): (blok kodu 10)
Lepsza polityka nawigacyjna to taka, którą stosowaliśmy podczas treningu – łączy ona eksploatację i eksplorację. W tej polityce wybieramy każdą akcję z pewnym prawdopodobieństwem, proporcjonalnym do wartości w Q-Table. Taka strategia może nadal powodować, że agent wróci do już zwiedzonej pozycji, ale jak widać z poniższego kodu, skutkuje bardzo krótką średnią ścieżką do pożądanego miejsca (pamiętaj, że `print_statistics` uruchamia symulację 100 razy): (blok kodu 10)
```python
def qpolicy(m):
@ -220,21 +297,23 @@ def qpolicy(m):
print_statistics(qpolicy)
```
Po uruchomieniu tego kodu powinieneś uzyskać znacznie krótszą średnią długość ścieżki niż wcześniej, w zakresie 3-6.
Po uruchomieniu tego kodu powinieneś otrzymać znacznie krótszą średnią długość ścieżki niż wcześniej, w zakresie 3-6.
## Analiza procesu uczenia się
## Badanie procesu uczenia
Jak wspomnieliśmy, proces uczenia się jest równowagą między eksploracją a eksploatacją zdobytej wiedzy o strukturze przestrzeni problemu. Widzieliśmy, że wyniki uczenia (umiejętność pomocy agentowi w znalezieniu krótkiej ścieżki do celu) poprawiły się, ale warto również obserwować, jak średnia długość ścieżki zachowuje się podczas procesu uczenia:
Jak wspomnieliśmy, proces uczenia to balans między eksploracją a wykorzystaniem zdobytej wiedzy o strukturze przestrzeni problemowej. Widzieliśmy, że wyniki uczenia (zdolność do pomocy agentowi w znalezieniu krótkiej ścieżki do celu) poprawiły się, ale interesujące jest również obserwowanie, jak średnia długość ścieżki zachowuje się podczas procesu uczenia:
- **Średnia długość ścieżki rośnie**. Na początku średnia długość ścieżki rośnie. Wynika to prawdopodobnie z faktu, że gdy nic nie wiemy o środowisku, łatwo jest utknąć w złych stanach, takich jak woda czy wilk. Gdy uczymy się więcej i zaczynamy korzystać z tej wiedzy, możemy eksplorować środowisko dłużej, ale nadal nie znamy dobrze lokalizacji jabłek.
- **Średnia długość ścieżki wzrasta**. Możemy zauważyć, że na początku średnia długość ścieżki rośnie. Wynika to prawdopodobnie z faktu, że gdy nic nie wiemy o środowisku, prawdopodobnie utknęliśmy w złych stanach, wodzie lub wilku. W miarę jak uczymy się więcej i zaczynamy wykorzystywać tę wiedzę, możemy eksplorować środowisko dłużej, ale nadal nie znamy zbyt dobrze lokalizacji jabłek.
- **Długość ścieżki maleje, gdy uczymy się więcej**. Gdy nauczymy się wystarczająco dużo, agentowi łatwiej jest osiągnąć cel, a długość ścieżki zaczyna się zmniejszać. Jednak nadal jesteśmy otwarci na eksplorację, więc często odbiegamy od najlepszej ścieżki i eksplorujemy nowe opcje, co wydłuża ścieżkę ponad optymalną.
- **Długość ścieżki maleje wraz z nauką**. Gdy nauczymy się wystarczająco dużo, agentowi łatwiej jest osiągnąć cel, a długość ścieżki zaczyna się skracać. Nadal jednak pozostajemy otwarci na eksplorację, więc często odbiegamy od najlepszej ścieżki, próbując różnych opcji, co wydłuża ścieżkę ponad optymalną długość.
- **Długość nagle wzrasta**. Na wykresie można również zauważyć, że w pewnym momencie długość nagle wzrasta. Wskazuje to na stochastyczny charakter procesu i na to, że w pewnym momencie możemy "zepsuć" współczynniki Q-Table, nadpisując je nowymi wartościami. Idealnie powinno się to minimalizować, zmniejszając współczynnik uczenia (na przykład pod koniec treningu dostosowujemy wartości Q-Table tylko o niewielką wartość).
- **Długość gwałtownie rośnie**. Co również obserwujemy na tym wykresie, to nagły wzrost długości ścieżki w pewnym momencie. Wskazuje to na stochastyczny charakter procesu, a także na to, że możemy w pewnym momencie "zepsuć" współczynniki w Q-Table, nadpisując je nowymi wartościami. Idealnie powinno się to minimalizować poprzez zmniejszenie współczynnika uczenia (na przykład pod koniec treningu, aktualizujemy wartości w Q-Table tylko o małą wartość).
Ogólnie rzecz biorąc, ważne jest, aby pamiętać, że sukces i jakość procesu uczenia w dużej mierze zależą od parametrów, takich jak współczynnik uczenia, jego zmniejszanie oraz współczynnik dyskontowy. Często nazywa się je**hiperparametrami**, aby odróżnić je od **parametrów**, które optymalizujemy podczas treningu (na przykład współczynniki Q-Table). Proces znajdowania najlepszych wartości hiperparametrów nazywa się **optymalizacją hiperparametrów** i zasługuje na osobny temat.
Ogólnie rzecz biorąc, ważne jest, aby pamiętać, że sukces i jakość procesu uczenia się w dużej mierze zależy od parametrów, takich jak współczynnik uczenia, spadek współczynnika uczenia i współczynnik dyskonta. Często nazywane są to**hiperparametrami**, aby odróżnić je od **parametrów**, które optymalizujemy podczas treningu (na przykład współczynniki Q-Table). Proces znajdowania najlepszych wartości hiperparametrów nazywa się **optymalizacją hiperparametrów** i zasługuje na osobny temat.
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
@ -243,5 +322,7 @@ Ogólnie rzecz biorąc, ważne jest, aby pamiętać, że sukces i jakość proce
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zastrzeżenie**:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
# Postscript: Debugowanie modeli w uczeniu maszynowym za pomocą komponentów pulpitu odpowiedzialnej AI
# Postscript: Debugowanie modelu w uczeniu maszynowym za pomocą komponentów pulpitu odpowiedzialnej AI
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
## Wprowadzenie
Uczenie maszynowe wpływa na nasze codzienne życie. Sztuczna inteligencja (AI) znajduje zastosowanie w jednych z najważniejszych systemów, które mają wpływ na nas jako jednostki i społeczeństwo, takich jak opieka zdrowotna, finanse, edukacja czy zatrudnienie. Na przykład systemy i modele są zaangażowane w codzienne procesy decyzyjne, takie jak diagnozy medyczne czy wykrywanie oszustw. W związku z tym postępy w AI oraz jej przyspieszone wdrażanie spotykają się z rosnącymi oczekiwaniami społecznymi i regulacjami. Wciąż obserwujemy obszary, w których systemy AI nie spełniają oczekiwań, ujawniają nowe wyzwania, a rządy zaczynają regulować rozwiązania AI. Dlatego ważne jest, aby analizować te modele, aby zapewnić sprawiedliwe, wiarygodne, inkluzywne, przejrzyste i odpowiedzialne wyniki dla wszystkich.
Uczenie maszynowe wpływa na nasze codzienne życie. AI znajduje zastosowanie w niektórych z najważniejszych systemów, które mają wpływ na nas jako jednostki, jak i na społeczeństwo, od opieki zdrowotnej, finansów, edukacji po zatrudnienie. Na przykład, systemy i modele uczestniczą w codziennych zadaniach decyzyjnych, takich jak diagnozy zdrowotne czy wykrywanie oszustw. W konsekwencji, postęp w AI wraz z przyspieszonym wdrożeniem są spotykane z ewoluującymi oczekiwaniami społecznymi i rosnącymi regulacjami. Ciągle widzimy obszary, w których systemy AI nadal nie spełniają oczekiwań; ujawniają nowe wyzwania; a rządy zaczynają regulować rozwiązania AI. Dlatego ważne jest, aby te modele były analizowane, aby dostarczać sprawiedliwe, wiarygodne, inkluzywne, przejrzyste i odpowiedzialne wyniki dla wszystkich.
W tym kursie przyjrzymy się praktycznym narzędziom, które można wykorzystać do oceny, czy model ma problemy związane z odpowiedzialną AI. Tradycyjne techniki debugowania uczenia maszynowego opierają się głównie na obliczeniach ilościowych, takich jak zagregowana dokładność czy średnia strata błędu. Wyobraź sobie, co może się stać, gdy dane, których używasz do budowy tych modeli, nie uwzględniają pewnych grup demograficznych, takich jak rasa, płeć, poglądy polityczne, religia, lub gdy są one nadmiernie reprezentowane. Co w sytuacji, gdy wyniki modelu są interpretowane w sposób faworyzujący pewne grupy demograficzne? Może to prowadzić do nadmiernej lub niedostatecznej reprezentacji tych wrażliwych grup cech, co skutkuje problemami z uczciwością, inkluzywnością lub wiarygodnością modelu. Kolejnym wyzwaniem jest to, że modele uczenia maszynowego są często traktowane jako "czarne skrzynki", co utrudnia zrozumienie i wyjaśnienie, co napędza ich przewidywania. Wszystkie te kwestie stanowią wyzwania dla naukowców zajmujących się danymi i twórców AI, którzy nie mają odpowiednich narzędzi do debugowania i oceny uczciwości czy wiarygodności modelu.
W tym programie zajęć przyjrzymy się praktycznym narzędziom, które można wykorzystać do oceny, czy model ma problemy z odpowiedzialną AI. Tradycyjne techniki debugowania uczenia maszynowego opierają się na obliczeniach ilościowych, takich jak zagregowana dokładność czy średnia strata błędu. Wyobraź sobie, co może się stać, gdy dane, których używasz do budowy tych modeli, nie uwzględniają pewnych demografii, takich jak rasa, płeć, poglądy polityczne, religia, albo dysproporcjonalnie reprezentują takie demografie. A co, gdy wynik modelu jest interpretowany na korzyść jednej grupy demograficznej? Może to wprowadzić nad- lub niedoreprezentację tych wrażliwych grup cech, powodując problemy ze sprawiedliwością, inkluzywnością lub wiarygodnością modelu. Kolejnym czynnikiem jest to, że modele uczenia maszynowego są uważane za czarne skrzynki, co utrudnia zrozumienie i wyjaśnienie czynników wpływających na predykcję modelu. Wszystkie te wyzwania stoją przed naukowcami danych i deweloperami AI, gdy nie dysponują odpowiednimi narzędziami do debugowania oraz oceny sprawiedliwości i wiarygodności modelu.
W tej lekcji dowiesz się, jak debugować swoje modele, korzystając z:
W tej lekcji nauczysz się debugowania swoich modeli za pomocą:
-**Analizy błędów**: identyfikowanie obszarów w rozkładzie danych, w których model ma wysokie wskaźniki błędów.
-**Przeglądu modelu**: przeprowadzanie analizy porównawczej w różnych kohortach danych w celu wykrycia rozbieżności w metrykach wydajności modelu.
-**Analizy danych**: badanie, gdzie może występować nadmierna lub niedostateczna reprezentacja danych, która może wpływać na faworyzowanie jednej grupy demograficznej kosztem innej.
-**Ważności cech**: zrozumienie, które cechy napędzają przewidywania modelu na poziomie globalnym lub lokalnym.
-**Analizy błędów**: identyfikacji miejsc w rozkładzie danych, w których model ma wysokie wskaźniki błędów.
-**Przeglądu modelu**: przeprowadzenia analizy porównawczej różnych kohort danych w celu wykrycia rozbieżności w metrykach wydajności modelu.
-**Analizy danych**: zbadania, gdzie może występować nad- lub niedoreprezentacja danych, która może powodować faworyzowanie przez model jednej grupy demograficznej nad inną.
-**Ważności cech**: zrozumienia, które cechy wpływają na predykcje modelu na poziomie globalnym lub lokalnym.
## Wymagania wstępne
Jako wstęp, zapoznaj się z [narzędziami odpowiedzialnej AI dla programistów](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard).
Jako wymóg wstępny, proszę zapoznaj się z przeglądem [Narzędzi odpowiedzialnej AI dla deweloperów](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard)
> 
> 
## Analiza błędów
Tradycyjne metryki wydajności modeli używane do pomiaru dokładności to głównie obliczenia oparte na poprawnych i niepoprawnych przewidywaniach. Na przykład stwierdzenie, że model jest dokładny w 89% przypadków przy stracie błędu wynoszącej 0,001, może być uznane za dobrą wydajność. Jednak błędy często nie są równomiernie rozłożone w podstawowym zbiorze danych. Możesz uzyskać wynik dokładności modelu na poziomie 89%, ale odkryć, że w niektórych obszarach danych model zawodzi w 42% przypadków. Konsekwencje takich wzorców błędów w określonych grupach danych mogą prowadzić do problemów z uczciwością lub wiarygodnością. Ważne jest, aby zrozumieć, w jakich obszarach model działa dobrze, a w jakich nie. Obszary danych, w których występuje wysoka liczba nieścisłości, mogą okazać się istotnymi grupami demograficznymi.
Tradycyjne metryki wydajności modelu używane do mierzenia dokładności to głównie obliczenia bazujące na prawidłowych vs nieprawidłowych predykcjach. Na przykład, stwierdzenie, że model jest dokładny w 89% przypadków ze stratą błędu 0,001 może być uznane za dobrą wydajność. Błędy często nie są równomiernie rozłożone w twoim zbiorze danych. Możesz uzyskać 89% dokładności modelu, ale odkryć, że są różne obszary danych, dla których model zawodzi w 42% przypadków. Konsekwencją takich wzorców błędów w określonych grupach danych mogą być problemy ze sprawiedliwością lub wiarygodnością. Kluczowe jest zrozumienie obszarów, w których model działa dobrze lub słabo. Regiony danych, gdzie model popełnia wiele błędów, mogą okazać się ważną grupą demograficzną.


Komponent Analizy Błędów na pulpicie RAI ilustruje, jak rozkładają się błędy modelu w różnych kohortach za pomocą wizualizacji drzewa. Jest to przydatne w identyfikowaniu cech lub obszarów, w których wskaźnik błędów w zbiorze danych jest wysoki. Dzięki temu, że widzisz, skąd pochodzą największe nieścisłości modelu, możesz zacząć badać ich przyczyny. Możesz również tworzyć kohorty danych do analizy. Te kohorty danych pomagają w procesie debugowania, aby określić, dlaczego wydajność modelu jest dobra w jednej kohorcie, a błędna w innej.
Komponent Analizy błędów na pulpicie RAI ilustruje, jak rozkładają się błędy modelu w różnych kohortach za pomocą wizualizacji drzewa. Jest to przydatne do identyfikacji cech lub obszarów, gdzie występuje wysoki wskaźnik błędów w twoim zbiorze danych. Widząc, skąd pochodzą największe nieścisłości modelu, możesz rozpocząć dochodzenie przyczyn źródłowych. Możesz też tworzyć kohorty danych w celu przeprowadzenia analizy. Te kohorty pomagają podczas procesu debugowania, aby określić, dlaczego model działa dobrze w jednej kohorcie, a błędnie w innej.
Wskaźniki wizualne na mapie drzewa pomagają szybciej zlokalizować problematyczne obszary. Na przykład im ciemniejszy odcień czerwieni ma węzeł drzewa, tym wyższy wskaźnik błędów.
Wizualne wskaźniki na mapie drzewa pomagają szybszej lokalizacji problematycznych obszarów. Na przykład, im ciemniejszy odcień czerwonego ma węzeł drzewa, tym wyższy wskaźnik błędów.
Mapa cieplna to kolejna funkcjonalność wizualizacji, którą użytkownicy mogą wykorzystać do badania wskaźnika błędów przy użyciu jednej lub dwóch cech, aby znaleźć przyczynę błędów modelu w całym zbiorze danych lub kohortach.
Mapa cieplna to kolejna funkcja wizualizacyjna, którą użytkownicy mogą wykorzystać w badaniu wskaźnika błędów, używając jednej lub dwóch cech, aby znaleźć przyczynę błędów modelu w całym zbiorze danych lub kohortach.


Używaj analizy błędów, gdy potrzebujesz:
Wykorzystaj analizę błędów, gdy potrzebujesz:
* Dogłębnie zrozumieć, jak rozkładają się błędy modelu w zbiorze danych oraz w różnych wymiarach wejściowych i cech.
* Rozłożyć zagregowane metryki wydajności, aby automatycznie odkryć błędne kohorty i zaplanować ukierunkowane kroki naprawcze.
* Dogłębnie zrozumieć, jak rozkładają się błędy modelu w zbiorze danych i w różnych wymiarach wejścia oraz cech.
* Rozłożyć zagregowane metryki wydajności, aby automatycznie odkrywać błędne kohorty i informować o ukierunkowanych działaniach naprawczych.
## Przegląd modelu
Ocena wydajności modelu uczenia maszynowego wymaga holistycznego zrozumienia jego zachowania. Można to osiągnąć, analizując więcej niż jedną metrykę, taką jak wskaźnik błędów, dokładność, czułość, precyzja czy MAE (średni błąd bezwzględny), aby znaleźć rozbieżności między metrykami wydajności. Jedna metryka wydajności może wyglądać świetnie, ale niedokładności mogą ujawnić się w innej metryce. Ponadto porównanie metryk pod kątem rozbieżności w całym zbiorze danych lub kohortach pomaga rzucić światło na to, gdzie model działa dobrze, a gdzie nie. Jest to szczególnie ważne w analizie wydajności modelu wśród cech wrażliwych i niewrażliwych (np. rasa pacjenta, płeć czy wiek), aby odkryć potencjalną niesprawiedliwość modelu. Na przykład odkrycie, że model jest bardziej błędny w kohorcie zawierającej cechy wrażliwe, może ujawnić potencjalną niesprawiedliwość modelu.
Ocena wydajności modelu uczenia maszynowego wymaga uzyskania całościowego zrozumienia jego zachowania. Można to osiągnąć, analizując więcej niż jedną metrykę, taką jak wskaźnik błędów, dokładność, recall, precyzję czy MAE (średni bezwzględny błąd) w celu znalezienia rozbieżności pomiędzy metrykami wydajności. Jedna metryka może wyglądać dobrze, ale niedokładności mogą się ujawnić w innej mierze. Dodatkowo porównanie metryk pod kątem rozbieżności w całym zbiorze danych lub w kohortach pomaga zobaczyć, gdzie model działa dobrze, a gdzie nie. Jest to szczególnie ważne przy ocenianiu wydajności modelu między cechami wrażliwymi a niewrażliwymi (np. rasa pacjenta, płeć czy wiek), aby odkryć potencjalną niesprawiedliwość modelu. Na przykład, odkrycie, że model jest bardziej błędny w kohorcie zawierającej wrażliwe cechy, może ujawnić potencjalną niesprawiedliwość modelu.
Komponent Przeglądu Modelu na pulpicie RAI pomaga nie tylko w analizie metryk wydajności reprezentacji danych w kohorcie, ale także daje użytkownikom możliwość porównania zachowania modelu w różnych kohortach.
Komponent Przeglądu modelu na pulpicie RAI pomaga nie tylko w analizie metryk wydajności danych reprezentowanych w kohorcie, ale daje użytkownikom możliwość porównania zachowania modelu w różnych kohortach.


Funkcjonalność analizy opartej na cechach w tym komponencie pozwala użytkownikom zawęzić podgrupy danych w ramach konkretnej cechy, aby zidentyfikować anomalie na poziomie szczegółowym. Na przykład pulpit ma wbudowaną inteligencję, która automatycznie generuje kohorty dla wybranej przez użytkownika cechy (np. *"time_in_hospital < 3"* lub *"time_in_hospital >= 7"*). Umożliwia to użytkownikowi izolowanie konkretnej cechy z większej grupy danych, aby sprawdzić, czy jest ona kluczowym czynnikiem wpływającym na błędne wyniki modelu.
Funkcjonalność analizy cech w tym komponencie pozwala użytkownikom zawęzić podgrupy danych w ramach konkretnej cechy, aby zidentyfikować anomalie na szczegółowym poziomie. Na przykład, pulpit posiada wbudowaną inteligencję do automatycznego generowania kohort dla wybranej cechy (np. *"time_in_hospital < 3"* lub *"time_in_hospital >= 7"*). Pozwala to użytkownikowi odseparować jedną cechę z większej grupy danych, aby sprawdzić, czy jest ona kluczowym czynnikiem wpływającym na błędne wyniki modelu.


Komponent Przeglądu Modelu obsługuje dwie klasy metryk rozbieżności:
Komponent Przeglądu modelu obsługuje dwa rodzaje metryk rozbieżności:
**Rozbieżność w wydajności modelu**: Te zestawy metryk obliczają różnicę w wartościach wybranej metryki wydajności w różnych podgrupach danych. Oto kilka przykładów:
**Rozbieżność w wydajności modelu**: Zestawy tych metryk obliczają różnicę (rozbieżność) w wartościach wybranej metryki wydajności w różnych podgrupach danych. Oto kilka przykładów:
* Rozbieżność w wskaźniku dokładności
* Rozbieżność w wskaźniku błędów
* Rozbieżność w precyzji
* Rozbieżność w czułości
* Rozbieżność w średnim błędzie bezwzględnym (MAE)
* Rozbieżność w recallu
* Rozbieżność w średnim bezwzględnym błędzie (MAE)
**Rozbieżność w wskaźniku selekcji**: Ta metryka zawiera różnicę w wskaźniku selekcji (korzystne przewidywanie) w różnych podgrupach. Przykładem może być rozbieżność w wskaźnikach zatwierdzania kredytów. Wskaźnik selekcji oznacza odsetek punktów danych w każdej klasie sklasyfikowanych jako 1 (w klasyfikacji binarnej) lub rozkład wartości przewidywań (w regresji).
**Rozbieżność w wskaźniku selekcji**: Ta metryka zawiera różnicę we wskaźniku selekcji (korzystnej predykcji) między podgrupami. Przykładem może być rozbieżność w stopach zatwierdzania pożyczek. Wskaźnik selekcji oznacza ułamek punktów danych w każdej klasie sklasyfikowanych jako 1 (w klasyfikacji binarnej) lub rozkład wartości predykcji (w regresji).
## Analiza danych
> "Jeśli wystarczająco długo torturujesz dane, przyznają się do wszystkiego" - Ronald Coase
> "Jeśli będziesz długo torturować dane, przyznają się do wszystkiego" - Ronald Coase
To stwierdzenie brzmi ekstremalnie, ale prawdą jest, że dane można manipulować, aby wspierać każde wnioski. Taka manipulacja czasem dzieje się nieświadomie. Jako ludzie wszyscy mamy uprzedzenia, i często trudno świadomie zauważyć, kiedy wprowadzamy je do danych. Zapewnienie sprawiedliwości w AI i uczeniu maszynowym pozostaje złożonym wyzwaniem.
To stwierdzenie brzmi ekstremalnie, ale prawdą jest, że dane można manipulować, aby wspierały dowolny wniosek. Taka manipulacja może czasem zdarzyć się nieumyślnie. Jako ludzie wszyscy mamy uprzedzenia i często trudno jest świadomie zauważyć, kiedy wprowadzamy uprzedzenia do danych. Zapewnienie uczciwości w AI i uczeniu maszynowym pozostaje złożonym wyzwaniem.
Dane to ogromny ślepy punkt dla tradycyjnych metryk wydajności modelu. Możesz mieć wysokie wskaźniki dokładności, ale to nie zawsze odzwierciedla ukryte uprzedzenia danych, które mogą znajdować się w zbiorze. Na przykład, jeśli zbiór pracowników ma 27% kobiet na stanowiskach kierowniczych i 73% mężczyzn na tym samym poziomie, model AI do reklamowania pracy trenowany na takich danych może kierować swoje reklamy głównie do mężczyzn na stanowiska wyższego szczebla. Taka nierównowaga w danych wypaczyła predykcję modelu na korzyść jednej płci. To ujawnia problem sprawiedliwości, gdzie model AI ma uprzedzenia płciowe.
Dane są ogromnym punktem ślepym dla tradycyjnych metryk wydajności modeli. Możesz mieć wysokie wskaźniki dokładności, ale nie zawsze odzwierciedlają one ukryte uprzedzenia w danych. Na przykład, jeśli zbiór danych pracowników zawiera 27% kobiet na stanowiskach kierowniczych w firmie i 73% mężczyzn na tym samym poziomie, model AI do ogłaszania ofert pracy przeszkolony na tych danych może kierować swoje ogłoszenia głównie do mężczyzn na stanowiska wyższego szczebla. Taka nierównowaga w danych wpłynęła na przewidywania modelu, faworyzując jedną płeć. To ujawnia problem z uczciwością, gdzie model AI wykazuje uprzedzenia płciowe.
Komponent Analizy danych na pulpicie RAI pomaga zidentyfikować obszary nad- i niedoreprezentacji w zbiorze danych. Umożliwia użytkownikom diagnozowanie przyczyn błędów i problemów ze sprawiedliwością wynikających z nierówności danych lub braku reprezentacji określonej grupy danych. Daje możliwość wizualizacji zbiorów danych na podstawie przewidywanych i rzeczywistych wyników, grup błędów oraz konkretnych cech. Czasem odkrycie niedoreprezentowanej grupy danych może również ujawnić, że model źle uczy się danych, co powoduje wysoką liczbę błędów. Posiadanie modelu z uprzedzeniami danych nie jest tylko problemem sprawiedliwości, ale również pokazuje, że model nie jest inkluzywny ani wiarygodny.
Komponent Analizy Danych na pulpicie RAI pomaga zidentyfikować obszary, w których występuje nadmierna lub niedostateczna reprezentacja w zbiorze danych. Pomaga użytkownikom diagnozować przyczyny błędów i problemów z uczciwością wynikających z nierównowagi danych lub braku reprezentacji określonej grupy danych. Daje użytkownikom możliwość wizualizacji zbiorów danych na podstawie przewidywanych i rzeczywistych wyników, grup błędów i konkretnych cech. Czasami odkrycie niedostatecznie reprezentowanej grupy danych może również ujawnić, że model nie uczy się dobrze, co skutkuje wysokimi niedokładnościami. Model, który ma uprzedzenia w danych, nie tylko ma problem z uczciwością, ale także pokazuje, że nie jest inkluzywny ani wiarygodny.


Używaj analizy danych, gdy potrzebujesz:
Wykorzystaj analizę danych, gdy potrzebujesz:
* Eksplorować statystyki swojego zbioru danych, wybierając różne filtry, aby podzielić dane na różne wymiary (znane również jako kohorty).
* Zrozumieć rozkład swojego zbioru danych w różnych kohortach i grupach cech.
* Określić, czy Twoje ustalenia dotyczące uczciwości, analizy błędów i przyczynowości (pochodzące z innych komponentów pulpitu) wynikają z rozkładu Twojego zbioru danych.
* Zdecydować, w których obszarach należy zebrać więcej danych, aby zminimalizować błędy wynikające z problemów z reprezentacją, szumem etykiet, szumem cech, uprzedzeniami etykiet i podobnymi czynnikami.
* Określić, czy Twoje spostrzeżenia dotyczące sprawiedliwości, analizy błędów i przyczynowości (pochodzące z innych komponentów pulpitu) są wynikiem rozkładu Twojego zbioru danych.
* Zdecydować, w jakich obszarach trzeba zebrać więcej danych, aby złagodzić błędy wynikające z problemów z reprezentacją, szumu etykiet, szumu cech, uprzedzeń etykiet i podobnych czynników.
## Interpretowalność modelu
Modele uczenia maszynowego często są traktowane jako "czarne skrzynki". Zrozumienie, które kluczowe cechy danych napędzają przewidywania modelu, może być wyzwaniem. Ważne jest, aby zapewnić przejrzystość, dlaczego model dokonuje określonego przewidywania. Na przykład, jeśli system AI przewiduje, że pacjent z cukrzycą jest zagrożony ponownym przyjęciem do szpitala w ciągu mniej niż 30 dni, powinien być w stanie dostarczyć dane wspierające, które doprowadziły do tego przewidywania. Posiadanie takich wskaźników danych wprowadza przejrzystość, która pomaga klinikom lub szpitalom podejmować świadome decyzje. Ponadto możliwość wyjaśnienia, dlaczego model dokonał przewidywania dla konkretnego pacjenta, umożliwia zgodność z regulacjami zdrowotnymi. Kiedy używasz modeli uczenia maszynowego w sposób wpływający na życie ludzi, kluczowe jest zrozumienie i wyjaśnienie, co wpływa na zachowanie modelu. Interpretowalność i wyjaśnialność modelu pomagają odpowiedzieć na pytania w takich scenariuszach jak:
Modele uczenia maszynowego mają zwykle charakter czarnej skrzynki. Zrozumienie, które kluczowe cechy danych wpływają na predykcję modelu, może być trudne. Ważne jest, aby zapewnić przejrzystość, dlaczego model dokonuje określonej predykcji. Na przykład, jeśli system AI przewiduje, że pacjent diabetyk jest zagrożony szybkim ponownym przyjęciem do szpitala w mniej niż 30 dni, powinien być w stanie dostarczyć dane wspierające tę predykcję. Posiadanie wskaźników wspierających zapewnia przejrzystość, co pomaga klinicystom lub szpitalom podejmować dobrze poinformowane decyzje. Ponadto, możliwość wyjaśnienia, dlaczego model dokonał predykcji dla konkretnego pacjenta, umożliwia rozliczalność w zgodzie z przepisami zdrowotnymi. Gdy wykorzystujesz modele uczenia maszynowego w sposób wpływający na życie ludzi, kluczowe jest rozumienie i wyjaśnianie, co wpływa na zachowanie modelu. Wyjaśnialność i interpretowalność modelu pomaga odpowiedzieć na pytania w takich scenariuszach jak:
* Debugowanie modelu: Dlaczego mój model popełnił ten błąd? Jak mogę go poprawić?
* Współpraca człowiek-AI: Jak mogę zrozumieć i zaufać decyzjom modelu?
* Zgodność z regulacjami: Czy mój model spełnia wymagania prawne?
* Zgodność regulacyjna: Czy mój model spełnia wymagania prawne?
Komponent Ważności cech na pulpicie RAI pomaga debugować i uzyskać wszechstronne zrozumienie, jak model dokonuje predykcji. To także przydatne narzędzie dla specjalistów uczenia maszynowego i decydentów do wyjaśniania i pokazywania dowodów na wpływ cech na zachowanie modelu dla zgodności regulacyjnej. Następnie użytkownicy mogą eksplorować zarówno wyjaśnienia globalne, jak i lokalne, by potwierdzić, które cechy kierowały predykcją modelu. Wyjaśnienia globalne wymieniają główne cechy wpływające na ogólną predykcję modelu. Wyjaśnienia lokalne pokazują, które cechy doprowadziły do predykcji modelu dla konkretnego przypadku. Możliwość oceny wyjaśnień lokalnych jest również pomocna w debugowaniu lub audycie konkretnego przypadku, aby lepiej zrozumieć i interpretować, dlaczego model dokonał dokładnej lub niedokładnej predykcji.

* Wyjaśnienia globalne: Na przykład, które cechy wpływają na całkowite zachowanie modelu przewidującego ponowne przyjęcie do szpitala pacjentów z cukrzycą?
* Wyjaśnienia lokalne: Na przykład, dlaczego pacjent diabetyk powyżej 60 lat z wcześniejszymi hospitalizacjami został przewidziany jako ponownie przyjęty lub nieprzyjęty do szpitala w ciągu 30 dni?
W procesie debugowania, podczas badania wydajności modelu w różnych kohortach, Ważność cech pokazuje, jaki wpływ ma dana cecha w ramach kohort. Pomaga ujawnić anomalie przy porównywaniu poziomu wpływu cechy na błędne predykcje modelu. Komponent Ważności cech może pokazać, które wartości w cechach pozytywnie lub negatywnie wpłynęły na wynik modelu. Na przykład, jeśli model dokonał niedokładnej predykcji, komponent umożliwia dogłębne zbadanie i wskazanie, które cechy lub wartości cech wpłynęły na predykcję. Poziom szczegółowości pomaga nie tylko w debugowaniu, ale również zapewnia przejrzystość i rozliczalność w sytuacjach audytu. Wreszcie komponent może pomóc zidentyfikować problemy ze sprawiedliwością. Na przykład, jeśli wrażliwa cecha, taka jak pochodzenie etniczne lub płeć, ma duży wpływ na predykcję modelu, może to być sygnał uprzedzeń rasowych lub płciowych w modelu.
* Określić, jak wiarygodne są predykcje twojego systemu AI, rozumiejąc, które cechy są najważniejsze dla tych predykcji.
* Podejść do debugowania modelu przez jego lepsze zrozumienie i zidentyfikowanie, czy model używa zdrowych cech, czy jedynie fałszywych korelacji.
* Odkryć potencjalne źródła niesprawiedliwości, rozumiejąc, czy model opiera predykcje na cechach wrażliwych lub na cechach silnie z nimi skorelowanych.
* Budować zaufanie użytkowników do decyzji modelu, generując wyjaśnienia lokalne ilustrujące ich wyniki.
* Przeprowadzić audyt regulacyjny systemu AI, aby zweryfikować modele i monitorować wpływ decyzji modelu na ludzi.
Komponent Ważności Cech na pulpicie RAI pomaga debugować i uzyskać kompleksowe zrozumienie, jak model dokonuje przewidywań. Jest to również przydatne narzędzie dla specjalistów od uczenia maszynowego i decydentów, aby wyjaśniać i przedstawiać dowody na cechy wpływające na zachowanie modelu w celu zgodności z regulacjami. Użytkownicy mogą następnie eksplorować zarówno globalne, jak i lokalne wyjaśnienia, aby zweryfikować, które cechy napędzają przewidywania modelu. Globalne wyjaśnienia wymieniają najważniejsze cechy, które wpłynęły na ogólne przewidywania modelu. Lokalne wyjaśnienia pokazują, które cechy doprowadziły do przewidywania modelu w indywidualnym przypadku. Możliwość oceny lokalnych wyjaśnień jest również pomocna w debugowaniu lub audycie konkretnego przypadku, aby lepiej zrozumieć i zinterpretować, dlaczego model dokonał poprawnego lub błędnego przewidywania.
## Podsumowanie

Wszystkie komponenty pulpitu RAI są praktycznymi narzędziami pomagającymi budować modele uczenia maszynowego, które są mniej szkodliwe i bardziej wiarygodne dla społeczeństwa. Poprawiają zapobieganie zagrożeniom dla praw człowieka; dyskryminacji lub wykluczania pewnych grup z możliwości życiowych; oraz ryzyka urazów fizycznych lub psychicznych. Pomagają również budować zaufanie do decyzji modelu, generując wyjaśnienia lokalne obrazujące ich wyniki. Niektóre potencjalne szkody można sklasyfikować jako:
* Globalne wyjaśnienia: Na przykład, jakie cechy wpływają na ogólne zachowanie modelu przewidującego ponowne przyjęcie do szpitala pacjentów z cukrzycą?
* Lokalne wyjaśnienia: Na przykład, dlaczego pacjent z cukrzycą powyżej 60 roku życia z wcześniejszymi hospitalizacjami został przewidziany jako ponownie przyjęty lub nieprzyjęty do szpitala w ciągu 30 dni?
- **Przydział**, jeśli np. płeć lub pochodzenie etniczne są faworyzowane względem innych.
- **Jakość usług**. Jeśli dane są trenowane dla jednego specyficznego scenariusza, a rzeczywistość jest znacznie bardziej złożona, prowadzi to do słabo działającej usługi.
- **Stereotypowanie**. Kojarzenie danej grupy z przypisanymi z góry cechami.
W procesie debugowania wydajności modelu w różnych kohortach, Ważność Cech pokazuje, jaki wpływ ma cecha w różnych kohortach. Pomaga ujawnić anomalie podczas porównywania poziomu wpływu cechy na błędne przewidywania modelu. Komponent Ważności Cech może pokazać, które wartości w cechach pozytywnie lub negatywnie wpłynęły na wynik modelu. Na przykład, jeśli model dokonał błędnego przewidywania, komponent daje możliwość szczegółowego zbadania i wskazania, które cechy lub wartości cech wpłynęły na przewidywanie. Ten poziom szczegółowości pomaga nie tylko w debugowaniu, ale także zapewnia przejrzystość i odpowiedzialność w sytuacjach audytowych. Wreszcie, komponent może pomóc w identyfikacji
- **Nad- lub niedoreprezentowanie**. Chodzi o sytuację, w której określona grupa nie jest widoczna w danym zawodzie, a każda usługa lub funkcja, która to utrwala, przyczynia się do szkody.
- **Oszkalowanie**. Niesprawiedliwa krytyka i określanie czegoś lub kogoś.
- **Nad- lub niedoreprezentowanie**. Chodzi o to, że pewna grupa nie jest widoczna w danym zawodzie, a każda usługa lub funkcja, która to promuje, przyczynia się do szkody.
### Azure RAI dashboard
### Panel Azure RAI
[Azure RAI dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) opiera się na narzędziach open-source opracowanych przez czołowe instytucje akademickie i organizacje, w tym Microsoft. Są one kluczowe dla naukowców zajmujących się danymi i twórców AI, aby lepiej zrozumieć zachowanie modeli, odkrywać i łagodzić niepożądane problemy związane z modelami AI.
[Panel Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) jest zbudowany na narzędziach open-source opracowanych przez wiodące instytucje akademickie i organizacje, w tym Microsoft, które są niezbędne dla data scientistów i deweloperów AI, aby lepiej zrozumieć zachowanie modelu, wykrywać i łagodzić niepożądane problemy z modelami AI.
- Dowiedz się, jak korzystać z różnych komponentów, zapoznając się z dokumentacją RAI dashboard [docs.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu)
- Naucz się korzystać z różnych komponentów, sprawdzając dokumentację panelu RAI [docs.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu)
- Sprawdź przykładowe notatniki RAI dashboard [sample notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) do debugowania bardziej odpowiedzialnych scenariuszy AI w Azure Machine Learning.
- Sprawdź przykładowe notatniki panelu RAI [sample notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) do debugowania bardziej odpowiedzialnych scenariuszy AI w Azure Machine Learning.
---
## 🚀 Wyzwanie
Aby zapobiec wprowadzaniu statystycznych lub danych uprzedzeń, powinniśmy:
Aby zapobiec wprowadzeniu uprzedzeń statystycznych lub danych, powinniśmy:
- zapewnić różnorodność środowisk i perspektyw wśród osób pracujących nad systemami
- inwestować w zestawy danych odzwierciedlające różnorodność naszego społeczeństwa
- opracowywać lepsze metody wykrywania i korygowania uprzedzeń, gdy się pojawią
- mieć różnorodność pochodzenia i perspektyw wśród osób pracujących nad systemami
- inwestować w zbiory danych odzwierciedlające różnorodność naszego społeczeństwa
- rozwijać lepsze metody wykrywania i korekty uprzedzeń, gdy się pojawią
Pomyśl o rzeczywistych scenariuszach, w których niesprawiedliwość jest widoczna w budowaniu i użytkowaniu modeli. Co jeszcze powinniśmy wziąć pod uwagę?
Pomyśl o scenariuszach z życia codziennego, gdzie niesprawiedliwość jest widoczna w budowaniu i korzystaniu z modeli. Co jeszcze powinniśmy wziąć pod uwagę?
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
## Przegląd i samodzielna nauka
## Przegląd & Samokształcenie
W tej lekcji nauczyłeś się praktycznych narzędzi do włączania odpowiedzialnej AI w uczeniu maszynowym.
W tej lekcji nauczyłeś się niektórych praktycznych narzędzi włączania odpowiedzialnej AI w uczenie maszynowe.
Obejrzyj ten warsztat, aby zgłębić temat:
Obejrzyj ten warsztat, aby zagłębić się w tematy:
- Responsible AI Dashboard: Kompleksowe narzędzie do wdrażania RAI w praktyce, prowadzone przez Besmirę Nushi i Mehrnoosh Sameki
- Panel Responsible AI: kompleksowe miejsce do operacjonalizacji RAI w praktyce, prowadzone przez Besmirę Nushi i Mehrnoosh Sameki
[](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: Kompleksowe narzędzie do wdrażania RAI w praktyce")
[](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: One-stop shop for operationalizing RAI in practice")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć wideo: Responsible AI Dashboard: Kompleksowe narzędzie do wdrażania RAI w praktyce, prowadzone przez Besmirę Nushi i Mehrnoosh Sameki
> 🎥 Kliknij powyższy obraz, aby obejrzeć wideo: Responsible AI Dashboard: One-stop shop for operationalizing RAI in practice prowadzone przez Besmirę Nushi i Mehrnoosh Sameki
Zapoznaj się z poniższymi materiałami, aby dowiedzieć się więcej o odpowiedzialnej AI i jak budować bardziej godne zaufania modele:
Skorzystaj z następujących materiałów, aby dowiedzieć się więcej o odpowiedzialnej AI i jak budować bardziej godne zaufania modele:
- Narzędzia Microsoft RAI dashboard do debugowania modeli ML: [Responsible AI tools resources](https://aka.ms/rai-dashboard)
- Narzędzia panelu RAI Microsoft do debugowania modeli ML: [Responsible AI tools resources](https://aka.ms/rai-dashboard)
- Centrum zasobów Microsoft RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Centrum zasobów Microsoft dotyczące RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Grupa badawcza Microsoft FATE: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Grupa badawcza FATE Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
## Zadanie
[Zapoznaj się z RAI dashboard](assignment.md)
[Zbadaj panel RAI](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zastrzeżenie**:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
## [Ders Öncesi Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders öncesi quiz](https://ff-quizzes.netlify.app/en/ml/)
## Giriş
Bu müfredatta, makine öğreniminin günlük hayatımızı nasıl etkilediğini ve etkilemeye devam ettiğini keşfetmeye başlayacaksınız. Şu anda bile, sistemler ve modeller sağlık teşhisleri, kredi onayları veya dolandırıcılığı tespit etme gibi günlük karar verme görevlerinde yer alıyor. Bu nedenle, bu modellerin güvenilir sonuçlar sunmak için iyi çalışması önemlidir. Her yazılım uygulaması gibi, yapay zeka sistemleri de beklentileri karşılamayabilir veya istenmeyen sonuçlar doğurabilir. Bu yüzden bir yapay zeka modelinin davranışını anlamak ve açıklamak çok önemlidir.
Bu müfredatta, makine öğreniminin hayatımızı nasıl etkilediğini keşfetmeye başlayacaksınız. Hâlihazırda, sistemler ve modeller sağlık teşhisleri, kredi onayları veya dolandırıcılık tespiti gibi günlük karar verme görevlerinde yer almaktadır. Bu nedenle, bu modellerin güvenilir sonuçlar sağlamak için iyi çalışması önemlidir. Herhangi bir yazılım uygulaması gibi, yapay zeka sistemleri beklentileri karşılamayabilir veya istenmeyen sonuçlar doğurabilir. Bu yüzden, bir yapay zeka modelinin davranışını anlamak ve açıklamak çok önemlidir.
Bu modelleri oluşturmak için kullandığınız veriler belirli demografik grupları (ırk, cinsiyet, siyasi görüş, din gibi) içermediğinde veya bu demografik grupları orantısız bir şekilde temsil ettiğinde neler olabileceğini hayal edin. Peki ya modelin çıktısı bazı demografik grupları kayıracak şekilde yorumlandığında ne olur? Uygulama için sonuçları nelerdir? Ayrıca, modelin olumsuz bir sonucu olduğunda ve insanlara zarar verdiğinde ne olur? Yapay zeka sistemlerinin davranışından kim sorumludur? Bu müfredatta bu tür soruları inceleyeceğiz.
Bu modelleri oluşturmak için kullandığınız veriler belli demografik grupları, örneğin ırk, cinsiyet, politik görüş, din gibi özellikleri eksik barındırıyorsa ya da bu demografileri orantısız şekilde temsil ediyorsa ne olur? Modelin çıktısı bazı demografik grupları kayıracak şekilde yorumlanırsa ne olur? Uygulamanın sonucu ne olur? Ayrıca, model olumsuz bir sonuç üretip insanlara zarar verirse ne olur? Yapay zeka sistemlerinin davranışından kim sorumludur? Bu müfredatta bu gibi soruları keşfedeceğiz.
Bu derste şunları öğreneceksiniz:
Bu derste:
- Makine öğreniminde adaletin önemi ve adaletle ilgili zararlar hakkında farkındalık oluşturmak.
- Güvenilirlik ve güvenliği sağlamak için aykırı değerleri ve olağandışı senaryoları keşfetme pratiğini öğrenmek.
- Herkesin kapsayıcı sistemler tasarlayarak güçlendirilmesi gerektiğini anlamak.
- Verilerin ve insanların gizliliğini ve güvenliğini korumanın ne kadar önemli olduğunu keşfetmek.
- Yapay zeka modellerinin davranışını açıklamak için şeffaf bir yaklaşımın önemini görmek.
- Yapay zeka sistemlerinde güven oluşturmak için hesap verebilirliğin ne kadar önemli olduğunu anlamak.
- Makine öğreniminde adaletin ve adaletle ilgili zararların önemine farkındalık kazanacaksınız.
- Güvenilirlik ve güvenliği sağlamak için sıra dışı durumları ve aykırı değerleri keşfetme pratiğine alışacaksınız.
- Verilerin ve insanların gizliliği ile güvenliğinin korunmasının ne denli hayati olduğunu keşfedeceksiniz.
- Yapay zeka modellerinin davranışını açıklayan bir cam kutu yaklaşımının önemini göreceksiniz.
- Yapay zeka sistemlerine olan güvenin temelinde sorumluluğun ne kadar hayati olduğunu fark edeceksiniz.
## Ön Koşul
## Önkoşul
Ön koşul olarak, "Sorumlu Yapay Zeka İlkeleri" öğrenme yolunu tamamlayın ve aşağıdaki videoyu izleyin:
Önkoşul olarak, lütfen "Sorumlu Yapay Zeka İlkeleri" Öğrenme Yolunu tamamlayın ve aşağıdaki videoyu izleyin:
Sorumlu Yapay Zeka hakkında daha fazla bilgi edinmek için bu [Öğrenme Yolunu](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) takip edin.
Bu [Öğrenme Yolunu](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) takip ederek Sorumlu Yapay Zeka hakkında daha fazla bilgi edinin
[](https://youtu.be/dnC8-uUZXSc "Microsoft'un Sorumlu Yapay Zeka Yaklaşımı")
[](https://youtu.be/dnC8-uUZXSc "Microsoft'un Sorumlu Yapay Zekaya Yaklaşımı")
Yapay zeka sistemleri herkese adil davranmalı ve benzer grupları farklı şekillerde etkilemekten kaçınmalıdır. Örneğin, yapay zeka sistemleri tıbbi tedavi, kredi başvurularıveya istihdam konusunda rehberlik sağladığında, benzer semptomlara, finansal koşullara veya mesleki niteliklere sahip herkese aynı önerileri sunmalıdır. Hepimiz, kararlarımızı ve eylemlerimizi etkileyen kalıtsal önyargılar taşırız. Bu önyargılar, yapay zeka sistemlerini eğitmek için kullandığımız verilere yansıyabilir. Bu tür manipülasyonlar bazen istemeden gerçekleşebilir. Verilere önyargı eklediğinizi bilinçli olarak fark etmek genellikle zordur.
Yapay zeka sistemleri herkese adil davranmalı ve benzer grupları farklı şekillerde etkilemekten kaçınmalıdır. Örneğin, yapay zeka sistemleri tıbbi tedavi, kredi başvurularıya da istihdam konularında rehberlik sağlarken, benzer semptomları, finansal durumu veya mesleki nitelikleri olan herkese aynı önerileri yapmalıdır. İnsanlar olarak hepimizin kararlarımızı ve eylemlerimizi etkileyen doğuştan gelen önyargılarımız vardır. Bu önyargılar, yapay zeka sistemlerini eğitirken kullandığımız verilerde görülebilir. Bu tür manipülasyon bazen farkında olmadan gerçekleşebilir. Veriye bilinçli olarak ne zaman önyargı eklediğinizi anlamak çoğu zaman zordur.
**“Adaletsizlik”**, bir grup insan için (örneğin ırk, cinsiyet, yaş veya engellilik durumu açısından tanımlanan) olumsuz etkileri veya “zararları” kapsar. Adaletle ilgili başlıca zararlar şu şekilde sınıflandırılabilir:
**“Adaletsizlik”**, ırk, cinsiyet, yaş veya engellilik durumu gibi tanımlanan bir grup insan için ortaya çıkan olumsuz etkileri veya “zararları” kapsar. Temel adaletle ilgili zararlar şu şekilde sınıflandırılabilir:
- **Tahsis**: Örneğin, bir cinsiyet veya etnik kökenin diğerine tercih edilmesi.
- **Hizmet kalitesi**: Verileri yalnızca belirli bir senaryo için eğitmek, ancak gerçekliğin çok daha karmaşık olması, kötü performans gösteren bir hizmete yol açar. Örneğin, koyu tenli insanları algılayamayan bir el sabunu dağıtıcısı. [Referans](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Aşağılama**: Bir şeyi veya birini haksız yere eleştirmek ve etiketlemek. Örneğin, bir görüntü etiketleme teknolojisi koyu tenli insanlarıgoril olarak yanlış etiketlemiştir.
- **Aşırı veya yetersiz temsil**: Belirli bir grubun belirli bir meslekte görülmemesi fikri ve bu durumu sürekli olarak teşvik eden herhangi bir hizmet veya işlev zarara katkıda bulunur.
- **Stereotipleme**: Belirli bir grubu önceden atanmış özelliklerle ilişkilendirme. Örneğin, İngilizce ve Türkçe arasında çeviri yapan bir dil sistemi, cinsiyetle ilgili stereotipik ilişkilere dayalı hatalar içerebilir.
- **Tahsis**: Örneğin, bir cinsiyet veya etnik grubun diğerine kıyasla tercih edilmesi.
- **Hizmet kalitesi**: Eğer veri yalnızca belirli bir senaryo için eğitilir ama gerçeklik çok daha karmaşıksa, bu kötü çalışan bir hizmete yol açar. Örneğin, koyu tenli insanları algılayamayan bir el sabunluğu. [Referans](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Aşağılama**: Adaletsiz şekilde bir şeyi veya birini eleştirmek ve etiketlemek. Örneğin, bir görüntü etiketleme teknolojisi koyu tenli insanlarımaymun olarak yanlış etiketlemesiyle ünlüdür.
- **Aşırı veya az temsil**: Belirli bir grubun belli bir meslekte görülmemesi ve hizmetlerin veya fonksiyonların bunu sürdürmesi zarar vericidir.
- **Klişeleştirme**: Bir grubu önceden atanmış özelliklerle ilişkilendirmek. Örneğin, İngilizce-Türkçe çeviri sisteminde cinsiyetle ilgili klişeler nedeniyle yanlışlar oluşabilir.

> İngilizceye geri çeviri

> ingilizceye geri çeviri
Yapay zeka sistemlerini tasarlarken ve test ederken, yapay zekanın adil olmasını ve önyargılı veya ayrımcı kararlar vermek üzere programlanmamasını sağlamamız gerekir. Yapay zekada ve makine öğreniminde adaleti garanti altına almak, karmaşık bir sosyo-teknik zorluk olmaya devam ediyor.
Yapay zeka sistemleri tasarlanırken ve test edilirken, yapay zekanın adil olması ve insanlara yasaklanan önyargılı veya ayrımcı kararlar vermeye programlanmadığından emin olunmalıdır. Yapay zekada ve makine öğreniminde adaletin garantilenmesi karmaşık bir sosyoteknik zorluktur.
### Güvenilirlik ve Güvenlik
### Güvenilirlik ve güvenlik
Güven oluşturmak için yapay zeka sistemlerinin normal ve beklenmedik koşullar altında güvenilir, güvenli ve tutarlı olması gerekir. Yapay zeka sistemlerinin çeşitli durumlarda nasıl davranacağını bilmek önemlidir, özellikle de aykırı değerler söz konusu olduğunda. Yapay zeka çözümleri oluştururken, yapay zeka çözümlerinin karşılaşabileceği çeşitli koşulları ele alma konusunda önemli bir odaklanma gereklidir. Örneğin, bir otonom araç insanların güvenliğini en öncelikli olarak ele almalıdır. Sonuç olarak, aracı çalıştıran yapay zeka, gece, fırtına, kar fırtınası, yola koşan çocuklar, evcil hayvanlar, yol çalışmaları gibi aracın karşılaşabileceği tüm olası senaryoları dikkate almalıdır. Bir yapay zeka sisteminin geniş bir koşul yelpazesini ne kadar güvenilir ve güvenli bir şekilde ele alabildiği, veri bilimci veya yapay zeka geliştiricisinin tasarım veya test sırasında ne kadar öngörüde bulunduğunu yansıtır.
Güveni inşa etmek için yapay zeka sistemlerinin normal ve beklenmedik koşullar altında güvenilir, güvenli ve tutarlı olması gerekir. Yapay zeka sistemlerinin çeşitli durumlarda, özellikle sıra dışı durumlarda nasıl davranacağını bilmek önemlidir. Yapay zeka çözümleri oluştururken, bu çözümlerin karşılaşacağı geniş bir koşullar yelpazesine nasıl uyum sağlayacağına önemli ölçüde dikkat edilmelidir. Örneğin, otonom bir aracın insanların güvenliğini en öncelikle tutması gerekir. Bu nedenle, aracı besleyen yapay zekanın gece, fırtına, tipi, sokaktan koşan çocuklar, evcil hayvanlar, yol çalışmaları gibi tüm olası senaryoları dikkate alması gerekir. Bir yapay zeka sisteminin çok geniş koşulları ne kadar güvenilir ve güvenli şekilde yönetebildiği, veri bilimcisinin veya yapay zeka geliştiricisinin sistemi tasarlarken veya test ederken ne kadar öngördüğünü yansıtır.
> [🎥 Video için buraya tıklayın: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 Bir video için buraya tıklayın: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Kapsayıcılık
Yapay zeka sistemleri herkesin katılımını sağlamalı ve güçlendirmelidir. Yapay zeka sistemlerini tasarlarken ve uygularken, veri bilimciler ve yapay zeka geliştiriciler, sistemi istemeden insanları dışlayabilecek potansiyel engelleri belirler ve ele alır. Örneğin, dünya genelinde 1 milyar engelli insan bulunmaktadır. Yapay zekanın ilerlemesiyle, günlük yaşamlarında bilgiye ve fırsatlara daha kolay erişebilirler. Engelleri ele alarak, herkes için daha iyi deneyimler sunan yapay zeka ürünlerini yenilikçi bir şekilde geliştirme fırsatları yaratılır.
Yapay zeka sistemleri herkesi kapsayacak ve güçlendirecek şekilde tasarlanmalıdır. Tasarım ve uygulama süreçlerinde veri bilimciler ve yapay zeka geliştiriciler, sistemi istemeden dışlayıcı kılabilecek potansiyel engelleri tanır ve çözerler. Örneğin dünyada 1 milyar engelli insan var. Yapay zeka ilerledikçe, bu kişiler günlük yaşamlarında bilgiye ve fırsatlara daha kolay erişebilirler. Engelleri çözerek, daha iyi deneyimlere sahip yapay zeka ürünleri geliştirme ve yenilik yapma fırsatları yaratılır ve bu herkesin yararına olur.
> [🎥 Video için buraya tıklayın: yapay zekada kapsayıcılık](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 Yapay zekada kapsayıcılık videosu için buraya tıklayın](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Güvenlik ve Gizlilik
### Güvenlik ve gizlilik
Yapay zeka sistemleri güvenli olmalı ve insanların gizliliğine saygı göstermelidir. Gizliliği, bilgileri veya hayatları riske atan sistemlere insanlar daha az güvenir. Makine öğrenimi modellerini eğitirken, en iyi sonuçları elde etmek için verilere güveniriz. Bunu yaparken, verilerin kaynağı ve bütünlüğü dikkate alınmalıdır. Örneğin, veriler kullanıcı tarafından mı gönderildi yoksa kamuya açık mıydı? Ardından, verilerle çalışırken, gizli bilgileri koruyabilen ve saldırılara karşı dirençli yapay zeka sistemleri geliştirmek önemlidir. Yapay zeka daha yaygın hale geldikçe, gizliliği korumak ve önemli kişisel ve iş bilgilerini güvence altına almak giderek daha kritik ve karmaşık hale geliyor. Gizlilik ve veri güvenliği sorunları, yapay zeka için özellikle dikkat gerektirir çünkü verilere erişim, yapay zeka sistemlerinin insanlar hakkında doğru ve bilgilendirilmiş tahminler ve kararlar vermesi için gereklidir.
Yapay zeka sistemleri güvenli olmalı ve insanların gizliliğine saygı göstermelidir. Gizliliklerini, bilgilerini veya hayatlarını riske atan sistemlere insanların güveni daha azdır. Makine öğrenimi modellerini eğitirken en iyi sonuçları almaya çalışırız. Bu süreçte verinin kaynağı ve bütünlüğü göz önünde bulundurulmalıdır. Örneğin, veri kullanıcılardan mı yoksa kamuya açık mı? Devamında, veriler üzerinde çalışırken gizli bilgileri koruyabilen ve saldırılara dayanabilen yapay zeka sistemleri geliştirmek kritik önem taşır. Yapay zeka yaygınlaştıkça gizliliğin korunması ve önemli kişisel ve ticari bilgilerin güvenliği daha kritik ve karmaşık hale gelir. Yapay zeka için gizlilik ve veri güvenliği sorunlarına özellikle dikkat edilmelidir çünkü yapay zeka sistemlerinin doğru ve bilinçli tahminler ve kararlar verebilmesi için verilere erişim gereklidir.
> [🎥 Video için buraya tıklayın: yapay zekada güvenlik](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Yapay zekada güvenlik videosu için buraya tıklayın](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Endüstri olarak, GDPR (Genel Veri Koruma Yönetmeliği) gibi düzenlemelerle önemli gizlilik ve güvenlik ilerlemeleri kaydettik.
- Ancak yapay zeka sistemlerinde, sistemleri daha kişisel ve etkili yapmak için daha fazla kişisel veriye ihtiyaç ile gizlilik arasında bir gerilim olduğunu kabul etmeliyiz.
- İnternetle bağlı bilgisayarların doğuşu gibi, yapay zekayla ilişkili güvenlik sorunlarında da büyük bir artış görüyoruz.
- Aynı zamanda yapay zekanın güvenliği iyileştirmek için kullanıldığını görüyoruz. Örneğin, çoğu modern antivirüs tarayıcısı artık yapay zeka sezgileriyle çalışıyor.
- Veri Bilimi süreçlerimizin en son gizlilik ve güvenlik uygulamalarıyla uyumlu olması gerekiyor.
- Endüstri olarak, GDPR (Genel Veri Koruma Yönetmeliği) gibi düzenlemelerle önemli ilerlemeler kaydettik.
- Ancak yapay zeka sistemleriyle, sistemleri daha kişisel ve etkili hale getirmek için daha fazla kişisel veri ihtiyacı ile gizlilik arasındaki gerilimi kabul etmeliyiz.
- İnternetle bağlantılı bilgisayarların doğuşunda olduğu gibi, yapay zeka ile ilgili güvenlik sorunlarında da büyük bir artış görüyoruz.
- Aynı zamanda, yapay zekanın güvenliği artırmak için kullanıldığını da görüyoruz. Örneğin, modern antivirüs tarayıcılarının çoğu bugün yapay zeka sezgileriyle çalışıyor.
- Veri Bilimi süreçlerimizin en son gizlilik ve güvenlik uygulamalarıyla uyum içinde olmasını sağlamalıyız.
### Şeffaflık
Yapay zeka sistemleri anlaşılabilir olmalıdır. Şeffaflığın kritik bir parçası, yapay zeka sistemlerinin ve bileşenlerinin davranışını açıklamaktır. Yapay zeka sistemlerinin anlaşılmasını geliştirmek, paydaşların sistemlerin nasıl ve neden işlediğini anlamasını gerektirir; bu sayede performans sorunlarını, güvenlik ve gizlilik endişelerini, önyargıları, dışlayıcı uygulamaları veya istenmeyen sonuçları tespit edebilirler. Ayrıca yapay zeka sistemlerini kullananların, bunları ne zaman, neden ve nasıl devreye aldıklarını ve hangi sınırlamalara sahip olduklarını dürüstçe açıklamaları gerektiğine inanıyoruz. Örneğin, bir banka yapay zeka sistemi kullanarak kredi kararlarını destekliyorsa, sonuçları inceleyip hangi verilerin sistemin önerilerini etkilediğini anlamak önemlidir. Hükümetler yapay zekayı düzenlemeye başladığı için, veri bilimciler ve kurumlar, bir yapay zeka sisteminin düzenleyici gereklilikleri karşılayıp karşılamadığını, özellikle istenmeyen sonuçlarda açıklamak zorundadır.
> [🎥 Yapay zekada şeffaflık videosu için buraya tıklayın](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Yapay zeka sistemleri çok karmaşık olduğundan, nasıl çalıştıklarını anlamak ve sonuçları yorumlamak zordur.
- Bu anlayış eksikliği, bu sistemlerin yönetilişi, uygulanışı ve belgelenişini etkiler.
- Daha da önemlisi, bu anlayış eksikliği, bu sistemlerin ürettiği sonuçlarla yapılan kararları etkiler.
Yapay zeka sistemleri anlaşılabilir olmalıdır. Şeffaflığın önemli bir kısmı, yapay zeka sistemlerinin ve bileşenlerinin davranışını açıklamaktır. Yapay zeka sistemlerinin anlaşılmasını geliştirmek, paydaşların nasıl ve neden çalıştıklarını anlamalarını gerektirir, böylece potansiyel performans sorunlarını, güvenlik ve gizlilik endişelerini, önyargıları, dışlayıcı uygulamaları veya istenmeyen sonuçları belirleyebilirler. Ayrıca, yapay zeka sistemlerini kullananların, bunları ne zaman, neden ve nasıl kullanmayı seçtikleri konusunda dürüst ve açık olmaları gerektiğine inanıyoruz. Kullandıkları sistemlerin sınırlamaları hakkında da bilgi vermelidirler. Örneğin, bir banka tüketici kredi kararlarını desteklemek için bir yapay zeka sistemi kullanıyorsa, sonuçları incelemek ve sistemin önerilerini hangi verilerin etkilediğini anlamak önemlidir. Hükümetler, endüstrilerde yapay zekayı düzenlemeye başladığından, veri bilimciler ve kuruluşlar, bir yapay zeka sisteminin düzenleyici gereklilikleri karşılayıp karşılamadığını, özellikle istenmeyen bir sonuç olduğunda açıklamalıdır.
### Sorumluluk
> [🎥 Video için buraya tıklayın: yapay zekada şeffaflık](https://www.microsoft.com/videoplayer/embed/RE4voJF)
Yapay zeka sistemlerini tasarlayan ve kullanan insanlar, sistemlerinin nasıl çalıştığından sorumlu olmalıdır. Yüz tanıma gibi hassas teknolojilerde sorumluluk özellikle önemlidir. Son zamanlarda, çalıntı çocukları bulmak gibi kullanımlarda potansiyel görülen bu teknolojiye, özellikle güvenlik güçlerinden yoğun talep artışı olmuştur. Ancak bu teknolojiler, örneğin belirli bireylerin sürekli gözetilmesini mümkün kılarak, bir hükümetin vatandaşlarının temel özgürlüklerini riske atacak şekilde kullanılabilir. Bu nedenle, veri bilimciler ve kurumlar, yapay zeka sistemlerinin bireyler veya toplum üzerindeki etkileri için sorumlu olmalıdır.
- Yapay zeka sistemleri çok karmaşık olduğu için nasıl çalıştıklarını anlamak ve sonuçları yorumlamak zordur.
- Bu anlayış eksikliği, bu sistemlerin nasıl yönetildiğini, işletildiğini ve belgelenmesini etkiler.
- Daha da önemlisi, bu anlayış eksikliği, bu sistemlerin ürettiği sonuçlara dayanarak alınan kararları etkiler.
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft'un Sorumlu Yapay Zekaya Yaklaşımı")
### Hesap Verebilirlik
> 🎥 Yukarıdaki resme tıklayarak videoyu izleyin: Yüz Tanıma ile Kitlesel Gözetim Uyarısı
Yapay zeka sistemlerini tasarlayan ve uygulayan kişiler, sistemlerinin nasıl çalıştığı konusunda hesap verebilir olmalıdır. Hesap verebilirlik ihtiyacı, özellikle yüz tanıma gibi hassas teknolojilerde çok önemlidir. Son zamanlarda, özellikle kayıp çocukları bulmak gibi kullanımlarda teknolojinin potansiyelini gören kolluk kuvvetleri tarafından yüz tanıma teknolojisine olan talep artmıştır. Ancak, bu teknolojiler bir hükümet tarafından vatandaşlarının temel özgürlüklerini riske atmak için kullanılabilir, örneğin belirli bireylerin sürekli gözetimini sağlamak için. Bu nedenle, veri bilimciler ve kuruluşlar, yapay zeka sistemlerinin bireyler veya toplum üzerindeki etkisinden sorumlu olmalıdır.
Sonuç olarak, AI'yı topluma getiren ilk nesil olarak bizim neslimize yönelen en büyük sorulardan biri, bilgisayarların insanlara karşı sorumlu kalmasını ve bilgisayarları tasarlayanların herkes karşısında sorumlu olmasını nasıl sağlayacağımızdır.
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft'un Sorumlu Yapay Zeka Yaklaşımı")
## Etki değerlendirmesi
> 🎥 Yukarıdaki görüntüye tıklayarak videoyu izleyin: Yüz Tanıma Yoluyla Toplu Gözetim Uyarısı
Bir makine öğrenimi modeli eğitmeden önce, yapay zeka sisteminin amacını; kullanım şeklinin ne olduğunu; nerede uygulanacağını; ve sistemle kimlerin etkileşimde bulunacağını anlamak için etki değerlendirmesi yapmak önemlidir. Bu, sistemi inceleyen veya test eden kişilerin potansiyel riskleri ve beklenen sonuçları belirlerken hangi faktörleri göz önünde bulundurması gerektiğini bilmelerine yardımcı olur.
Sonuç olarak, yapay zekayı topluma getiren ilk nesil olarak, bilgisayarların insanlara karşı hesap verebilir olmasını nasıl sağlayacağımız ve bilgisayarları tasarlayan insanların diğer herkese karşı hesap verebilir olmasını nasıl sağlayacağımız, neslimizin en büyük sorularından biridir.
Etki değerlendirmesi yapılırken odaklanılan alanlar şunlardır:
## Etki Değerlendirmesi
* **Bireyler üzerindeki olumsuz etkiler**. Sistemin performansını engelleyen kısıtlamalar, desteklenmeyen kullanımlar veya bilinen sınırlamalar konusunda farkındalık, bireylere zarar verilmemesi için kritik öneme sahiptir.
* **Veri gereksinimleri**. Sistemin veriyi nasıl ve nerede kullanacağını anlamak, inceleyenlerin uyulması gereken veri gereksinimlerini (örneğin GDPR veya HIPAA gibi) araştırmasına olanak verir. Ayrıca, veri kaynağı ve miktarının eğitime yeterli olup olmadığını kontrol etmek gerekir.
* **Etki özeti**. Sistem kullanımından ortaya çıkabilecek olası zararların listesini toplamak. Makine öğrenimi yaşam döngüsü boyunca, belirlenen sorunların önlenip önlenmediğini incelemek.
* **Altı temel ilkenin her biri için uygulanabilir hedefler**. Her ilkenin hedeflerinin karşılanıp karşılanmadığını değerlendirmek ve varsa eksiklikleri belirlemek.
Bir makine öğrenimi modelini eğitmeden önce, yapay zeka sisteminin amacını, planlanan kullanımını, nerede uygulanacağını ve sistemle kimlerin etkileşimde bulunacağını anlamak için bir etki değerlendirmesi yapmak önemlidir. Bunlar, sistemi değerlendiren inceleyiciler veya test edenler için potansiyel riskleri ve beklenen sonuçları belirlerken dikkate alınması gereken faktörleri anlamalarına yardımcı olur.
Etki değerlendirmesi yaparken odaklanılması gereken alanlar şunlardır:
## Sorumlu yapay zeka ile hata ayıklama
* **Bireyler üzerindeki olumsuz etkiler**. Sistemin performansını engelleyen herhangi bir kısıtlama veya gereklilik, desteklenmeyen kullanım veya bilinen sınırlamaların farkında olmak, sistemin bireylere zarar verebilecek şekilde kullanılmamasını sağlamak için önemlidir.
* **Veri gereksinimleri**. Sistemin verileri nasıl ve nerede kullanacağını anlamak, inceleyicilerin dikkate alması gereken veri gereksinimlerini (örneğin, GDPR veya HIPPA veri düzenlemeleri) keşfetmelerini sağlar. Ayrıca, verilerin kaynağı veya miktarının eğitim için yeterli olup olmadığını inceleyin.
* **Etki özeti**. Sistemin kullanımından kaynaklanabilecek potansiyel zararların bir listesini toplayın. Makine öğrenimi yaşam döngüsü boyunca, belirlenen sorunların azaltılıp azaltılmadığını veya ele alınıp alınmadığını gözden geçirin.
* **Altı temel ilke için uygulanabilir hedefler**. Her bir ilkenin hedeflerinin karşılanıp karşılanmadığını ve herhangi bir boşluk olup olmadığını değerlendirin.
Bir yazılım uygulamasına hata ayıklama yapılması gibi, bir yapay zeka sistemine hata ayıklama yapmak da sistemi etkileyen hataları belirleme ve çözme sürecidir. Bir modelin beklenen veya sorumlu şekilde çalışmamasını etkileyen birçok faktör vardır. Geleneksel performans metrikleri genellikle modelin performansının niceliksel toplamlarıdır ve modelin sorumlu yapay zeka ilkelerini nasıl ihlal ettiğini analiz etmek için yeterli değildir. Ayrıca, makine öğrenimi modeli çıktısını neyin etkilediğini anlamayı zorlaştıran kara kutu gibidir ve hata yaptığında açıklama yapmak zordur. Bu derste, yapay zeka sistemlerini hata ayıklamada yardımcı olan Sorumlu Yapay Zeka kontrol panelini nasıl kullanacağımızı öğreneceğiz. Kontrol paneli, veri bilimciler ve yapay zeka geliştiricileri için şu kapsamlı araçları sunar:
## Sorumlu Yapay Zeka ile Hata Ayıklama
* **Hata analizi**. Sistemin adaletini veya güvenilirliğini etkileyebilecek hata dağılımının tespiti.
* **Model genel görünümü**. Modelin performansındaki farklılıkların veri kümeleri arasında nerede olduğunu keşfetmek.
* **Veri analizi**. Veri dağılımını anlayarak, adalet, kapsayıcılık ve güvenilirlik sorunlarına yol açabilecek önyargıları tespit etmek.
* **Model yorumlanabilirliği**. Modelin tahminlerini etkileyen faktörleri anlamak. Bu, şeffaflık ve sorumluluk için modelin davranışını açıklamada yardımcı olur.
Bir yazılım uygulamasını hata ayıklamak gibi, bir yapay zeka sistemini hata ayıklamak, sistemdeki sorunları belirleme ve çözme sürecidir. Bir modelin beklenildiği gibi veya sorumlu bir şekilde performans göstermemesine neden olan birçok faktör vardır. Çoğu geleneksel model performans metriği, bir modelin performansının nicel toplamlarıdır ve bir modelin sorumlu yapay zeka ilkelerini nasıl ihlal ettiğini analiz etmek için yeterli değildir. Ayrıca, bir makine öğrenimi modeli, sonuçlarını neyin yönlendirdiğini anlamayı veya hata yaptığında açıklama sağlamayı zorlaştıran bir kara kutudur. Bu kursta daha sonra, yapay zeka sistemlerini hata ayıklamak için Sorumlu Yapay Zeka panosunu nasıl kullanacağımızı öğreneceğiz. Pano, veri bilimciler ve yapay zeka geliştiriciler için şu işlemleri gerçekleştirmek üzere kapsamlı bir araç sağlar:
* **Hata analizi**. Modelin adalet veya güvenilirliği etkileyebilecek hata dağılımını belirlemek.
* **Model genel görünümü**. Modelin performansında veri grupları arasında nerede farklılıklar olduğunu keşfetmek.
* **Veri analizi**. Veri dağılımını anlamak ve adalet, kapsayıcılık ve güvenilirlik sorunlarına yol açabilecek olası önyargıları belirlemek.
* **Model yorumlanabilirliği**. Modelin tahminlerini neyin etkilediğini veya yönlendirdiğini anlamak. Bu, modelin davranışını açıklamak için önemlidir ve şeffaflık ve hesap verebilirlik açısından kritiktir.
## 🚀 Meydan okuma
## 🚀 Zorluk
Zararların baştan engellenmesi için:
Zararların baştan önlenmesi için şunları yapmalıyız:
- Sistemler üzerinde çalışan kişiler arasında çeşitli geçmişler ve bakış açıları olsun
- Toplumumuzun çeşitliliğini yansıtan veri setlerine yatırım yapılsın
- Makine öğrenimi yaşam döngüsü boyunca sorumlu yapay zekayı tespit edip düzeltmek için daha iyi yöntemler geliştirilsin
- sistemler üzerinde çalışan insanlar arasında farklı geçmişlere ve bakış açılarına sahip olmak
- toplumumuzun çeşitliliğini yansıtan veri setlerine yatırım yapmak
- makine öğrenimi yaşam döngüsü boyunca sorumlu yapay zekayı tespit etmek ve düzeltmek için daha iyi yöntemler geliştirmek
Model oluşturma ve kullanımı aşamalarında güvenilmezlik belirgin olduğu gerçek yaşam senaryolarını düşünün. Başka neleri dikkate almalıyız?
Model oluşturma ve kullanımı sırasında bir modelin güvenilmezliğinin açıkça görüldüğü gerçek yaşam senaryolarını düşünün. Başka neleri dikkate almalıyız?
## [Ders sonrası quiz](https://ff-quizzes.netlify.app/en/ml/)
## [Ders Sonrası Test](https://ff-quizzes.netlify.app/en/ml/)
## Gözden geçirme ve kendi kendine çalışma
## Gözden Geçirme ve Kendi Kendine Çalışma
Bu derste, makine öğreniminde adalet ve adaletsizlik kavramlarının temellerini öğrendiniz.
Bu atölyeyi izleyerek konulara daha derinlemesine dalın:
Bu derste, makine öğreniminde adalet ve adaletsizlik kavramlarının bazı temel bilgilerini öğrendiniz.
- Sorumlu yapay zeka arayışı: İlkeleri uygulamaya dökmek - Besmira Nushi, Mehrnoosh Sameki ve Amit Sharma tarafından
Konulara daha derinlemesine dalmak için bu atölyeyi izleyin:
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Sorumlu yapay zeka oluşturmak için açık kaynaklı bir çerçeve")
- Sorumlu Yapay Zekanın Peşinde: İlkeleri Pratiğe Dökmek, Besmira Nushi, Mehrnoosh Sameki ve Amit Sharma tarafından
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Sorumlu yapay zeka oluşturmak için açık kaynaklı bir çerçeve")
> 🎥 Yukarıdaki görsele tıklayarak videoyu izleyin: RAI Toolbox: Sorumlu yapay zeka oluşturmak için açık kaynaklı bir çerçeve - Besmira Nushi, Mehrnoosh Sameki ve Amit Sharma tarafından
> 🎥 Video için yukarıdaki resme tıklayın: RAI Toolbox: Besmira Nushi, Mehrnoosh Sameki ve Amit Sharma tarafından hazırlanan sorumlu yapay zeka oluşturmak için açık kaynaklı bir çerçeve
Ayrıca okuyun:
Ayrıca, okuyun:
- Microsoft’un Sorumlu AI kaynak merkezi: [Responsible AI Resources– Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft’un RAI kaynak merkezi: [Sorumlu Yapay Zeka Kaynakları– Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft’un FATE araştırma grubu: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Microsoft’un FATE araştırma grubu: [FATE: Yapay Zekada Adalet, Hesap Verebilirlik, Şeffaflık ve Etik - Microsoft Araştırma](https://www.microsoft.com/research/theme/fate/)
RAI Araç Kutusu:
- [Responsible AI Toolbox GitHub deposu](https://github.com/microsoft/responsible-ai-toolbox)
- [Sorumlu Yapay Zeka Araç Kutusu GitHub deposu](https://github.com/microsoft/responsible-ai-toolbox)
Azure Machine Learning'in adalet sağlama araçları hakkında okuyun:
Azure Machine Learning'in adaleti sağlamak için araçları hakkında bilgi edinin:
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluğu sağlamak için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
## [Ders Öncesi Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders öncesi quiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Bu ders R dilinde de mevcut!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
> ### [Bu ders R dilinde de mevcuttur!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Giriş
Bu dört derste, regresyon modelleri oluşturmayıöğreneceksiniz. Bunların ne işe yaradığını birazdan tartışacağız. Ancak başlamadan önce, sürece başlamak için doğru araçlara sahip olduğunuzdan emin olun!
Bu dört derste, regresyon modelleri oluşturmayıkeşfedeceksiniz. Bunun ne işe yaradığını kısa bir süre içinde tartışacağız. Fakat herhangi bir şeye başlamadan önce, süreci başlatmak için doğru araçlara sahip olduğunuzdan emin olun!
Bu derste şunları öğreneceksiniz:
Bu derste, nasıl yapılacağını öğreneceksiniz:
- Bilgisayarınızı yerel makine öğrenimi görevleri için yapılandırmayı.
- Jupyter defterleriyle çalışmayı.
- Scikit-learn'ü kullanmayı ve kurulumunu.
- Uygulamalı bir egzersizle doğrusal regresyonu keşfetmeyi.
- Yerel makine öğrenimi görevleri için bilgisayarınızı yapılandırmak.
- Jupyter Notebooks ile çalışmak.
- Kurulum dahil olmak üzere Scikit-learn kullanmak.
- Uygulamalı bir egzersizle doğrusal regresyonu keşfetmek.
## Kurulumlar ve Yapılandırmalar
## Kurulumlar ve yapılandırmalar
[](https://youtu.be/-DfeD2k2Kj0 "Başlangıç için Araçlarınızı Hazırlayın - Makine Öğrenimi Modelleri Oluşturma")
[](https://youtu.be/-DfeD2k2Kj0 "Yeni başlayanlar için ML - Makine Öğrenimi modelleri oluşturmak için araçlarınızı hazırlayın")
> 🎥 Yukarıdaki görsele tıklayarak bilgisayarınızı ML için yapılandırma sürecini anlatan kısa bir videoyu izleyebilirsiniz.
> 🎥 Bilgisayarınızı ML için yapılandırmayı anlatan kısa video için yukarıdaki görsele tıklayın.
1. **Python'u Kurun**. Bilgisayarınızda [Python](https://www.python.org/downloads/) yüklü olduğundan emin olun. Python, birçok veri bilimi ve makine öğrenimi görevi için kullanılacaktır. Çoğu bilgisayar sisteminde zaten bir Python kurulumu bulunur. Bazı kullanıcılar için kurulumu kolaylaştıran [Python Kodlama Paketleri](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) de mevcuttur.
1. **Python kurun**. Bilgisayarınızda [Python](https://www.python.org/downloads/) yüklü olduğundan emin olun. Python'u birçok veri bilimi ve makine öğrenimi görevi için kullanacaksınız. Çoğu bilgisayar sistemi zaten Python kurulumu içerir. Bazı kullanıcıların kurulumu kolaylaştırması için kullanışlı [Python Kodlama Paketleri](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) de mevcuttur.
Ancak, Python'un bazı kullanımları bir yazılım sürümünü gerektirirken, diğerleri farklı bir sürüm gerektirir. Bu nedenle, bir [sanallaştırılmış ortam](https://docs.python.org/3/library/venv.html) içinde çalışmak faydalı olabilir.
Python'un bazı kullanımları yazılımın bir sürümünü gerektirirken, diğerleri başka bir sürümünü gerektirir. Bu nedenle, bir [sanal ortam](https://docs.python.org/3/library/venv.html) içinde çalışmak faydalıdır.
2. **Visual Studio Code'u Kurun**. Bilgisayarınızda Visual Studio Code'un yüklü olduğundan emin olun. [Visual Studio Code'u kurma](https://code.visualstudio.com/) talimatlarını izleyerek temel kurulumu gerçekleştirin. Bu kursta Python'u Visual Studio Code'da kullanacağınız için, Python geliştirme için [Visual Studio Code'u yapılandırma](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) konusunda bilgi edinmek isteyebilirsiniz.
2. **Visual Studio Code yükleyin**. Bilgisayarınızda Visual Studio Code yüklü olduğundan emin olun. Temel kurulum için bu talimatları izleyerek [Visual Studio Code'u yükleyin](https://code.visualstudio.com/). Bu derste Python'u Visual Studio Code içinde kullanacağınız için, Python geliştirmesi için VS Code'u nasıl [yapılandıracağınızı gözden geçirmek](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) isteyebilirsiniz.
> Python ile rahat çalışmak için bu [öğrenme modülleri](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) koleksiyonunu inceleyin.
> Python'u öğrenmek için bu [Learn modülleri koleksiyonunu](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) inceleyin
>
> [](https://youtu.be/yyQM70vi7V8 "Visual Studio Code ile Python Kurulumu")
> [](https://youtu.be/yyQM70vi7V8 "Visual Studio Code ile Python kurulumu")
>
> 🎥 Yukarıdaki görsele tıklayarak Visual Studio Code'da Python kullanımıyla ilgili bir video izleyebilirsiniz.
> 🎥 Yukarıdaki görsele tıklayarak VS Code içinde Python kullanımını gösteren videoyu izleyin.
3. **Scikit-learn'ü Kurun**, [bu talimatları](https://scikit-learn.org/stable/install.html) izleyerek. Python 3 kullanmanız gerektiğinden, bir sanallaştırılmış ortam kullanmanız önerilir. Eğer bu kütüphaneyi bir M1 Mac'te kuruyorsanız, yukarıdaki bağlantıda özel talimatlar bulunmaktadır.
3. **Scikit-learn yükleyin**, [bu talimatları](https://scikit-learn.org/stable/install.html) takip ederek. Python 3 kullandığınızdan emin olmanız gerektiği için, bir sanal ortam kullanmanız önerilir. M1 Mac üzerinde bu kütüphaneyi yükliyorsanız, yukarıdaki bağlantıdaki sayfada özel talimatlar bulunmaktadır.
Python kodunuzu geliştirmek ve makine öğrenimi modelleri oluşturmak için **defterler** kullanacaksınız. Bu tür dosyalar veri bilimciler için yaygın bir araçtır ve `.ipynb` uzantısıyla tanınabilirler.
Python kodunuzu geliştirmek ve makine öğrenimi modelleri oluşturmak için **notebook'ları** kullanacaksınız. Bu dosya türü veri bilimciler için yaygın bir araçtır ve `.ipynb` uzantısı ile tanımlanır.
Defterler, geliştiricinin hem kod yazmasına hem de kodun etrafında notlar ve belgeler oluşturmasına olanak tanıyan etkileşimli bir ortamdır. Bu, deneysel veya araştırma odaklı projeler için oldukça faydalıdır.
Notebooks, geliştiricinin kod yazması kadar kod etrafına notlar, belgeler de ekleyebileceği interaktif bir ortamdır. Bu, deneysel veya araştırma odaklı projeler için oldukça faydalıdır.
[](https://youtu.be/7E-jC8FLA2E "Başlangıç için Jupyter Defterlerini Ayarlayın - Regresyon Modelleri Oluşturma")
[](https://youtu.be/7E-jC8FLA2E "Yeni başlayanlar için ML - Regresyon modelleri oluşturmayı başlatmak için Jupyter Notebooks kurun")
> 🎥 Yukarıdaki görsele tıklayarak bu egzersizi anlatan kısa bir video izleyebilirsiniz.
> 🎥 Bu egzersizi adım adım anlatan kısa video için yukarıdaki görsele tıklayın.
### Egzersiz - Bir Defterle Çalışma
### Egzersiz - bir notebook ile çalışın
Bu klasörde _notebook.ipynb_ dosyasını bulacaksınız.
1. _notebook.ipynb_ dosyasını Visual Studio Code'da açın.
1. _notebook.ipynb_'yi Visual Studio Code'da açın.
Bir Jupyter sunucusu Python 3+ ile başlatılacaktır. Defterde `çalıştırılabilir` kod parçaları bulacaksınız. Bir kod bloğunu çalıştırmak için, oynat düğmesine benzeyen simgeyi seçebilirsiniz.
Python 3+ çalışan bir Jupyter sunucusu başlatılacak. Notebook içinde `çalıştırılabilir` alanlar yani kod parçacıkları vardır. Bir kod bloğunu, oynat simgesine benzeyen ikona tıklayarak çalıştırabilirsiniz.
2. `md` simgesini seçin ve biraz markdown ekleyin, ardından şu metni yazın: **# Defterinize Hoş Geldiniz**.
1. `md` ikonunu seçin ve biraz markdown ekleyin, aşağıdaki metni yazın **# Notebook'unuza Hoş Geldiniz**.
Şimdi biraz Python kodu ekleyin.
Sonra biraz Python kodu ekleyin.
3. Kod bloğuna **print('hello notebook')** yazın.
4. Kodu çalıştırmak için oku seçin.
1. Kod bloğuna **print('hello notebook')** yazın.
1. Kodu çalıştırmak için ok işaretini seçin.
Yazdırılan ifadeyi görmelisiniz:
Yazdırılan ifade görünmeli:
```output
hello notebook
```


Kodunuzu yorumlarla birleştirerek defteri kendi kendine belgeleyebilirsiniz.
Kodunuzu kendinizi belgelemek için yorumlarla harmanlayabilirsiniz.
✅ Bir web geliştiricisinin çalışma ortamı ile bir veri bilimcinin çalışma ortamı arasındaki farkları bir dakika düşünün.
✅ Bir web geliştiricinin çalışma ortamının veri bilimcisinden ne kadar farklı olduğunu bir dakika düşünün.
## Scikit-learn ile Çalışmaya Başlama
## Scikit-learn ile çalışmaya başlamak
Artık Python yerel ortamınızda kurulu olduğuna ve Jupyter defterleriyle rahat olduğunuza göre, Scikit-learn ile de aynı rahatlığa ulaşalım (bunu `sci` olarak, `science` kelimesindeki gibi telaffuz edin). Scikit-learn, ML görevlerini gerçekleştirmenize yardımcı olacak [kapsamlı bir API](https://scikit-learn.org/stable/modules/classes.html#api-ref) sağlar.
Python yerel ortamınızda kuruldu ve Jupyter Notebooks ile rahat olduğunuz için, şimdi Scikit-learn (telaffuzu `sci`‘science’ gibi) ile de aynı rahatlığa ulaşalım. Scikit-learn size ML görevlerini gerçekleştirmek için [kapsamlı bir API](https://scikit-learn.org/stable/modules/classes.html#api-ref) sağlar.
Web sitelerine göre ([kaynak](https://scikit-learn.org/stable/getting_started.html)), "Scikit-learn, denetimli ve denetimsiz öğrenmeyi destekleyen açık kaynaklı bir makine öğrenimi kütüphanesidir. Ayrıca model uyumu, veri ön işleme, model seçimi ve değerlendirme gibi çeşitli araçlar sunar."
[web sitelerine](https://scikit-learn.org/stable/getting_started.html) göre, "Scikit-learn, denetimli ve denetimsiz öğrenmeyi destekleyen açık kaynaklı bir makine öğrenimi kütüphanesidir. Ayrıca model uyumu, veri ön işleme, model seçimi ve değerlendirme ve pek çok başka araç sağlar."
Bu kursta, Scikit-learn ve diğer araçları kullanarak 'geleneksel makine öğrenimi' görevlerini gerçekleştirecek modeller oluşturacaksınız. Sinir ağları ve derin öğrenmeyi özellikle dahil etmedik, çünkü bunlar yakında çıkacak olan 'Başlangıç için Yapay Zeka' müfredatımızda daha iyi ele alınacaktır.
Bu derste 'geleneksel makine öğrenimi' görevleri olarak adlandırdığımız modelleri oluşturmak için Scikit-learn ve diğer araçları kullanacaksınız. Nöral ağlar ve derin öğrenmeden bilinçli olarak uzak durduk, zira bunlar yakında yayınlanacak 'Yeni Başlayanlar için AI' müfredatımızda kapsamlı şekilde ele alınacak.
Scikit-learn, modeller oluşturmayı ve bunları değerlendirmeyi kolaylaştırır. Öncelikli olarak sayısal verilerle çalışır ve öğrenme araçları olarak kullanılabilecek birkaç hazır veri seti içerir. Ayrıca, öğrencilerin denemesi için önceden oluşturulmuş modeller de içerir. Şimdi, önceden paketlenmiş verileri yükleme ve yerleşik bir tahminci kullanarak ilk ML modelimizi oluşturma sürecini keşfedelim.
Scikit-learn, modeller oluşturmayı ve değerlendirmeyi kolaylaştırır. Öncelikle sayısal verilerle çalışmaya odaklanmıştır ve öğrenme araçları olarak kullanılabilecek hazır birden fazla veri seti içerir. Ayrıca öğrencilerin deneyebileceği önceden hazırlanmış modeller sağlar. Öncelikle paketlenmiş veri yükleme ve yerleşik bir tahminci kullanarak Scikit-learn ile temel bir ML modeli kurma sürecini keşfedelim.
## Egzersiz - İlk Scikit-learn Defteriniz
## Egzersiz - ilk Scikit-learn notebook'unuz
> Bu eğitim, Scikit-learn'ün web sitesindeki [doğrusal regresyon örneğinden](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) ilham alınarak hazırlanmıştır.
> Bu öğretici, Scikit-learn web sitesindeki [doğrusal regresyon örneği](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) tarafından esinlenmiştir.
[](https://youtu.be/2xkXL5EUpS0 "Başlangıç için Python'da İlk Doğrusal Regresyon Projeniz")
> 🎥 Yukarıdaki görsele tıklayarak bu egzersizi anlatan kısa bir video izleyebilirsiniz.
[](https://youtu.be/2xkXL5EUpS0 "Yeni başlayanlar için ML - Python'da İlk Doğrusal Regresyon Projeniz")
Bu derse ait _notebook.ipynb_ dosyasında, tüm hücreleri 'çöp kutusu' simgesine basarak temizleyin.
> 🎥 Bu egzersizi adım adım anlatan kısa video için yukarıdaki görsele tıklayın.
Bu bölümde, öğrenme amaçlı Scikit-learn'e dahil edilmiş diyabetle ilgili küçük bir veri setiyle çalışacaksınız. Diyabet hastaları için bir tedaviyi test etmek istediğinizi hayal edin. Makine öğrenimi modelleri, değişkenlerin kombinasyonlarına bağlı olarak hangi hastaların tedaviye daha iyi yanıt vereceğini belirlemenize yardımcı olabilir. Görselleştirildiğinde, çok temel bir regresyon modeli bile teorik klinik denemelerinizi organize etmenize yardımcı olacak değişkenler hakkında bilgi gösterebilir.
_notebook.ipynb_ dosyasında, tüm hücreleri 'çöp kutusu' ikonuna basarak temizleyin.
✅ Birçok regresyon yöntemi vardır ve hangisini seçeceğiniz, aradığınız cevaba bağlıdır. Örneğin, belirli bir yaşta bir kişinin muhtemel boyunu tahmin etmek istiyorsanız, **sayısal bir değer** aradığınız için doğrusal regresyon kullanırsınız. Eğer bir mutfağın vegan olup olmadığını belirlemek istiyorsanız, bir **kategori ataması** arıyorsunuz demektir ve lojistik regresyon kullanırsınız. Lojistik regresyonu daha sonra öğreneceksiniz. Verilerden sorabileceğiniz bazı soruları ve bu yöntemlerden hangisinin daha uygun olacağını düşünün.
Bu bölümde, Scikit-learn'e öğrenme amaçlı olarak dahil edilmiş küçük bir diyabet veri kümesiyle çalışacaksınız. Diyabet hastaları için bir tedavi test etmek istediğinizi hayal edin. Makine Öğrenimi modelleri, değişken kombinasyonlarına göre hangi hastaların tedaviye daha iyi yanıt vereceğini belirlemenize yardımcı olabilir. Çok temel bir regresyon modeli bile görselleştirildiğinde, teorik klinik deneylerinizi organize etmekte yardımcı olacak değişkenler hakkında bilgi verebilir.
Hadi bu göreve başlayalım.
✅ Birçok regresyon yöntemi türü vardır ve hangisini seçeceğiniz, aradığınız yanıta bağlıdır. Belirli bir yaş için muhtemel uzunluğu tahmin etmek istiyorsanız, **sayısal bir değer** aradığınız için doğrusal regresyon kullanırsınız. Diyet olarak vegan kabul edilip edilmemesi gibi bir tür yiyecek sınıflandırması ilgilendiriyorsa, **kategori ataması** arıyorsunuz demektir ve lojistik regresyon kullanırsınız. Lojistik regresyonu daha sonra öğreneceksiniz. Veriden sorabileceğiniz bazı soruları ve hangi yöntemin daha uygun olacağını biraz düşünün.
### Kütüphaneleri İçe Aktarma
Bu göreve başlayalım.
### Kütüphaneleri içe aktar
Bu görev için bazı kütüphaneleri içe aktaracağız:
- **matplotlib**. [Grafik oluşturma aracı](https://matplotlib.org/) ve bir çizgi grafiği oluşturmak için kullanacağız.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html), Python'da sayısal verilerle çalışmak için kullanışlı bir kütüphanedir.
- **matplotlib**. Faydalı bir [grafik aracı](https://matplotlib.org/)dır ve çizgi grafiği oluşturmak için kullanacağız.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html), Python'da sayısal veri ile çalışmak için yararlı bir kütüphanedir.
- **sklearn**. Bu, [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) kütüphanesidir.
Görevlerinize yardımcı olması için bazı kütüphaneleri içe aktarın.
Görevlerinize yardımcı olacak bazı kütüphaneleri içe aktarın.
1. Aşağıdaki kodu yazarak içe aktarmaları ekleyin:
1. Aşağıdaki kodu yazarak içe aktarımları ekleyin:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Görevlerinize yardımcı olması için bazı kütüphaneleri içe aktarın.
from sklearn import datasets, linear_model, model_selection
```
Yukarıda `matplotlib`, `numpy` ve `sklearn`'den `datasets`, `linear_model` ve `model_selection` içe aktarılıyor. `model_selection`, verileri eğitim ve test setlerine ayırmak için kullanılır.
Yukarıda `matplotlib`, `numpy`içe aktarılıyor ve `sklearn`den `datasets`, `linear_model` ve `model_selection` içe aktarılıyor. `model_selection`, veriyi eğitim ve test setlerine bölmek için kullanılır.
### Diyabet Veri Seti
### Diyabet veri kümesi
Yerleşik [diyabet veri seti](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset), diyabetle ilgili 442 veri örneği içerir ve 10 özellik değişkeni içerir. Bunlardan bazıları şunlardır:
Dahili [diyabet veri kümesi](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset), diyabet çevresinde 442 örnek veri içerir ve 10 özellik değişkeni vardır, bunlardan bazıları:
- age: yaş (yıl olarak)
- bmi: vücut kitle indeksi
- bmi: beden kitle indeksi
- bp: ortalama kan basıncı
- s1 tc: T-Hücreleri (bir tür beyaz kan hücresi)
✅ Bu veri seti, diyabetle ilgili araştırmalarda önemli bir özellik değişkeni olarak 'cinsiyet' kavramını içerir. Birçok tıbbi veri seti, bu tür ikili sınıflandırmaları içerir. Bu tür sınıflandırmaların, bir nüfusun belirli bölümlerini tedavilerden nasıl dışlayabileceğini biraz düşünün.
✅ Bu veri setinde, diyabet araştırmalarında önemli bir özellik değişken olan 'cinsiyet' kavramı vardır. Birçok tıbbi veri seti bu tür ikili sınıflandırmalar içerir. Bu tür sınıflandırmaların nüfusun bazı bölümlerini tedavilerden nasıl dışlayabileceğini biraz düşünün.
Şimdi, X ve y verilerini yükleyin.
> 🎓 Unutmayın, bu denetimli bir öğrenmedir ve adlandırılmış bir 'y' hedefi gereklidir.
> 🎓 Unutmayın, bu denetimli öğrenmedir ve adlandırılmış bir 'y' hedefi gerekir.
Yeni bir kod hücresinde, `load_diabetes()` fonksiyonunu çağırarak diyabet veri setini yükleyin. `return_X_y=True` girdisi, `X`'in bir veri matrisi ve `y`'nin regresyon hedefi olacağını belirtir.
Yeni bir kod hücresinde, diyabet veri setini `load_diabetes()` çağırarak yükleyin. `return_X_y=True` girişi, `X`in veri matrisi ve `y`nin regresyon hedefi olacağını belirtir.
1. Veri matrisinin şeklini ve ilk elemanını göstermek için bazı print komutları ekleyin:
1. Veri matrisinin şekli ve ilk öğesini göstermek için birkaç yazdırma komutu ekleyin:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Yeni bir kod hücresinde, `load_diabetes()` fonksiyonunu çağırarak diyabet ve
print(X[0])
```
Aldığınız yanıt bir tuple'dır. Tuple'ın ilk iki değerini sırasıyla `X` ve `y`'ye atıyorsunuz. Daha fazla bilgi için [tuple'lar hakkında bilgi edinin](https://wikipedia.org/wiki/Tuple).
Dönen yanıt bir demet (tuple) olup, ona göre ilk iki değer sırasıyla `X` ve `y`ye atanır. Demetler hakkında daha fazla bilgi için [demetlere](https://wikipedia.org/wiki/Tuple) bakabilirsiniz.
Bu verilerin, 10 elemanlı diziler halinde şekillendirilmiş 442 öğeye sahip olduğunu görebilirsiniz:
Bu verinin 442 öğeden oluştuğunu ve bunların her birinin 10 elemanlı diziler şeklinde olduğunu görebilirsiniz:
```text
(442, 10)
@ -159,39 +160,39 @@ Yeni bir kod hücresinde, `load_diabetes()` fonksiyonunu çağırarak diyabet ve
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Veriler ile regresyon hedefi arasındaki ilişkiyi biraz düşünün. Doğrusal regresyon, özellik X ile hedef değişken y arasındaki ilişkileri tahmin eder. Diyabet veri seti için [hedefi](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) belgelerde bulabilir misiniz? Bu veri seti neyi gösteriyor?
✅ Veriler ile regresyon hedefi arasındaki ilişkiyi biraz düşünün. Doğrusal regresyon, özellik X ile hedef değişken y arasındaki ilişkiyi tahmin eder. Diyabet veri kümesi için [hedefi](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) dokümantasyonda bulabilir misiniz? Bu veri seti verilen hedefle ne gösteriyor?
2. Daha sonra, bu veri setinin bir kısmını seçerek çizim yapın. Veri setinin 3. sütununu seçmek için `:` operatörünü kullanarak tüm satırları seçin ve ardından 3. sütunu (2. indeks) seçin. Verileri, çizim için gerekli olan 2D bir diziye dönüştürmek için `reshape(n_rows, n_columns)` kullanabilirsiniz. Parametrelerden biri -1 ise, ilgili boyut otomatik olarak hesaplanır.
2. Sonra, bu veri setinin bir kısmını çizdirmek için 3. sütunu seçin. Bunu tüm satırları seçmek için `:` operatörü ile ve daha sonra (2) indeksi ile 3. sütunu seçerek yapabilirsiniz. Veriyi çizim için gereken 2 boyutlu dizi haline getirmek için `reshape(n_rows, n_columns)` fonksiyonunu kullanabilirsiniz. Parametrelerden biri -1 ise, o boyut otomatik hesaplanır.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ İstediğiniz zaman, verilerin şeklini kontrol etmek için yazdırabilirsiniz.
✅ Herhangi bir zamanda verinin şeklini kontrol etmek için yazdırın.
3. Artık çizim için hazır olan verilere sahipsiniz. Şimdi, bu veri setindeki sayılar arasında mantıklı bir ayrım yapıp yapamayacağını görmek için bir makine kullanabilirsiniz. Bunu yapmak için, hem verileri (X) hem de hedefi (y) test ve eğitim setlerine ayırmanız gerekir. Scikit-learn, bunu yapmak için basit bir yol sunar; test verilerinizi belirli bir noktada bölebilirsiniz.
3. Artık çizime hazır veriniz var, bir makinenin veri setindeki sayılar arasında mantıklı bir sınır belirlemesine izin verip vermediğine bakabilirsiniz. Bunu yapmak için, veri (X) ve hedef (y) test ve eğitim setlerine bölünmelidir. Scikit-learn bunu kolayca yapmanızı sağlar; test verinizi belirli bir noktada bölebilirsiniz.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Şimdi modelinizi eğitmeye hazırsınız! Doğrusal regresyon modelini yükleyin ve `model.fit()` kullanarak X ve y eğitim setlerinizle eğitin:
4. Şimdi modelinizi eğitmeye hazırsınız! Doğrusal regresyon modelini yükleyin ve `model.fit()` kullanarak X ve y eğitim setleriniz ile eğitin:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ `model.fit()`TensorFlow gibi birçok ML kütüphanesinde göreceğiniz bir fonksiyondur.
✅ `model.fit()`fonksiyonu, TensorFlow gibi birçok ML kütüphanesinde gördüğünüz bir işlevdir
5. Daha sonra, test verilerini kullanarak bir tahmin oluşturun. Bu, veri grupları arasındaki çizgiyi çizmek için kullanılacaktır.
5. Sonra test verisini kullanarak `predict()` fonksiyonu ile tahmin oluşturun. Bu, veri grupları arasında bir çizgi çizmek için kullanılacak.
```python
y_pred = model.predict(X_test)
```
6. Şimdi verileri bir grafikte gösterme zamanı. Matplotlib bu görev için çok kullanışlı bir araçtır. Tüm X ve y test verilerinin bir dağılım grafiğini oluşturun ve modelin veri grupları arasındaki en uygun yere bir çizgi çizmek için tahmini kullanın.
6. Şimdi veriyi bir grafikte gösterme zamanı. Bu görev için matplotlib çok faydalı bir araçtır. Tüm X ve y test verilerinin bir saçılım grafiğini oluşturun ve tahmini kullanarak modelin veri grupları arasında en uygun yere bir çizgi çizin.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,28 +203,32 @@ Yeni bir kod hücresinde, `load_diabetes()` fonksiyonunu çağırarak diyabet ve
plt.show()
```

✅ Burada neler olduğunu biraz düşünün. Bir düz çizgi, birçok küçük veri noktasının arasından geçiyor, ancak tam olarak ne yapıyor? Bu çizgiyi, yeni ve daha önce görülmemiş bir veri noktasının, grafiğin y ekseniyle olan ilişkisini tahmin etmek için nasıl kullanabileceğinizi görebiliyor musunuz? Bu modelin pratik kullanımını kelimelere dökmeye çalışın.

✅ Burada neler olup bittiği hakkında biraz düşünün. Bir doğru, birçok küçük veri noktasından geçiyor, peki tam olarak ne yapıyor? Yeni, görülmemiş bir veri noktasının grafiğin y eksenine göre nerede yer alması gerektiğini tahmin etmek için bu doğruyu nasıl kullanabileceğinizi görebiliyor musunuz? Bu modelin pratik kullanımını kelimelere dökmeye çalışın.
Tebrikler, ilk doğrusal regresyon modelinizi oluşturdunuz, bununla bir tahmin yaptınız ve bunu bir grafikte gösterdiniz!
Tebrikler, ilk doğrusal regresyon modelinizi oluşturdunuz, onunla bir tahmin yaptınız ve bunu bir grafikte gösterdiniz!
---
## 🚀Meydan Okuma
Bu veri kümesinden farklı bir değişkeni görselleştirin. İpucu: Şu satırı düzenleyin: `X = X[:,2]`. Bu veri kümesinin hedefi göz önüne alındığında, diyabetin bir hastalık olarak ilerleyişi hakkında neler keşfedebilirsiniz?
Bu veri setinden farklı bir değişkeni grafikle gösterin. İpucu: bu satırı düzenleyin: `X = X[:,2]`. Bu veri setinin hedefi göz önüne alındığında, diyabet hastalığının ilerleyişi hakkında neler keşfedebilirsiniz?
Bu derste, basit doğrusal regresyon ile çalıştınız, tek değişkenli veya çok değişkenli doğrusal regresyon ile değil. Bu yöntemler arasındaki farklar hakkında biraz okuyun veya [bu videoya](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) göz atın.
Bu öğreticide, tek değişkenli veya çoklu doğrusal regresyon yerine basit doğrusal regresyon ile çalıştınız. Bu yöntemler arasındaki farklılıklar hakkında biraz okuyun veya [bu videoya](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) göz atın.
Regresyon kavramı hakkında daha fazla bilgi edinin ve bu teknikle hangi tür soruların yanıtlanabileceğini düşünün. Anlayışınızı derinleştirmek için [bu eğitimi](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) alın.
Regresyon kavramı hakkında daha fazla okuyun ve bu teknikle hangi tür soruların cevaplanabileceğini düşünün. Anlayışınızı derinleştirmek için bu [öğreticiyi](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) yapın.
## Ödev
[Farklı bir veri kümesi](assignment.md)
[Farklı bir veri seti](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Feragatname**:
Bu belge, [Co-op Translator](https://github.com/Azure/co-op-translator) adlı yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlama veya yanlış yorumlamalardan sorumlu değiliz.
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
Infografik [Dasani Madipalli](https://twitter.com/dasani_decoded) tarafından
## [Ders Öncesi Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders öncesi quiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Bu ders R dilinde de mevcut!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [Bu ders R dilinde mevcut!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Giriş
Scikit-learn ile makine öğrenimi modeli oluşturmak için gerekli araçları kurduğunuza göre, artık verilerinizle ilgili sorular sormaya hazırsınız. Verilerle çalışırken ve makine öğrenimi çözümleri uygularken, doğru soruları sormanın, veri setinizin potansiyelini doğru bir şekilde ortaya çıkarmak için çok önemli olduğunu anlamak önemlidir.
Artık Scikit-learn ile makine öğrenimi modeli oluşturmaya başlamak için ihtiyaç duyduğunuz araçlara sahipsiniz, verilerinize soru sormaya başlayabilirsiniz. Verilerle çalışırken ve ML çözümleri uygularken, veri setinizin potansiyellerini doğru şekilde açığa çıkarmak için doğru soruyu sormanın çok önemli olduğunu anlamak gereklidir.
Bu derste şunları öğreneceksiniz:
- Verilerinizi model oluşturma için nasıl hazırlayacağınızı.
- Matplotlib kullanarak veri görselleştirmeyi.
- Model oluşturmak için verilerinizi nasıl hazırlayacağınızı.
- Verileri görselleştirmek için Matplotlib'i nasıl kullanacağınızı.
- Daha etkili veri görselleştirmesi için Seaborn'u nasıl kullanacağınızı.
## Verilerinizle Doğru Soruyu Sormak
## Verilerinize doğru soruyu sormak
Cevaplanmasını istediğiniz soru, hangi tür makine öğrenimi algoritmalarını kullanacağınızı belirleyecektir. Aldığınız cevabın kalitesi ise büyük ölçüde verilerinizin doğasına bağlı olacaktır.
Cevaplamanız gereken soru, nasıl bir ML algoritması kullanacağınızı belirleyecektir. Ve aldığınız cevabın kalitesi, verilerinizin doğasına büyük ölçüde bağlıdır.
Bu ders için sağlanan [verilere](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) bir göz atın. Bu .csv dosyasını VS Code'da açabilirsiniz. Hızlı bir inceleme, boşluklar, metin ve sayısal verilerin bir karışımı olduğunu hemen gösteriyor. Ayrıca, 'Package' adında, verilerin 'sacks', 'bins' ve diğer değerlerin bir karışımı olduğu garip bir sütun var. Aslında, bu veri biraz dağınık.
Bu derste verilen [veriye](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) bir göz atın. Bu .csv dosyasını VS Code'da açabilirsiniz. Hızlıca bakıldığında boşluklar ve hem metin hem sayı içeren karışık veri olduğu görülür. Ayrıca 'Package' adında tuhaf bir sütun var; veriler burada 'sacks', 'bins' ve diğer değerlerin karışımı. Aslında veri biraz karışık.
[](https://youtu.be/5qGjczWTrDQ "Başlangıç Seviyesi ML - Bir Veri Setini Analiz Etme ve Temizleme")
[](https://youtu.be/5qGjczWTrDQ "ML for beginners - Nasıl Veri Seti Analiz Edilir ve Temizlenir")
> 🎥 Yukarıdaki görsele tıklayarak bu ders için veriyi hazırlama sürecini içeren kısa bir videoyu izleyebilirsiniz.
> 🎥 Bu ders için verilerin hazırlanmasını gösteren kısa video için yukarıdaki resme tıklayın.
Aslında, kutudan çıktığı gibi bir makine öğrenimi modeli oluşturmak için tamamen hazır bir veri seti elde etmek pek yaygın değildir. Bu derste, standart Python kütüphanelerini kullanarak ham bir veri setini nasıl hazırlayacağınızı öğreneceksiniz. Ayrıca, veriyi görselleştirmek için çeşitli teknikler öğreneceksiniz.
Aslında, kutudan çıkar çıkmaz kullanıma tamamen hazır bir veri seti almak çok yaygın değildir. Bu derste, standart Python kütüphaneleri kullanarak ham bir veri setini nasıl hazırlayacağınızı öğreneceksiniz. Ayrıca verileri görselleştirmek için çeşitli teknikleri öğreneceksiniz.
## Vaka Çalışması: 'Balkabağı Pazarı'
## Vaka çalışması: 'kabak pazarı'
Bu klasörde, kök `data` klasöründe [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) adlı bir .csv dosyası bulacaksınız. Bu dosya, şehir bazında gruplandırılmış, balkabağı pazarına dair 1757 satır veri içeriyor. Bu, Amerika Birleşik Devletleri Tarım Bakanlığı tarafından dağıtılan [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) raporlarından çıkarılmış ham bir veridir.
Bu klasörde, kök `data` klasörü içinde [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) adlı, şehir bazında gruplandırılmış kabak pazarı hakkında 1757 satırlık veri içeren bir .csv dosyası bulacaksınız. Bu, Amerika Birleşik Devletleri Tarım Bakanlığı tarafından dağıtılan [Özel Ürünler Terminal Pazarları Standart Raporlarından](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) çıkarılan ham veridir.
### Veriyi Hazırlama
### Verileri hazırlama
Bu veri kamuya açık bir alandadır. USDA web sitesinden şehir başına birçok ayrı dosya olarak indirilebilir. Çok fazla ayrı dosyadan kaçınmak için, tüm şehir verilerini tek bir elektronik tabloya birleştirdik, bu nedenle veriyi biraz _hazırlamış_ olduk. Şimdi, veriye daha yakından bakalım.
Bu veri kamu malıdır. USDA web sitesinden şehir başına çok sayıda ayrı dosya olarak indirilebilir. Çok fazla dosya olmasını önlemek için tüm şehir verilerini tek bir tabloya birleştirdik, böylece veriyi zaten biraz _hazırlamış_ olduk. Şimdi veriye daha yakından bakalım.
### Balkabağı Verisi - İlk Sonuçlar
### Kabak verisi - ilk çıkarımlar
Bu veri hakkında ne fark ettiniz? Zaten metin, sayılar, boşluklar ve anlamlandırmanız gereken garip değerlerin bir karışımı olduğunu gördünüz.
Bu veride ne fark ettiniz? Zaten içinde metinler, sayılar, boşluklar ve anlamlandırmanız gereken tuhaf değerler olduğunu gördünüz.
Bu veriye bir Regresyon tekniği kullanarak hangi soruyu sorabilirsiniz? Örneğin, "Belirli bir ayda satışa sunulan bir balkabağının fiyatını tahmin et." Veriye tekrar bakıldığında, bu göreve uygun bir veri yapısı oluşturmak için bazı değişiklikler yapmanız gerektiği görülüyor.
Bu veriye bir Regresyon tekniği kullanarak hangi soruyu sorabilirsiniz? Mesela "Belirli bir ayda satılan kabak fiyatını tahmin et". Veriye tekrar baktığınızda, görevi gerçekleştirmek için veri yapısında yapmanız gereken bazı değişiklikler var.
## Alıştırma - kabak verisini analiz et
## Egzersiz - Balkabağı Verisini Analiz Etme
Bu kabak verisini analiz etmek ve hazırlamak için verileri şekillendirmede çok faydalı olan [Pandas](https://pandas.pydata.org/) (adı`Python Veri Analizi` anlamına gelir) aracını kullanalım.
Balkabağı verisini analiz etmek ve hazırlamak için, verileri şekillendirmede çok kullanışlı bir araç olan [Pandas](https://pandas.pydata.org/) kütüphanesini kullanacağız.
### İlk olarak, eksik tarihler için kontrol yapın
### İlk Olarak, Eksik Tarihleri Kontrol Edin
Öncelikle eksik tarih olup olmadığını kontrol etmek için adımlar atmanız gerekiyor:
Öncelikle eksik tarihleri kontrol etmek için şu adımları izleyin:
1. Tarihleri ay formatına dönüştürün (bunlar ABD tarihleri, format `MM/DD/YYYY`).
2. Ay bilgisini yeni bir sütuna çıkarın.
1. Tarihleri ay formatına dönüştürün (bu tarihler ABD formatında, yani `AA/GG/YYYY`).
2. Ayı yeni bir sütuna çıkarın.
Visual Studio Code'da _notebook.ipynb_ dosyasını açın ve tabloyu yeni bir Pandas dataframe'ine aktarın.
_VS Code_ içinde _notebook.ipynb_ dosyasını açın ve elektronik tabloyu yeni bir Pandas dataframe'ine aktarın.
1. İlk beş satırı görüntülemek için `head()` fonksiyonunu kullanın.
1. İlk beş satırı görmek için `head()` fonksiyonunu kullanın.
```python
import pandas as pd
@ -64,7 +64,7 @@ _VS Code_ içinde _notebook.ipynb_ dosyasını açın ve elektronik tabloyu yeni
pumpkins.head()
```
✅ Son beş satırı görüntülemek için hangi fonksiyonu kullanırdınız?
✅ Son beş satırı görmek için hangi fonksiyonu kullanırsınız?
1. Mevcut dataframe'de eksik veri olup olmadığını kontrol edin:
@ -72,22 +72,22 @@ _VS Code_ içinde _notebook.ipynb_ dosyasını açın ve elektronik tabloyu yeni
pumpkins.isnull().sum()
```
Eksik veri var, ancak bu belki de ele alınan görev için önemli olmayabilir.
Eksik veri var, ancak belki mevcut görev için önemli olmayabilir.
1. Dataframe'inizi daha kolay çalışılabilir hale getirmek için, yalnızca ihtiyacınız olan sütunları seçin. Bunun için `loc` fonksiyonunu kullanabilirsiniz. Bu fonksiyon, orijinal dataframe'den bir grup satır (ilk parametre) ve sütun (ikinci parametre) çıkarır. Aşağıdaki durumda `:` ifadesi "tüm satırlar" anlamına gelir.
1. Dataframe ile çalışmayı kolaylaştırmak için, yalnızca ihtiyacınız olan sütunları`loc` fonksiyonunu kullanarak seçin; bu fonksiyon orijinal dataframe'den satır grubunu (birinci parametre) ve sütun grubunu (ikinci parametre) ayıklar. Aşağıdaki durumda `:` ifadesi "tüm satırlar" anlamındadır.
### İkinci Olarak, Balkabağının Ortalama Fiyatını Belirleyin
### İkinci olarak, kabak fiyatının ortalamasını belirleyin
Belirli bir ayda bir balkabağının ortalama fiyatını belirlemek için hangi sütunları seçerdiniz? İpucu: 3 sütuna ihtiyacınız olacak.
Belirli bir ayda bir kabağın ortalama fiyatını nasıl belirleyeceğinizi düşünün. Bu görev için hangi sütunları seçersiniz? İpucu: 3 sütuna ihtiyacınız olacak.
Çözüm: `Low Price` ve `High Price` sütunlarının ortalamasını alarak yeni bir `Price` sütununu doldurun ve `Date` sütununu yalnızca ayı gösterecek şekilde dönüştürün. Neyse ki, yukarıdaki kontrol sonucuna göre, tarihler veya fiyatlar için eksik veri yok.
Çözüm: Yeni Fiyat sütununu doldurmak için `Low Price` ve `High Price` sütunlarının ortalamasını alın ve Tarih sütununu sadece ay gösterecek şekilde dönüştürün. Neyse ki yukarıdaki kontrole göre, tarihler veya fiyatlar için eksik veri yok.
1. Ortalamayı hesaplamak için şu kodu ekleyin:
1. Ortalamayı hesaplamak için aşağıdaki kodu ekleyin:
Dataframe'inizi yazdırdığınızda, yeni regresyon modelinizi oluşturabileceğiniz temiz ve düzenli bir veri seti göreceksiniz.
Dataframe'inizi yazdırmak, üzerine yeni regresyon modelinizi kurabileceğiniz temiz bir veri seti gösterecektir.
### Ama Durun! Burada Garip Bir Şey Var
### Ama durun! Burada tuhaf bir şey var
`Package` sütununa bakarsanız, balkabaklarının birçok farklı şekilde satıldığını görebilirsiniz. Bazıları '1 1/9 bushel' ölçülerinde, bazıları '1/2 bushel' ölçülerinde, bazıları balkabağı başına, bazıları pound başına ve bazıları da genişlikleri değişen büyük kutularda satılıyor.
`Package` sütununa bakarsanız, kabaklar birçok farklı şekilde satılıyor. Bazıları '1 1/9 bushel' ölçüsünde, bazıları '1/2 bushel' ölçüsünde, bazıları tane başına, bazıları pound başına ve bazıları değişen genişlikte büyük kutularda satılıyor.
> Balkabaklarını tutarlı bir şekilde tartmak oldukça zor görünüyor.
> Kabakların tartılması tutarlı şekilde çok zor görünüyor
Orijinal veriye bakıldığında, `Unit of Sale` değeri 'EACH' veya 'PER BIN' olan her şeyin `Package` türü de inç başına, kutu başına veya 'her biri' olarak görünüyor. Balkabaklarını tutarlı bir şekilde tartmak oldukça zor görünüyor, bu yüzden `Package` sütununda 'bushel' kelimesini içeren balkabaklarını seçerek filtreleme yapalım.
Orijinal veriye daha yakından baktığınızda, `Unit of Sale` 'EACH' veya 'PER BIN' olan kayıtların `Package` türü de inç başına, porsiyon başına ya da 'her biri' olarak gözüküyor. Kabaklar tutarlı tartılması zor görünüyor, o yüzden sadece `Package` sütununda 'bushel' geçen kabakları seçerek filtreleyelim.
1. Dosyanın başında, ilk .csv içe aktarma işleminin altına bir filtre ekleyin:
1. Dosyanın en üstüne, ilk .csv aktarımının altına bir filtre ekleyin:
Şimdi veriyi yazdırırsanız, yalnızca 'bushel' içeren yaklaşık 415 satır veriyi aldığınızı görebilirsiniz.
Verileri şimdi yazdırırsanız sadece bushel bazında kabak içeren yaklaşık 415 satırı aldığınızı göreceksiniz.
### Ama Durun! Yapılacak Bir Şey Daha Var
### Ama durun! Daha yapılacak bir şey var
Bushel miktarının satır başına değiştiğini fark ettiniz mi? Fiyatlandırmayı normalize etmeniz ve bushel başına fiyatı göstermeniz gerekiyor, bu yüzden standartlaştırmak için biraz matematik yapın.
Bushel miktarının satır satır değiştiğini fark ettiniz mi? Fiyatlandırmayı normalize etmeniz gerekiyor, böylece fiyatları bushel başına gösterebilirsiniz, bunu standart hale getirmek için biraz matematik yapın.
1. Yeni dataframe'inizi oluşturduğunuz bloğun altına şu satırları ekleyin:
1. Aşağıdaki satırları new_pumpkins dataframe'i oluşturma bloğunun sonrasına ekleyin:
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) sitesine göre, bir bushel'in ağırlığı ürün türüne bağlıdır, çünkü bu bir hacim ölçüsüdür. "Örneğin, bir bushel domatesin ağırlığı 56 pound olmalıdır... Yapraklar ve yeşillikler daha az ağırlıkla daha fazla yer kaplar, bu yüzden bir bushel ıspanak sadece 20 pound'dur." Bu oldukça karmaşık! Bushel'den pound'a dönüşüm yapmaya zahmet etmeyelim ve bunun yerine bushel başına fiyatlandırma yapalım. Ancak, tüm bu bushel çalışması, verilerinizin doğasını anlamanın ne kadar önemli olduğunu gösteriyor!
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) sitesine göre, bir bushelin ağırlığı ürün türüne bağlıdır çünkü bu bir hacim ölçüsüdür. "Örneğin bir bushel domatesin ağırlığı 56 pound olmalıdır... Yapraklar ve yeşillikler daha az ağırlıkla daha fazla yer kaplar, bu yüzden bir bushel ıspanak sadece 20 pounddur." Bu iş oldukça karmaşık! Bushel'den pound'a dönüşüm yapmaya çalışma, bunun yerine bushel bazında fiyatlandır. Yine de bu kabak bushel çalışması, verinizin doğasını anlamanın ne kadar önemli olduğunu gösterir!
Şimdi, bushel ölçümüne dayalı birim başına fiyatlandırmayı analiz edebilirsiniz. Veriyi bir kez daha yazdırırsanız, nasıl standartlaştırıldığını görebilirsiniz.
Artık bushel ölçümüne göre birim fiyatlandırmayı analiz edebilirsiniz. Veriyi yeniden yazdırdığınızda nasıl standart hale geldiğini görebilirsiniz.
✅ Yarım bushel ile satılan balkabaklarının çok pahalı olduğunu fark ettiniz mi? Bunun nedenini anlayabilir misiniz? İpucu: Küçük balkabakları büyük olanlardan çok daha pahalıdır, muhtemelen bir bushel başına çok daha fazla küçük balkabağı sığdığı için.
✅ Yarım bushel ile satılan kabakların çok pahalı olduğunu fark ettiniz mi? Nedenini çözebilir misiniz? İpucu: Küçük kabaklar büyük olanlardan çok daha pahalı, muhtemelen bushel başına çok daha fazla olmalarından dolayı, çünkü büyük boşluklu bir kabak bushel'ü kullanışsız hale getiriyor.
## Görselleştirme Stratejileri
Bir veri bilimcisinin rolü, üzerinde çalıştığı verilerin kalitesini ve doğasını göstermektir. Bunu yapmak için genellikle ilginç görselleştirmeler, yani grafikler, çizimler ve tablolar oluştururlar. Bu şekilde, görsel olarak ilişkileri ve aksi takdirde ortaya çıkması zor olan boşlukları gösterebilirler.
Veri bilimcisinin görevlerinden biri, üzerinde çalıştığı verilerin kalitesini ve doğasını göstermektir. Bunu yapmak için genellikle verinin farklı yönlerini gösteren ilginç görselleştirmeler, grafikler ve çizelgeler oluştururlar. Bu yolla, görsel olarak başka türlü keşfedilmesi zor olan ilişkileri ve boşlukları gösterebilirler.
[](https://youtu.be/SbUkxH6IJo0 "Başlangıç Seviyesi ML - Matplotlib ile Veri Görselleştirme")
[](https://youtu.be/SbUkxH6IJo0 "ML for beginners - Matplotlib ile Veriyi Görselleştirme")
> 🎥 Yukarıdaki görsele tıklayarak bu ders için veriyi görselleştirme sürecini içeren kısa bir videoyu izleyebilirsiniz.
> 🎥 Bu ders için veriyi görselleştirmeyi anlatan kısa video için yukarıdaki resme tıklayın.
Görselleştirmeler ayrıca, veri için en uygun makine öğrenimi tekniğini belirlemeye yardımcı olabilir. Örneğin, bir çizgiyi takip ediyor gibi görünen bir dağılım grafiği, verinin doğrusal regresyon çalışması için iyi bir aday olduğunu gösterebilir.
Görselleştirmeler ayrıca veriye en uygun makine öğrenimi tekniğini belirlemeye yardımcı olabilir. Örneğin bir dağılım grafiğinin bir çizgiyi takip ediyormuş gibi görünmesi, verinin doğrusal regresyon için iyi bir aday olduğunu gösterir.
Jupyter defterlerinde iyi çalışan bir veri görselleştirme kütüphanesi [Matplotlib](https://matplotlib.org/) (önceki derste de gördüğünüz) kütüphanesidir.
Jupyter notebok'larında iyi çalışan veri görselleştirme kütüphanelerinden biri [Matplotlib](https://matplotlib.org/)'dir (önceki derslerde de gördünüz).
> Veri görselleştirme konusunda daha fazla deneyim kazanmak için [bu eğitimlere](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) göz atın.
> Veri görselleştirme konusunda daha fazla deneyim kazanmak için [bu öğreticilere](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) bakın.
## Egzersiz - Matplotlib ile Deney Yapın
## Alıştırma - Matplotlib ile denemeler yapın
Yeni oluşturduğunuz dataframe'i görüntülemek için bazı temel grafikler oluşturmaya çalışın. Basit bir çizgi grafiği ne gösterir?
Az önce oluşturduğunuz yeni dataframe'i göstermek için bazı temel grafikler oluşturmaya çalışın. Basit bir çizgi grafiği ne gösterirdi?
1. Dosyanın başında, Pandas içe aktarma işleminin altına Matplotlib'i ekleyin:
1. Dosyanın başında, Pandas importundan sonra Matplotlib'i içe aktarın:
```python
import matplotlib.pyplot as plt
```
1. Tüm defteri yeniden çalıştırarak yenileyin.
1. Defterin altına, veriyi bir kutu grafiği olarak çizmek için bir hücre ekleyin:
1. Tüm not defterini tekrar çalıştırarak yenileyin.
1. Not defterinin en altına, veriyi bir kutu grafiği olarak çizdirmek için bir hücre ekleyin:
```python
price = new_pumpkins.Price
@ -174,15 +174,15 @@ Yeni oluşturduğunuz dataframe'i görüntülemek için bazı temel grafikler ol
plt.show()
```


Bu faydalı bir grafik mi? Sizi şaşırtan bir şey var mı?
Bu kullanışlı bir grafik mi? Size şaşırtıcı gelen herhangi bir şey var mı?
Bu grafik pek faydalı değil, çünkü yalnızca verilerinizi belirli bir ayda bir dizi nokta olarak gösteriyor.
Bu çok kullanışlı değil çünkü sadece verilerinizin belirli ayda yayılmış noktalar olarak gösterilmesini sağlıyor.
### Daha Faydalı Hale Getirin
### Daha kullanışlı hale getirin
Grafiklerin faydalı veriler göstermesi için genellikle verileri bir şekilde gruplamanız gerekir. Y ekseninin ayları gösterdiği ve verilerin dağılımını gösterdiği bir grafik oluşturalım.
Grafiklerde faydalı veri göstermek için genellikle verileri bir şekilde gruplamanız gerekir. Y ekseninde ayların gösterildiği ve verilerin dağılımını ortaya koyan bir grafik oluşturalım.
1. Gruplandırılmış bir çubuk grafik oluşturmak için bir hücre ekleyin:
@ -191,27 +191,104 @@ Grafiklerin faydalı veriler göstermesi için genellikle verileri bir şekilde
plt.ylabel("Pumpkin Price")
```


Bu daha faydalı bir veri görselleştirmesi! Kabak fiyatlarının en yüksek olduğu ayların Eylül ve Ekim gibi görünüyor. Bu beklediğinizle uyuşuyor mu? Neden ya da neden değil?
## Alıştırma - Seaborn ile denemeler yapın
Matplotlib güçlüdür, ancak şık grafikler oluşturmak için çok kod gerekebilir. [Seaborn](https://seaborn.pydata.org/), Matplotlib üzerine inşa edilmiş istatistiksel veri görselleştirme için tasarlanmış bir kütüphanedir. Pandas dataframe'leriyle doğrudan çalışır, çekici varsayılan stiller uygular ve çok daha az kodla bilgilendirici grafikler oluşturmanızı sağlar. Seaborn Matplotlib nesneleri döndürdüğü için Matplotlib ile bildiğiniz her şeyi sonuçları ince ayar yapmak için hala kullanabilirsiniz.
> Eğer henüz Seaborn yüklü değilse, `pip install seaborn` komutuyla yükleyin.
1. Not defterinin başında, diğer importların altına Seaborn'u import edin. Geleneksel olarak `sns` olarak import edilir:
```python
import seaborn as sns
```
### İlişkileri göstermek için dağılım grafikleri
Model oluşturmadan önce veriyi keşfetmenin önemli bir parçası değişkenler arasındaki _ilişkileri_ aramaktır. [Dağılım grafiği](https://en.wikipedia.org/wiki/Scatter_plot) bunun en iyi araçlarından biridir: eğer noktalar bir çizgiyi takip ediyorsa, iki değişken korele olabilir ve bu, doğrusal regresyon modeli çalıştırmaya uygun bir işarettir.
1. Önceden oluşturduğunuz ay-fiyat dağılım grafiğini bu kez Seaborn'un dataframe sütunlarıyla direkt çalışan [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (ilişkisel grafik) fonksiyonunu kullanarak yeniden oluşturun:

Sütun adlarını ve dataframe'i nasıl verdiğinize dikkat edin, Seaborn eksen etiketlerini sizin için otomatik ayarlıyor.
2. `kind="line"` parametresi vererek çizgi grafik geçişi yapabilirsiniz. Seaborn ayrıca çizginin etrafında güven aralığını gösteren gölgeli bir bant çizer:

Bu veri biraz gürültülü olduğu için çizgi grafik en net tercih değil — ancak Seaborn'da grafik türlerini ne kadar kolay değiştirebileceğinizi gösteriyor.
### Dağılımları göstermek için çubuk grafikler
Önceden Matplotlib ile bir çubuk grafik oluşturmak için verileri elle gruplayıp toplamıştınız. Seaborn'un [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (kategorik grafik) fonksiyonu gruplama ve toplama işlemlerini sizin için yapabilir. Varsayılan olarak `kind="bar"` her kategorinin ortalamasını gösterirken, güven aralığını belirten siyah bir çizgi de yer alır.
1. Aylık ortalama fiyatın çubuk grafiğini oluşturun:

Bu, Matplotlib ile gördüğünüzü doğrular — fiyatlar Eylül ve Ekim civarında zirve yapar — ancak Seaborn ayrıca her ay içindeki fiyat _değişkenliğini_ görselleştirir.
### Korelasyonları göstermek için Isı Haritaları
Serpilmiş grafikler aynı anda iki değişkeni karşılaştırır. Birden fazla sayısal sütun olduğunda, bir [ısı haritası](https://en.wikipedia.org/wiki/Heat_map) aynı anda _her_ sütun çiftinin ilişkisini görmenizi sağlar. Bu, modele hangi sütunların besleneceğine karar verirken en çok ilişkilendirilen özellikleri bulmak için yaygın bir yöntemdir (ayrıca benzer bir grafik sınıflandırmada karışıklık matrislerini göstermek için kullanılır).
1. Pandas ile bir korelasyon matrisi oluşturun, sonra Seaborn'un [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) fonksiyonuyla çizin. `annot=True` seçeneği her hücreye korelasyon değerlerini yazdırır:

`1` (veya `-1`) değerine yakın olanlar, sütunların güçlü _doğrusal_ ilişki içinde olduğunu gösterir. `Low Price` ve `High Price` neredeyse mükemmel şekilde korelasyonludur. Öte yandan, `Month`, fiyat ile ancak zayıf bir doğrusal ilişkiye sahiptir — üstteki çubuk grafik Eylül ve Ekim’de belirgin bir mevsimlik zirveyi ortaya koysa da. Bu önemli bir derstir: korelasyon katsayısı yalnızca _düz çizgi_ ilişkilerini ölçer, bu yüzden mevsimsel ya da doğrusal olmayan desenleri kaçırabilir. ✅ Hangi sütunların kullanılacağına karar vermeden önce hem ısı haritasına *hem* çubuk grafik gibi görsellere bakmak neden faydalıdır?
### Matplotlib mi Seaborn mu?
İki kütüphane de bilinmeye değerdir:
- **Matplotlib** her grafik elemanını ince detaylı kontrol etmenizi sağlar ve neredeyse diğer tüm Python grafik kütüphanelerinin temelidir.
- **Seaborn** istatistiksel grafikler için daha üst seviye fonksiyonlar ve çekici varsayılanlar sunar, doğrudan dataframe'lerle çalışır ve keşifsel veri analizinde genellikle daha hızlıdır.
Bu daha faydalı bir veri görselleştirme! Balkabaklarının en yüksek fiyatının Eylül ve Ekim aylarında olduğunu gösteriyor gibi görünüyor. Bu beklentinizi karşılıyor mu? Neden veya neden değil?
Yaygın bir iş akışı, verinizi hızlıca keşfetmek için Seaborn'u kullanmak, sonra detayları özelleştirmek gerektiğinde Matplotlib'e geçmektir.
---
## 🚀Meydan Okuma
## 🚀Zorluk
Matplotlib'in sunduğu farklı görselleştirme türlerini keşfedin. Hangi türler regresyon problemleri için daha uygundur?
Matplotlib ve Seaborn’un sunduğu farklı görselleştirme türlerini keşfedin. Regresyon problemleri için hangi türler daha uygundur?
## [Ders Sonrası Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders sonrası quiz](https://ff-quizzes.netlify.app/en/ml/)
## Gözden Geçirme ve Kendi Kendine Çalışma
## Gözden Geçirme & Kendi Kendine Çalışma
Verileri görselleştirmenin birçok yoluna göz atın. Mevcut çeşitli kütüphanelerin bir listesini yapın ve hangilerinin belirli görev türleri için en iyi olduğunu not edin, örneğin 2D görselleştirmeler ve 3D görselleştirmeler. Ne keşfediyorsunuz?
Veriyi görselleştirmenin pek çok yoluna bir bakın. Kullanılabilir çeşitli kütüphanelerin bir listesini yapın ve belirli görevler için (örneğin 2D görselleştirmeler vs 3D görselleştirmeler) hangilerinin en uygun olduğunu not edin. Neler keşfediyorsunuz?
## Ödev
[Veri görselleştirme keşfi](assignment.md)
[Görselleştirme keşfi](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Feragatname**:
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluğu sağlamak için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul edilmez.
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
"[Seaborn](https://seaborn.pydata.org/) Matplotlib üzerine inşa edilmiştir ve doğrudan veri çerçeveleri ile çalışır, bu da çok az kodla çekici istatistiksel grafikler oluşturmayı hızlı hale getirir.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### İlişkileri göstermek için dağılım grafikleri\n"
"\n---\n\n**Feragatname**: \nBu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluğu sağlamak için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.\n"
"### Korelasyonları göstermek için Isı Haritaları\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Feragatname**:\nBu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"

> Çizim notu [Tomomi Imura](https://www.twitter.com/girlie_mac) tarafından yapıldı
Pekiştirmeli öğrenme üç önemli kavram içerir: ajan, bazı durumlar ve her durum için bir dizi eylem. Belirli bir durumda bir eylem gerçekleştirerek, ajana bir ödül verilir. Yine Super Mario bilgisayar oyununu hayal edin. Siz Mario'sunuz, bir oyun seviyesindesiniz ve uçurumun kenarında duruyorsunuz. Üstünüzde bir altın var. Mario olarak, bir oyun seviyesinde, belirli bir pozisyonda olmanız... bu sizin durumunuzdur. Sağa bir adım atmak (bir eylem) sizi uçurumdan aşağıya götürür ve bu size düşük bir sayısal puan verir. Ancak zıplama tuşuna basmak size bir puan kazandırır ve hayatta kalırsınız. Bu olumlu bir sonuçtur ve size olumlu bir sayısal puan kazandırmalıdır.
Takviye öğrenme üç önemli kavramı içerir: ajan, bazı durumlar ve durum başına bir eylem kümesi. Belirli bir durumda bir eylem gerçekleştirildiğinde, ajana bir ödül verilir. Tekrar düşünün, bilgisayar oyunu Super Mario. Siz Mario'sunuz, bir oyun seviyesindesiniz ve bir uçurumun kenarında duruyorsunuz. Üstünüzde bir madeni para var. Siz Mario olarak, bir oyun seviyesinde, belirli bir pozisyondasınız ... bu sizin durumunuzdur. Bir adım sağa hareket etmek (bir eylem) sizi uçurumdan aşağı düşürecek ve bu size düşük sayısal bir puan verecektir. Ancak, zıplama düğmesine basmak size bir puan kazandıracak ve hayatta kalmanızı sağlayacaktır. Bu olumlu bir sonuçtur ve size pozitif sayısal bir puan vermelidir.
Pekiştirmeli öğrenme ve bir simülatör (oyun) kullanarak, hayatta kalmayı ve mümkün olduğunca çok puan toplamayı hedefleyerek oyunu nasıl oynayacağınızı öğrenebilirsiniz.
Takviye öğrenmeyi ve bir simülatörü (oyunu) kullanarak, hayatta kalmak ve mümkün olduğunca çok puan kazanmak için nasıl oynanacağını öğrenebilirsiniz.
## [Ders Öncesi Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders Öncesi Quiz](https://ff-quizzes.netlify.app/en/ml/)
## Ön Koşullar ve Kurulum
## Önkoşullar ve Kurulum
Bu derste, Python'da bazı kodlarla denemeler yapacağız. Bu dersteki Jupyter Notebook kodunu bilgisayarınızda veya bulutta çalıştırabilmelisiniz.
Bu derste Python'da bazı kodlar ile deney yapacağız. Bu dersteki Jupyter Notebook kodlarını ya kendi bilgisayarınızda ya da bulutta bir yerde çalıştırabilmelisiniz.
[Ders not defterini](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) açabilir ve bu dersi adım adım takip edebilirsiniz.
[ders not defterini](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) açabilir ve bu dersi takip ederek kodları oluşturabilirsiniz.
> **Not:** Bu kodu buluttan açıyorsanız, not defteri kodunda kullanılan [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) dosyasını da almanız gerekir. Bu dosyayı not defteriyle aynı dizine ekleyin.
> **Not:** Bu kodu buluttan açıyorsanız, ayrıca not defteri kodunda kullanılan [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) dosyasını da indirmeniz gerekir. Not defteri ile aynı dizine ekleyin.
## Giriş
Bu derste, Rus besteci [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) tarafından yazılmış bir müzikal masaldan esinlenilen**[Peter ve Kurt](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** dünyasını keşfedeceğiz. Peter'ın çevresini keşfetmesine, lezzetli elmalar toplamasına ve kurtla karşılaşmaktan kaçınmasına olanak tanımak için **Pekiştirmeli Öğrenme** kullanacağız.
Bu derste, Rus besteci [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev)'in müzikal masalından esinlenerek,**[Peter ve Kurt](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** dünyasını keşfedeceğiz. Peter'ın çevresini keşfetmesi, lezzetli elmalar toplaması ve kurttan kaçınması için **Takviye Öğrenme** kullanacağız.
**Pekiştirmeli Öğrenme** (RL), bir **ajan**ın bir **çevrede** optimal davranışını öğrenmesine olanak tanıyan bir öğrenme tekniğidir. Bu çevredeki bir ajanın bir **hedefi** olmalıdır ve bu hedef bir **ödül fonksiyonu** ile tanımlanır.
**Takviye Öğrenme** (RL), birçok deney yaparak bir **ajanın** bir **çevrede** en iyi davranışı öğrenmesini sağlayan bir öğrenme tekniğidir. Bu çevredeki ajanın bir **hedefi** olmalı, bu hedef bir **ödül fonksiyonu** ile tanımlanır.
## Çevre
Basitlik açısından, Peter'ın dünyasını`genişlik` x `yükseklik` boyutlarında bir kare tahta olarak düşünelim:
Basitlik için, Peter’ın dünyasını`genişlik` x `yükseklik` boyutlarında kare bir tahta gibi düşünelim:
* **zemin**, Peter ve diğer canlıların üzerinde yürüyebileceği yer.
* **su**, üzerinde yürüyemeyeceğiniz yer.
* bir **ağaç** veya **çimen**, dinlenebileceğiniz bir yer.
* bir **elma**, Peter'ın kendini beslemek için bulmaktan memnun olacağı bir şey.
* bir **kurt**, tehlikeli ve kaçınılması gereken bir şey.
* Peter ve diğer canlıların yürüyebileceği **yeryüzü**
* Elbette yürüyemeyeceğiniz **su**
* Dinlenebileceğiniz bir yer olan **ağaç** veya **ot**
* Peter'ın kendini beslemek için bulmayı çok isteyeceği bir **elma**
* Tehlikeli olan ve kaçınılması gereken bir **kurt**
Bu çevreyle çalışmak için kod içeren ayrı bir Python modülü olan [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) bulunmaktadır. Bu kod, kavramlarımızı anlamak için önemli olmadığından, modülü içe aktaracağız ve örnek tahtayı oluşturmak için kullanacağız (kod bloğu 1):
Bu çevre ile çalışmak için kod içeren ayrı bir Python modülü vardır, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py). Bu kod konuyu anlamak için önemli olmadığından modülü içe aktaracağız ve örnek tahtayı oluşturmak için kullanacağız (kod bloğu 1):
```python
from rlboard import *
@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
Bu kod, yukarıdaki resme benzer bir çevre görüntüsü yazdırmalıdır.
Bu kod, yukarıdaki çevre resmine benzer bir çıktı vermelidir.
## Eylemler ve Politika
## Eylemler ve politika
Örneğimizde, Peter'ın hedefi bir elma bulmak, kurt ve diğer engellerden kaçınmak olacaktır. Bunu yapmak için, elmayı bulana kadar etrafta dolaşabilir.
Örneğimizde, Peter’ın hedefi elmayı bulabilmek, kurt ve diğer engellerden kaçınmak olacaktır. Bunu yapmak için, aslında etrafta yürüyerek elmayı bulmalıdır.
Bu nedenle, herhangi bir pozisyonda yukarı, aşağı, sola ve sağa hareket etmek gibi eylemlerden birini seçebilir.
Bu nedenle, herhangi bir konumda aşağıdaki eylemlerden birini seçebilir: yukarı, aşağı, sola ve sağa.
Bu eylemleri bir sözlük olarak tanımlayacağız ve bunlarıilgili koordinat değişiklikleriyle eşleyeceğiz. Örneğin, sağa hareket etmek (`R`) `(1,0)` çiftine karşılık gelir. (kod bloğu 2):
Bu eylemleri bir sözlük olarak tanımlayacağız ve bunlarıkarşılık gelen koordinat değişim çiftlerine eşleyeceğiz. Örneğin, sağa hareket (`R`) `(1,0)` çiftine karşılık gelir. (kod bloğu 2):
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
Bu senaryonun stratejisi ve hedefi şu şekilde özetlenebilir:
Özetle, bu senaryonun stratejisi ve hedefi şunlardır:
- **Strateji**, ajanımızın (Peter) stratejisi, **politika** olarak adlandırılan bir fonksiyonla tanımlanır. Politika, herhangi bir durumda eylemi döndüren bir fonksiyondur. Bizim durumumuzda, problemin durumu, oyuncunun mevcut pozisyonu dahil olmak üzere tahtayla temsil edilir.
- Ajanımızın (Peter) **stratejisi**, **politikası** olarak adlandırılan bir fonksiyonla tanımlanır. Politika, verilen bir durumda hangi eylemin seçileceğini döndürür. Bizim durumumuzda, problemin durumu, oyuncunun mevcut pozisyonu da dahil olmak üzere tahtayla temsil edilir.
- **Hedef**, pekiştirmeli öğrenmenin nihai hedefi, problemi verimli bir şekilde çözmemizi sağlayacak iyi bir politika öğrenmektir. Ancak, temel olarak, **rastgele yürüyüş** adı verilen en basit politikayı ele alalım.
- Takviye öğrenmenin **hedefi** ise problemi verimli şekilde çözmemizi sağlayacak iyi bir politika öğrenmektir. Ancak başlangıç olarak en basit politika olan **rastgele yürüyüş**ü ele alalım.
## Rastgele Yürüyüş
## Rastgele yürüyüş
Öncelikle rastgele yürüyüş stratejisini uygulayarak problemimizi çözelim. Rastgele yürüyüşte, elmaya ulaşana kadar izin verilen eylemlerden birini rastgele seçeriz (kod bloğu 3).
İlk olarak, rastgele yürüyüş stratejisini uygulayarak problemimizi çözelim. Rastgele yürüyüşte, izin verilen eylemler arasından rastgele bir sonraki eylemi seçeriz, ta ki elmaya ulaşana kadar (kod bloğu 3).
1. Aşağıdaki kodla rastgele yürüyüşü uygulayın:
1. Aşağıdaki kod ile rastgele yürüyüşü uygulayın:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # adım sayısı
# başlangıç konumunu ayarla
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # başarı!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # kurt tarafından yenildi veya boğuldu
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # gerçek hareketi yap
break
n+=1
walk(m,random_policy)
```
`walk` çağrısı, bir çalıştırmadan diğerine değişebilen ilgili yolun uzunluğunu döndürmelidir.
`walk` çağrısı, her çalıştırmada farklı olabilir, karşılık gelen yol uzunluğunu döndürmelidir.
1. Yürüyüş deneyini birkaç kez (örneğin, 100 kez) çalıştırın ve elde edilen istatistikleri yazdırın (kod bloğu 4):
1. Yürüyüş deneyini belirli sayıda (örneğin 100) tekrarlayın ve elde edilen istatistikleri yazdırın (kod bloğu 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Bu senaryonun stratejisi ve hedefi şu şekilde özetlenebilir:
print_statistics(random_policy)
```
Ortalama yol uzunluğunun yaklaşık 30-40 adım olduğunu unutmayın, bu oldukça fazladır, çünkü en yakın elmaya olan ortalama mesafe yaklaşık 5-6 adımdır.
Yolun ortalama uzunluğu yaklaşık 30-40 adım civarındadır ki bu oldukça fazladır. En yakın elmaya ortalama mesafe yaklaşık 5-6 adımdır.
Ayrıca Peter'ın rastgele yürüyüş sırasında hareketinin nasıl göründüğünü görebilirsiniz:
Peter’ın rastgele yürüyüş sırasında hareketi şöyle görünür:
Politikamızı daha akıllıhale getirmek için hangi hareketlerin diğerlerinden "daha iyi" olduğunu anlamamız gerekir. Bunu yapmak için hedefimizi tanımlamamız gerekir.
Politikamızı daha akıllıyapmak için hangi hareketlerin diğerlerinden "daha iyi" olduğunu anlamamız gerekir. Bunun için amacımızı tanımlamalıyız.
Hedef, her durum için bir puan değeri döndüren bir **ödül fonksiyonu** ile tanımlanabilir. Sayı ne kadar yüksekse, ödül fonksiyonu o kadar iyidir. (kod bloğu 5)
Amaç, her durum için bir puan değeri döndürecek bir **ödül fonksiyonu** olarak tanımlanabilir. Sayı ne kadar büyükse, ödül fonksiyonu o kadar iyidir. (kod bloğu 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Ödül fonksiyonlarıyla ilgili ilginç bir şey, çoğu durumda *oyunun sonunda yalnızca önemli bir ödül verilmesidir*. Bu, algoritmamızın olumlu bir ödüle yol açan "iyi" adımları bir şekilde hatırlaması ve önemlerini artırması gerektiği anlamına gelir. Benzer şekilde, kötü sonuçlara yol açan tüm hareketler caydırılmalıdır.
Ödül fonksiyonları ile ilgili ilginç olan şey, çoğu durumda *önemli ödülün oyunun sonunda verilmesidir*. Bu, algoritmamızın sonunda pozitif ödüle götüren "iyi" adımları hatırlaması ve önemini artırması gerekir anlamına gelir. Benzer şekilde, kötü sonuçlara götüren tüm hareketler caydırılmalıdır.
## Q-Öğrenme
Burada tartışacağımız algoritma**Q-Öğrenme** olarak adlandırılır. Bu algoritmada politika, bir **Q-Tablosu** adı verilen bir fonksiyon (veya veri yapısı) ile tanımlanır. Bu tablo, belirli bir durumdaki her bir eylemin "iyiliğini" kaydeder.
Burada tartışacağımız algoritmanın adı**Q-Öğrenme**dir. Bu algoritmada politika, **Q-Tablosu** adı verilen bir fonksiyon (veya veri yapısı) ile tanımlanır. Bu tablo, verilen bir durumdaki her eylemin "iyiliğini" kaydeder.
Q-Tablosu olarak adlandırılır çünkü genellikle bir tablo veya çok boyutlu bir dizi olarak temsil etmek uygundur. Tahtamızın boyutları`genişlik` x `yükseklik` olduğundan, Q-Tablosunu `genişlik` x `yükseklik` x `len(actions)` şeklinde bir numpy dizisi kullanarak temsil edebiliriz: (kod bloğu 6)
Q-Tablosu denmesinin nedeni, genellikle bir tablo veya çok boyutlu dizi olarak temsil edilmesinin uygun olmasıdır. Tahtamız `genişlik` x `yükseklik` boyutunda olduğundan, Q-Tablosunu `genişlik` x `yükseklik` x `len(actions)` şekline sahip bir numpy dizisi olarak temsil edebiliriz: (kod bloğu 6)
Q-Tablosunun tüm değerlerini eşit bir değerle, bizim durumumuzda - 0.25 ile başlatıyoruz. Bu, her durumda tüm hareketlerin eşit derecede iyi olduğu "rastgele yürüyüş" politikasına karşılık gelir. Q-Tablosunu tahtada görselleştirmek için `plot` fonksiyonuna geçirebiliriz: `m.plot(Q)`.
Q-Tablosundaki tüm değerleri eşit bir değerle, bizim durumumuzda 0.25 ile başlatıyoruz. Bu, her durumda tüm hareketlerin eşit iyi olduğu "rastgele yürüyüş" politikasına karşılık gelir. Q-Tablosunu tahtada görselleştirmek için `plot` fonksiyonuna geçebiliriz: `m.plot(Q)`.
Her hücrenin ortasında, hareket yönünü gösteren bir "ok" vardır. Tüm yönler eşit olduğundan, bir nokta gösterilir.
Her hücrenin merkezinde, tercih edilen hareket yönünü gösteren bir "ok" vardır. Tüm yönler eşit olduğundan bir nokta görüntülenir.
Şimdi simülasyonu çalıştırmamız, çevremizi keşfetmemiz ve Q-Tablosu değerlerinin daha iyi bir dağılımını öğrenmemiz gerekiyor, bu da elmaya giden yolu çok daha hızlı bulmamızı sağlayacaktır.
Şimdi simülasyonu çalıştırıp çevremizi keşfetmeli ve Q-Tablosu değerlerinin daha iyi dağılımını öğrenmeliyiz; bu da elmaya giden yolu çok daha hızlı bulmamızı sağlar.
## Q-Öğrenmenin Özeti: Bellman Denklemi
Hareket etmeye başladığımızda, her eylemin karşılık gelen bir ödülü olacaktır, yani teorik olarak en yüksek anlık ödüle göre bir sonraki eylemi seçebiliriz. Ancak, çoğu durumda, hareket hedefimize ulaşmamızı sağlamayacak ve bu nedenle hangi yönün daha iyi olduğunu hemen karar veremeyiz.
Hareket etmeye başladığımızda, her eylemin karşılık geldiği bir ödül olur, yani teorik olarak bir sonraki eylemi en yüksek anlık ödüle göre seçebiliriz. Ancak, çoğu durumda bu hareket elmaya ulaşmamızı sağlamaz, bu nedenle hemen hangi yönün daha iyi olduğunu belirleyemeyiz.
> Önemli olan anlık sonuç değil, simülasyonun sonunda elde edeceğimiz nihai sonuçtur.
> Unutmayın ki önemli olan anlık sonuç değil, simülasyonun sonunda elde edeceğimiz nihai sonuçtur.
Bu gecikmiş ödülü hesaba katmak için, problemimizi özyinelemeli olarak düşünmemize olanak tanıyan**[dinamik programlama](https://en.wikipedia.org/wiki/Dynamic_programming)** ilkelerini kullanmamız gerekir.
Bu gecikmeli ödülü hesaba katmak için **[dinamik programlama](https://en.wikipedia.org/wiki/Dynamic_programming)** prensiplerini kullanmamız gerekir, böylece problemimizi özyinelemeli olarak düşünebiliriz.
Şimdi *s* durumundayız ve bir sonraki *s'* durumuna geçmek istiyoruz. Bunu yaparak, ödül fonksiyonu tarafından tanımlanan *r(s,a)* anlık ödülünü ve gelecekteki bir ödülü alacağız. Eğer Q-Tablomuzun her eylemin "çekiciliğini" doğru bir şekilde yansıttığını varsayarsak, *s'* durumunda *Q(s',a')*'nin maksimum değerine karşılık gelen bir eylem *a* seçeceğiz. Böylece, *s* durumunda alabileceğimiz en iyi olası gelecekteki ödül şu şekilde tanımlanacaktır: `max`
Diyelim şimdi *s* durumundayız ve bir sonraki durumda *s'* gitmek istiyoruz. Böyle yaparak ödül fonksiyonuyla tanımlanan anlık ödül *r(s,a)* ve bazı gelecekteki ödüller alacağız. Q-Tablomuz her eylemin "çekiciliğini" doğru yansıtıyorsa, *s'* durumunda *Q(s',a')* değerinin maksimum olduğu eylemi *a* olarak seçeceğiz. Böylece, *s* durumunda alabileceğimiz en iyi gelecekteki ödül `max`<sub>a'</sub>*Q(s',a')* olarak tanımlanır (maksimum burada *s'* durumundaki tüm olası*a'* eylemleri üzerinden hesaplanır).
## Politikayı Kontrol Etme
Bu, durum *s* ve eylem *a* için Q-Tablosu değerini hesaplayan **Bellman formülünü** verir:
Q-Tablosu, her durumdaki her bir eylemin "çekiciliğini" listelediği için, dünyamızda verimli bir gezinmeyi tanımlamak için kullanılması oldukça kolaydır. En basit durumda, en yüksek Q-Tablo değerine karşılık gelen eylemi seçebiliriz: (kod bloğu 9)
Burada γ, şu anlama gelen **indirim faktörü**dür: mevcut ödülü gelecekteki ödüle kıyasla ne ölçüde tercih edeceğinizi belirler.
## Öğrenme Algoritması
Yukarıdaki denklemi kullanarak öğrenme algoritmamızın sözde kodunu yazabiliriz:
* Q-Tablosu Q'yu tüm durumlar ve eylemler için eşit sayılar ile başlat
* Öğrenme oranıα ← 1 olarak ayarla
* Simülasyonu birçok kez tekrarla
1. Rastgele konumda başla
1. Tekrarla
1. *s* durumunda bir eylem *a* seç
2. Yeni bir durum *s'* hareket ederek eylemi gerçekleştir
3. Oyun sonu koşulu varsa veya toplam ödül çok düşükse - simülasyondan çık
4. Yeni durumda ödül *r* hesapla
5. Bellman denklemine göre Q-Fonksiyonunu güncelle: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Toplam ödülü güncelle ve α’yı azalt.
## Sömürme vs. keşif
Yukarıdaki algoritmada, 2.1 adımında eylemin nasıl seçileceğini belirtmedik. Eğer eylemi rastgele seçersek, rastgele **keşif** yapacağız ve büyük olasılıkla sık öleceğiz ve normalde gitmeyeceğimiz yerleri keşfedeceğiz. Alternatif olarak, zaten bildiğimiz Q-Tablosu değerlerini **sömürerek** (en yüksek Q değeri ile) en iyi eylemi seçebiliriz. Ancak bu, diğer durumları keşfetmemizi engeller ve optimal çözümü bulamayabiliriz.
Bu nedenle, en iyi yaklaşım keşif ile sömürme arasında denge kurmaktır. Bu, *s* durumunda eylemi Q-Tablosundaki değerlere oranla seçerek yapılabilir. Başlangıçta, Q-Tablosu değerleri eşit olduğunda seçim rastgele olur, ancak çevreyi öğrendikçe ajan zaman zaman keşfedilmemiş yola gitmesine izin vererek optimal rotayı takip eder.
## Python uygulaması
Şimdi öğrenme algoritmasını uygulamaya hazırız. Bunu yapmadan önce Q-Tablosundaki keyfi sayıları uygun eylemlerin olasılık vektörüne dönüştürecek bir fonksiyona ihtiyacımız var.
1. `probs()` fonksiyonunu oluşturun:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Başlangıçta vektörün tüm bileşenleri aynı olduğunda 0’a bölmeyi önlemek için orijinal vektöre birkaç `eps` ekliyoruz.
Öğrenme algoritmasını 5000 deney, yani **epoch** boyunca çalıştırın: (kod bloğu 8)
```python
for epoch in range(5000):
# Başlangıç noktasını seç
m.random_start()
# Seyahate başla
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # Oyuncunun tahtanın dışına çıkmasına izin veriyoruz, bu bölümün sonlanmasına neden olur
Bu algoritmayı çalıştırdıktan sonra Q-Tablosu, her adımdaki farklı eylemlerin çekiciliğini define eden değerlerle güncellenmiş olmalıdır. Q-Tablosunu görselleştirerek, her hücreye hareket yönünü gösterecek bir vektör çizebiliriz. Basitlik için ok yerine küçük bir daire çizeriz.
Q-Tablosu her durumdaki eylemin "çekiciliğini" listelediği için, bunu dünyamızda etkin navigasyon tanımlamak için kullanmak oldukça kolaydır. En basit durumda, en yüksek Q-Tablosu değerine karşılık gelen eylemi seçebiliriz: (kod bloğu 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Yukarıdaki kodu birkaç kez denerseniz, bazen "takıldığını" fark edebilirsiniz ve bunu durdurmak için not defterindeki STOP düğmesine basmanız gerekir. Bu, iki durumun optimal Q-Değeri açısından birbirine "işaret ettiği" durumlarda meydana gelir; bu durumda ajan, bu durumlar arasında sonsuz bir şekilde hareket eder.
> Yukarıdaki kodu birkaç kez denerseniz, bazen "takıldığını" fark edebilirsiniz ve durdurmak için defterdeki STOP düğmesine basmanız gerekebilir. Bu, iki durumun optimal Q-Değeri açısından birbirine "işaret ettiği" durumlar olabileceği için olur ve bu durumda ajanlar bu durumlar arasında sonsuza kadar gezinir.
## 🚀Meydan Okuma
> **Görev 1:**`walk` fonksiyonunu, yolun maksimum uzunluğunu belirli bir adım sayısıyla (örneğin, 100) sınırlayacak şekilde değiştirin ve yukarıdaki kodun bu değeri zaman zaman döndürdüğünü gözlemleyin.
> **Görev 1:**`walk` fonksiyonunu, yolun maksimum uzunluğunu belirli bir adım sayısıyla (örneğin 100) sınırlayacak şekilde değiştirin ve yukarıdaki kodun zaman zaman bu değeri döndürdüğünü gözlemleyin.
> **Görev 2:**`walk` fonksiyonunu, daha önce bulunduğu yerlere geri dönmemesini sağlayacak şekilde değiştirin. Bu, `walk`'un döngüye girmesini engelleyecektir, ancak ajan yine de kaçamayacağı bir konumda "sıkışıp" kalabilir.
> **Görev 2:**`walk` fonksiyonunu, daha önce bulunduğu yerlere geri gitmemesi için değiştirin. Bu, `walk`'un döngüye girmesini önleyecektir, ancak ajan yine de kaçamayacağı bir konumda "tuzaklanabilir".
## Gezinme
## Navigasyon
Daha iyi bir gezinme politikası, eğitim sırasında kullandığımız ve sömürü ile keşfi birleştiren politika olacaktır. Bu politikada, her bir eylemi belirli bir olasılıkla, Q-Tablosundaki değerlere orantılı olarak seçiyoruz. Bu strateji, ajanın daha önce keşfettiği bir konuma geri dönmesine neden olabilir, ancak aşağıdaki koddan görebileceğiniz gibi, istenen konuma çok kısa bir ortalama yol ile sonuçlanır (unutmayın ki`print_statistics` simülasyonu 100 kez çalıştırır): (kod bloğu 10)
Daha iyi bir navigasyon politikası, eğitim sırasında kullandığımız, sömürü ve keşfi birleştiren politika olurdu. Bu politikada, Q-Tablosundaki değerlere orantılı olarak her eylemi belirli bir olasılıkla seçeriz. Bu strateji, ajanın zaten keşfettiği bir konuma geri dönmesine neden olabilir, ancak aşağıdaki koddaki gibi, istenen konuma çok kısa ortalama yol ile ulaşmayı sağlar (unutmayın,`print_statistics` simülasyonu 100 kez çalıştırır): (kod bloğu 10)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
Bu kodu çalıştırdıktan sonra, önceki ortalama yol uzunluğundan çok daha küçük bir değer elde etmelisiniz, genellikle 3-6 aralığında.
Bu kodu çalıştırdıktan sonra, öncekine kıyasla çok daha küçük bir ortalama yol uzunluğu elde etmelisiniz, yaklaşık 3-6 arasında.
## Öğrenme sürecini incelemek
## Öğrenme Sürecini İnceleme
Belirttiğimiz gibi, öğrenme süreci, keşif ve problem alanının yapısı hakkındaki kazanılmış bilgiyi kullanma arasında bir dengedir. Öğrenmenin sonuçlarının (ajanın hedefe kısa yol bulmasına yardımcı olma yeteneği) geliştiğini gördük, ancak ortalama yol uzunluğunun öğrenme sürecinde nasıl davrandığını gözlemlemek de ilginçtir:
Bahsettiğimiz gibi, öğrenme süreci, problem alanının yapısı hakkında kazanılan bilginin keşfi ve kullanımı arasında bir dengedir. Öğrenme sonuçlarının (ajanın hedefe kısa bir yol bulmasına yardımcı olma yeteneği) iyileştiğini gördük, ancak öğrenme süreci sırasında ortalama yol uzunluğunun nasıl davrandığını gözlemlemek de ilginçtir:
- **Ortalama yol uzunluğu artar**. Burada gördüğümüz şey, başlangıçta ortalama yol uzunluğunun arttığıdır. Bu muhtemelen, çevre hakkında hiçbir şey bilmediğimizde kötü durumlarda, su veya kurt gibi, sıkışma olasılığımızın yüksek olmasından kaynaklanmaktadır. Daha fazla bilgi edindikçe ve bu bilgiyi kullanmaya başladıkça, çevreyi daha uzun süre keşfedebiliriz, ancak elmaların nerede olduğunu hala çok iyi bilmiyoruz.
- **Ortalama yol uzunluğu artar**. Burada gördüğümüz, başlangıçta ortalama yol uzunluğunun arttığıdır. Bu muhtemelen çevre hakkında hiçbir şey bilmediğimizde, kötü durumlara, suya veya kurda takılma ihtimalimizin yüksek olmasından kaynaklanır. Daha çok şey öğrendikçe ve bu bilgiyi kullanmaya başladıkça, çevreyi daha uzun süre keşfedebiliriz, ancak hala elmaların nerede olduğunu çok iyi bilmiyoruz.
- **Yol uzunluğu, daha fazla öğrendikçe azalır**. Yeterince öğrendikten sonra, ajanın hedefe ulaşması daha kolay hale gelir ve yol uzunluğu azalmaya başlar. Ancak, hala keşfe açık olduğumuz için, genellikle en iyi yoldan saparız ve yeni seçenekleri keşfederek yolu optimalden daha uzun hale getiririz.
- **Öğrendikçe yol uzunluğu azalır**. Yeterince öğrendiğimizde, ajanın hedefe ulaşması kolaylaşır ve yol uzunluğu azalmaya başlar. Ancak hala keşfe açığız, bu yüzden genellikle en iyi yoldan sapar ve yeni seçenekleri keşfederiz, bu da yolu optimalden daha uzun yapar.
- **Uzunluk aniden artar**. Grafikte ayrıca uzunluğun bir noktada aniden arttığını gözlemliyoruz. Bu, sürecin stokastik doğasını ve Q-Tablo katsayılarını yeni değerlerle üzerine yazmak suretiyle "bozabileceğimizi" gösterir. Bu, ideal olarak öğrenme oranını azaltarak (örneğin, eğitimin sonlarına doğru Q-Tablo değerlerini yalnızca küçük bir değerle ayarlayarak) en aza indirgenmelidir.
- **Uzunluk ani artış gösterir**. Bu grafikte ayrıca şu anlaşılıyor ki, belirli bir zamanda uzunluk ani şekilde artmıştır. Bu, sürecin stokastik doğasını ve Q-Tablosu katsayılarının yeni değerlerle üzerine yazılarak "bozulabileceğini" gösterir. Bu ideal olarak öğrenme oranını azaltarak en aza indirilmelidir (örneğin, eğitim sonunda Q-Tablo değerlerini sadece küçük bir değerle güncelleriz).
Genel olarak, öğrenme sürecinin başarısı ve kalitesi, öğrenme oranı, öğrenme oranı azalması ve indirim faktörü gibi parametrelere önemli ölçüde bağlıdır. Bunlar genellikle **hiperparametreler** olarak adlandırılır, çünkü eğitim sırasında optimize ettiğimiz **parametrelerden** (örneğin, Q-Tablo katsayıları) farklıdırlar. En iyi hiperparametre değerlerini bulma sürecine **hiperparametre optimizasyonu** denir ve bu ayrı bir konuyu hak eder.
Genel olarak, öğrenme sürecinin başarısı ve kalitesi, öğrenme oranı, öğrenme oranı azalışı ve indirim faktörü gibi parametrelere önemli ölçüde bağlıdır. Bunlar genellikle **hiperparametreler** olarak adlandırılır ve eğitim sırasında optimize ettiğimiz **parametre**lerden (örneğin Q-Tablosu katsayıları) ayrılır. En iyi hiperparametre değerlerini bulma sürecine **hiperparametre optimizasyonu** denir ve ayrı bir konudur.
## [Ders Sonrası Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders sonrası sınav](https://ff-quizzes.netlify.app/en/ml/)
## Ödev
[Daha Gerçekçi Bir Dünya](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Feragatname**:
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
Bu derste, farklı**ortamları** simüle etmek için **OpenAI Gym** adlı bir kütüphane kullanacağız. Bu dersin kodunu yerel olarak (örneğin, Visual Studio Code'dan) çalıştırabilirsiniz; bu durumda simülasyon yeni bir pencerede açılacaktır. Kodu çevrimiçi çalıştırırken, [burada](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) açıklandığı gibi kodda bazı değişiklikler yapmanız gerekebilir.
Önceki derste çözdüğümüz problem oyuncak bir problem gibi görünebilir, gerçek yaşam senaryoları için gerçekten uygulanabilir değilmiş gibi. Bu durum böyle değil, çünkü birçok gerçek dünya problemi de bu senaryoyu paylaşır - Satranç veya Go oynama dahil. Benzerler çünkü elimizde verilen kurallara sahip bir tahta ve **kesikli bir durum** bulunur.
## [Ders öncesi quiz](https://ff-quizzes.netlify.app/en/ml/)
## Giriş
Bu derste Q-Öğrenmenin aynı ilkelerini **sürekli durum** problemlerine uygulayacağız, yani durumu bir veya daha fazla gerçek sayıyla verilen bir problemdir. Aşağıdaki problemle ilgileneceğiz:
> **Problem**: Eğer Peter kurttan kaçmak istiyorsa, daha hızlı hareket edebilmesi gerekir. Peter'ın nasıl kaymayı, özellikle dengeyi nasıl koruyabileceğini Q-Öğrenme kullanarak göreceğiz.
> Peter ve arkadaşları kurtlardan kaçmak için yaratıcı oluyor! Görsel: [Jen Looper](https://twitter.com/jenlooper)
Deneyimde, dengelemeyle ilgili basitleştirilmiş bir versiyon olan **CartPole** probleminden faydalanacağız. Cartpole dünyasında, yatay hareket edebilen bir kaydırıcı var ve hedef bu kaydırıcının üzerinde dikey bir direği dengelemektir.
Bu derste, farklı**ortamları** simüle etmek için **OpenAI Gym** adlı bir kütüphane kullanacağız. Bu dersin kodunu yerel olarak (örneğin Visual Studio Code'dan) çalıştırabilirsiniz; bu durumda simülasyon yeni bir pencerede açılır. Çevrimiçi kod çalıştırırken, burada açıklandığı gibi [birkaç ayar yapmanız](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) gerekebilir.
## OpenAI Gym
Önceki derste, oyunun kuralları ve durum, kendimiz tanımladığımız `Board` sınıfı tarafından belirlenmişti. Burada, dengeleyen direğin fiziğini simüle edecek özel bir **simülasyon ortamı** kullanacağız. Takviye öğrenme algoritmalarını eğitmek için en popüler simülasyon ortamlarından biri, [Gym](https://gym.openai.com/) olarak adlandırılır ve [OpenAI](https://openai.com/) tarafından geliştirilmiştir. Bu gym'i kullanarak, bir cartpole simülasyonundan Atari oyunlarına kadar farklı**ortamlar** oluşturabiliriz.
Önceki derste, oyunun kuralları ve durum, kendimizin tanımladığı`Board` sınıfı tarafından sağlanıyordu. Burada ise denge direğinin fiziksel simülasyonunu sağlayan özel bir **simülasyon ortamı** kullanacağız. Takviye öğrenme algoritmalarını eğitmek için en popüler simülasyon ortamlarından biri [Gym](https://gym.openai.com/) olarak adlandırılır ve [OpenAI](https://openai.com/) tarafından sürdürülür. Bu gym'i kullanarak cartpole simülasyonundan Atari oyunlarına kadar çeşitli**ortamlar** oluşturabiliriz.
> **Not**: OpenAI Gym tarafından sunulan diğer ortamları [buradan](https://gym.openai.com/envs/#classic_control) görebilirsiniz.
Öncelikle gym'i yükleyelim ve gerekli kütüphaneleri içe aktaralım (kod bloğu 1):
Öncelikle, gym'i yükleyelim ve gerekli kütüphaneleri içe aktaralım (kod bloğu 1):
```python
import sys
@ -20,15 +40,15 @@ import numpy as np
import random
```
## Alıştırma - bir cartpole ortamı başlatma
## Alıştırma - Cartpole ortamını başlatmak
Cartpole dengeleme problemiyle çalışmak için ilgili ortamı başlatmamız gerekiyor. Her ortam şu özelliklere sahiptir:
Cartpole dengeleme problemiyle çalışmak için ilgili ortamı başlatmamız gerekir. Her ortam aşağıdakilerle ilişkilidir:
- **Gözlem alanı**: Ortamdan aldığımız bilgilerin yapısını tanımlar. Cartpole probleminde, direğin pozisyonu, hızı ve diğer bazı değerleri alırız.
- Çevreden aldığımız bilgilerin yapısını tanımlayan **Gözlem uzayı**. Cartpole probleminde, direğin konumu, hızı ve bazı diğer değerleri alırız.
- **Eylem alanı**: Olası eylemleri tanımlar. Bizim durumumuzda eylem alanı ayrık olup iki eylemden oluşur - **sol** ve **sağ**. (kod bloğu 2)
- Olası eylemleri tanımlayan **Eylem uzayı**. Bizim durumumuzda eylem uzayı kesiklidir ve iki eylemden oluşur - **sol** ve **sağ**. (kod bloğu 2)
1. Başlatmak için şu kodu yazın:
1. Başlatmak için aşağıdaki kodu yazın:
```python
env = gym.make("CartPole-v1")
@ -37,11 +57,11 @@ Cartpole dengeleme problemiyle çalışmak için ilgili ortamı başlatmamız ge
print(env.action_space.sample())
```
Ortamın nasıl çalıştığını görmek için 100 adımlık kısa bir simülasyon çalıştıralım. Her adımda, yapılacak bir eylemi sağlıyoruz - bu simülasyonda `action_space`'den rastgele bir eylem seçiyoruz.
Ortamın nasıl çalıştığını görmek için 100 adımlık kısa bir simülasyon yapalım. Her adımda yapılacak eylemlerden biri sağlanır - bu simülasyonda `action_space` içinden rastgele bir eylem seçiyoruz.
1. Aşağıdaki kodu çalıştırın ve ne sonuç verdiğini görün.
1. Aşağıdaki kodu çalıştırın ve neye yol açtığını görün.
✅ Bu kodu yerel bir Python kurulumunda çalıştırmanız önerilir! (kod bloğu 3)
✅ Bu kodu yerel Python kurulumunda çalıştırmanız tercih edilir! (kod bloğu 3)
```python
env.reset()
@ -52,11 +72,11 @@ Ortamın nasıl çalıştığını görmek için 100 adımlık kısa bir simüla
1. Simülasyon sırasında, nasıl hareket edeceğimize karar vermek için gözlemler almamız gerekiyor. Aslında, step fonksiyonu mevcut gözlemleri, bir ödül fonksiyonunu ve simülasyona devam etmenin mantıklı olup olmadığını gösteren bir done bayrağını döndürür: (kod bloğu 4)
1. Simülasyon esnasında, nasıl hareket edeceğimize karar vermek için gözlemler almalıyız. Aslında step fonksiyonu mevcut gözlemleri, ödül fonksiyonunu ve simülasyonun devam ettirilip ettirilmemesi gerektiğini gösteren done bayrağını döndürür: (kod bloğu 4)
```python
env.reset()
@ -69,7 +89,7 @@ Ortamın nasıl çalıştığını görmek için 100 adımlık kısa bir simüla
env.close()
```
Notebook çıktısında buna benzer bir şey göreceksiniz:
Defter çıktısında aşağıdaki gibi bir şey göreceksiniz:
@ -83,10 +103,10 @@ Ortamın nasıl çalıştığını görmek için 100 adımlık kısa bir simüla
```
Simülasyonun her adımında döndürülen gözlem vektörü şu değerleri içerir:
- Kartın pozisyonu
- Kartın hızı
- Arabacığın pozisyonu
- Arabacığın hız vektörü
- Direğin açısı
- Direğin dönüş hızı
- Direğin dönme hızı
1. Bu sayıların minimum ve maksimum değerlerini alın: (kod bloğu 5)
@ -95,30 +115,30 @@ Ortamın nasıl çalıştığını görmek için 100 adımlık kısa bir simüla
print(env.observation_space.high)
```
Ayrıca, her simülasyon adımında ödül değerinin her zaman 1 olduğunu fark edebilirsiniz. Bunun nedeni, amacımızın mümkün olduğunca uzun süre hayatta kalmak, yani direği makul bir dikey pozisyonda en uzun süre tutmak olmasıdır.
Ayrıca her simülasyon adımında ödülün daima 1 olduğunu görebilirsiniz. Bunun sebebi hedefimizin mümkün olduğunca uzun yaşamak, yani direği makul bir dik pozisyonda olabildiğince uzun tutmak olmasıdır.
✅ Aslında, CartPole simülasyonu, 100 ardışık deneme boyunca ortalama 195 ödül almayı başardığımızda çözülmüş kabul edilir.
✅ Aslında, CartPole simülasyonu, 100 ardışık denemde ortalama 195 ödüle ulaşılırsa çözüldü olarak kabul edilir.
## Durum Ayrıklaştırma
## Durumun kesik hale getirilmesi
Q-Öğrenme'de, her durumda ne yapılacağını tanımlayan bir Q-Tablosu oluşturmamız gerekiyor. Bunu yapabilmek için, durumun **ayrık** olması, daha doğrusu, sonlu sayıda ayrık değer içermesi gerekir. Bu nedenle, gözlemlerimizi bir şekilde **ayrıklaştırmamız**, onları sonlu bir durum kümesine eşlememiz gerekiyor.
Q-Öğrenmede, her durumda ne yapılacağını tanımlayan Q-Tablosu oluşturmalıyız. Bunu yapabilmek için, durumun **kesikli** olması gerekir, yani sonlu sayıda kesikli değeri içermelidir. Bu nedenle gözlemlerimizi finİt bir dizi duruma eşleyerek bir şekilde **kesikli hale getirmemiz** gerekir.
Bunu yapmanın birkaç yolu vardır:
Bunun birkaç yolu vardır:
- **Aralıklara bölmek**. Belirli bir değerin aralığını biliyorsak, bu aralığı bir dizi **aralığa** bölebilir ve ardından değeri ait olduğu aralık numarasıyla değiştirebiliriz. Bu, numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) yöntemi kullanılarak yapılabilir. Bu durumda, durum boyutunu kesin olarak bileceğiz, çünkü dijitalleştirme için seçtiğimiz aralık sayısına bağlı olacaktır.
- **Bölgelere ayırmak**. Belirli bir değerin aralığını biliyorsak, bu aralığı birkaç **bölgeye** ayırabilir ve ardından değeri ait olduğu bölge numarası ile değiştirebiliriz. Bu numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) metodu ile yapılabilir. Bu durumda durum boyutunu tam olarak biliriz çünkü seçtiğimiz dijitalizasyon bölgelerinin sayısına bağlıdır.
✅ Değerleri belirli bir sonlu aralığa (örneğin, -20 ile 20 arasında) getirmek için doğrusal interpolasyon kullanabilir ve ardından sayıları yuvarlayarak tam sayılara dönüştürebiliriz. Bu, durum boyutunun büyüklüğü üzerinde biraz daha az kontrol sağlar, özellikle de giriş değerlerinin kesin aralıklarını bilmiyorsak. Örneğin, bizim durumumuzda 4 değerden 2'sinin üst/alt sınırları yoktur, bu da sonsuz sayıda duruma yol açabilir.
✅ Değerleri sonlu bir aralığa (örneğin -20 ile 20 arası) getirmek için lineer enterpolasyon kullanabiliriz, ardından sayıları yuvarlayarak tam sayılara dönüştürebiliriz. Bu, özellikle giriş değerlerinin tam aralıklarını bilmiyorsak durum boyutunu tam kontrol etmede biraz daha az esneklik sağlar. Örneğin, bizim durumumuzda 4 değerden 2'sinin üst/alt sınırları yoktur, bu da sonsuz sayıda durum olmasına yol açabilir.
Bizim örneğimizde ikinci yaklaşımı kullanacağız. Daha sonra fark edeceğiniz gibi, tanımsız üst/alt sınırlara rağmen, bu değerler nadiren belirli sonlu aralıkların dışına çıkar, bu nedenle aşırı değerlerle durumlar çok nadir olacaktır.
Örneğimizde, ikinci yaklaşımı kullanacağız. Daha sonra fark edebileceğiniz gibi, tanımsız üst/alt sınırlarına rağmen, bu değerler nadiren belirli sonlu aralıkların dışına çıkar, bu nedenle aşırı değerli durumlar çok nadir olacaktır.
1. İşte modelimizden gözlemi alacak ve 4 tam sayı değerinden oluşan bir tuple üretecek fonksiyon: (kod bloğu 6)
1. Modelimizden aldığı gözlemi alıp 4 tam sayıdan oluşan bir tuple döndürecek fonksiyon: (kod bloğu 6)
1. Aralıklar kullanarak başka bir ayrıklaştırma yöntemini de keşfedelim: (kod bloğu 7)
1. Bölgelere ayırma yöntemini kullanarak başka bir kesik hale getirme yöntemi de keşfedelim: (kod bloğu 7)
```python
def create_bins(i,num):
@ -126,17 +146,17 @@ Bizim örneğimizde ikinci yaklaşımı kullanacağız. Daha sonra fark edeceği
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # her parametre için değer aralıkları
nbins = [20,20,10,10] # her parametre için kutu sayısı
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. Şimdi kısa bir simülasyon çalıştıralım ve bu ayrık ortam değerlerini gözlemleyelim. `discretize` ve `discretize_bins` yöntemlerini denemekten çekinmeyin ve aralarında bir fark olup olmadığını görün.
1. Kısa bir simülasyon yapalım ve bu kesikli ortam değerlerine bakalım. Her iki fonksiyonu da deneyip arada fark olup olmadığını gözlemleyebilirsiniz.
✅ discretize_bins, 0 tabanlıolan aralık numarasını döndürür. Bu nedenle, giriş değişkeninin 0 civarındaki değerleri için aralığın ortasındaki numarayı (10) döndürür. Discretize'de, çıktı değerlerinin aralığıyla ilgilenmedik, onların negatif olmasına izin verdik, bu nedenle durum değerleri kaydırılmadı ve 0, 0'a karşılık gelir. (kod bloğu 8)
✅ discretize_bins, 0 tabanlıbölge numarasını döndürür. Bu nedenle giriş değişkeni 0 civarında olanlar için aralığın ortasından bir sayı (10) verir. discretize'de ise çıktı değerlerinin aralığı ile ilgilenmedik, negatif olabilir, bu yüzden durum değerleri kaydırılmaz ve 0, 0'a karşılık gelir. (kod bloğu 8)
```python
env.reset()
@ -150,15 +170,15 @@ Bizim örneğimizde ikinci yaklaşımı kullanacağız. Daha sonra fark edeceği
env.close()
```
✅ Ortamın nasıl çalıştığını görmek istiyorsanız, env.render ile başlayan satırı yorumdan çıkarabilirsiniz. Aksi takdirde, bunu arka planda çalıştırabilirsiniz, bu daha hızlıdır. Q-Öğrenme sürecimiz sırasında bu "görünmez" yürütmeyi kullanacağız.
✅ Ortamın nasıl çalıştığını görmek isterseniz env.render ile başlayan satırı açabilirsiniz. Aksi halde arka planda çalıştırabilirsiniz, bu daha hızlıdır. Q-Öğrenme sürecimiz boyunca bu "görünmez" çalıştırmayı kullanacağız.
## Q-Tablosu Yapısı
## Q-Tablo yapısı
Önceki dersimizde, durum 0'dan 8'e kadar olan basit bir sayı çiftiydi ve bu nedenle Q-Tablosunu 8x8x2 şekline sahip bir numpy tensörü ile temsil etmek uygundu. Aralık ayrıklaştırmasını kullanırsak, durum vektörümüzün boyutu da bilinir, bu nedenle aynı yaklaşımı kullanabilir ve durumu 20x20x10x10x2 şeklinde bir dizi ile temsil edebiliriz (burada 2, eylem alanının boyutudur ve ilk boyutlar gözlem alanındaki her parametre için seçtiğimiz aralık sayısına karşılık gelir).
Önceki dersimizde durum, 0 ile 8 arasında basit bir sayı çiftiydi, bu yüzden Q-Tablosunu 8x8x2 şekline sahip numpy tensörü olarak temsil etmek uygundu. Bölgelere ayırma kullanırsak durum vektörünün boyutu da bilinir, aynı yaklaşımı kullanabiliriz ve durumu 20x20x10x10x2 şekline sahip bir dizi olarak gösterebiliriz (burada 2, eylem uzayının boyutu ve diğer boyutlar gözlem uzayındaki parametreler için seçilen bölge sayısına karşılık gelir).
Ancak, bazen gözlem alanının kesin boyutları bilinmez. `discretize` fonksiyonu durumunda, durumumuzun belirli sınırlar içinde kalacağından asla emin olamayabiliriz, çünkü bazı orijinal değerler sınırlı değildir. Bu nedenle, biraz farklı bir yaklaşım kullanacağız ve Q-Tablosunu bir sözlükle temsil edeceğiz.
Ancak bazen gözlem uzayının kesin boyutları bilinmez. `discretize` fonksiyonunda durumumuz belirli limitler içinde kalmayabilir, çünkü bazı orijinal değerler sınırlı değildir. Bu nedenle, Q-Tablosunu sözlük olarak temsil ederek biraz farklı bir yaklaşım kullanacağız.
1. *(state,action)* çiftini sözlük anahtarı olarak kullanın ve değer Q-Tablosu giriş değerine karşılık gelir. (kod bloğu 9)
1. * (durum, eylem) * çiftini sözlük anahtarı olarak kullanın, değer ise Q-Tablo girişi olacaktır. (kod bloğu 9)
```python
Q = {}
@ -168,38 +188,38 @@ Ancak, bazen gözlem alanının kesin boyutları bilinmez. `discretize` fonksiyo
return [Q.get((state,a),0) for a in actions]
```
Burada ayrıca, bir duruma karşılık gelen tüm olası eylemler için Q-Tablosu değerlerinin bir listesini döndüren `qvalues()` fonksiyonunu tanımlıyoruz. Giriş Q-Tablosunda mevcut değilse, varsayılan olarak 0 döndüreceğiz.
Burada ayrıca verilen durum için tüm olası eylemleri karşılayan Q-Tablo değerlerinin listesini döndüren `qvalues()` fonksiyonunu tanımlıyoruz. Eğer Q-Tabloda giriş yoksa varsayılan olarak 0 döndüreceğiz.
## Q-Öğrenmeye Başlayalım
## Q-Öğrenme başlıyor
Şimdi Peter'a dengeyi öğretmeye hazırız!
1. İlk olarak, bazı hiperparametreler belirleyelim: (kod bloğu 10)
1. Öncelikle bazı hiperparametreleri ayarlayalım: (kod bloğu 10)
```python
# hyperparameters
# hiperparametreler
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Burada, `alpha`, Q-Tablosunun mevcut değerlerini her adımda ne ölçüde ayarlamamız gerektiğini tanımlayan **öğrenme oranıdır**. Önceki derste 1 ile başladık ve ardından `alpha` değerlerini eğitim sırasında daha düşük değerlere düşürdük. Bu örnekte basitlik adına sabit tutacağız ve daha sonra `alpha` değerlerini ayarlamayı deneyebilirsiniz.
Burada`alpha`, her adımda Q-Tablodaki mevcut değerlerin ne ölçüde ayarlanacağını belirleyen **öğrenme oranıdır**. Önceki derste 1 ile başlıyorduk ve eğitim sırasında `alpha` değerini düşürüyorduk. Bu örnekte basitlik için sabit tutacağız, ancak daha sonra `alpha` değerleriyle denemeler yapabilirsiniz.
`gamma`, gelecekteki ödülü mevcut ödüle göre ne ölçüde önceliklendirmemiz gerektiğini gösteren **indirim faktörüdür**.
`gamma`, gelecekteki ödülü mevcut ödüle tercih etme derecesini gösteren **indirim faktörüdür**.
`epsilon`, keşif/istismar faktörüdür ve keşfi mi yoksa istismarı mı tercih etmemiz gerektiğini belirler. Algoritmamızda, `epsilon` yüzdesinde bir sonraki eylemi Q-Tablosu değerlerine göre seçeceğiz ve kalan durumlarda rastgele bir eylem gerçekleştireceğiz. Bu, daha önce hiç görmediğimiz arama alanı bölgelerini keşfetmemizi sağlayacaktır.
`epsilon`, keşif/sömürü faktörüdür ve keşfi sömürüye tercih edip etmeyeceğimizi belirler. Algoritmamızda, `epsilon` yüzdesi kadar durumda Q-Tablosuna göre sonraki eylemi seçeceğiz, kalan durumda ise rastgele eylem gerçekleştireceğiz. Böylece daha önce keşfetmediğimiz arama alanlarını keşfetme şansımız olur.
✅ Denge açısından - rastgele bir eylem seçmek (keşif), yanlış yönde rastgele bir darbe gibi davranır ve direk bu "hatalardan" dengeyi nasıl kurtaracağını öğrenmek zorunda kalır.
✅ Dengeleme açısından, rastgele eylem seçmek (keşif), yanlış yöne rastgele bir hamle yapmak gibi olur ve direk bu "hatalardan" nasıl dengeyi yeniden sağlayacağını öğrenir.
### AlgoritmayıGeliştirme
### Algoritmayıgeliştirin
Önceki dersten algoritmamıza iki iyileştirme yapabiliriz:
- **Ortalama kümülatif ödülü hesaplama**, bir dizi simülasyon boyunca. İlerlemeyi her 5000 iterasyonda yazdıracağız ve kümülatif ödülümüzü bu süre boyunca ortalama alacağız. Bu, 195 puandan fazla alırsak - problemi çözmüş kabul edebiliriz, hatta gereken kaliteden daha yüksek bir şekilde.
- Belirli bir sayıda simülasyondaki **ortalama kümülatif ödülü hesaplayın**. Her 5000 iterasyonda ilerlemeyi yazdıracağız ve o süre boyunca kümülatif ödüllerimizi ortalayacağız. Yani 195 puandan fazla alırsak problemi çözülmüş sayabiliriz, hatta gerekenin üzerinde kaliteyle.
- **Maksimum ortalama kümülatif sonucu hesaplama**, `Qmax`, ve bu sonuca karşılık gelen Q-Tablosunu saklayacağız. Eğitimi çalıştırdığınızda, bazen ortalama kümülatif sonucun düşmeye başladığını fark edeceksiniz ve bu durumda, Q-Tablosunda durumu daha kötü hale getiren değerlerle zaten öğrenilmiş değerleri "bozabiliriz".
- **Maksimum ortalama kümülatif sonucu**, `Qmax` hesaplayacağız ve bu sonuca karşılık gelen Q-Tablosunu saklayacağız. Eğitimi çalıştırdığınızda bazen ortalama kümülatif sonucun azaldığını gözlemlersiniz ve eğitim sırasında gözlemlenen en iyi modele karşılık gelen Q-Tablosu değerlerini korumak isteriz.
1. Her simülasyondaki kümülatif ödülleri `rewards` vektöründe toplayın ve daha sonra grafik çizmek için kullanın. (kod bloğu 11)
1. Grafik çizmek için her simülasyondaki kümülatif ödülleri `rewards` vektöründe toplayın. (kod bloğu 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Ancak, bazen gözlem alanının kesin boyutları bilinmez. `discretize` fonksiyo
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == simülasyonu yap ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# sömürü - Q-Tablo olasılıklarına göre eylemi seç
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# keşif - rastgele eylemi seç
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Ancak, bazen gözlem alanının kesin boyutları bilinmez. `discretize` fonksiyo
@ -240,25 +260,25 @@ Ancak, bazen gözlem alanının kesin boyutları bilinmez. `discretize` fonksiyo
cum_rewards=[]
```
Bu sonuçlardan fark edebileceğiniz şeyler:
Bu sonuçlardan fark edebileceğiniz:
- **Hedefimize çok yakınız**. 100+ ardışık simülasyon çalıştırması boyunca 195 kümülatif ödül alma hedefimize çok yakınız veya aslında bunu başarmış olabiliriz! Daha küçük sayılar alsak bile, hala bilmiyoruz, çünkü 5000 çalıştırma boyunca ortalama alıyoruz ve resmi kriterde yalnızca 100 çalıştırma gerekiyor.
- **Hedefimize yakınız**. 100'den fazla ardışık simülasyonda 195 kümülatif ödül alma hedefine çok yakınız veya belki de tam olarak başardık! Daha düşük sayılar alsak bile henüz bilmiyoruz, çünkü ortalamayı 5000 koşu üzerinden alıyoruz ve resmi kriterde sadece 100 koşu isteniyor.
- **Ödül düşmeye başlıyor**. Bazen ödül düşmeye başlar, bu da Q-Tablosunda zaten öğrenilmiş değerleri daha kötü hale getiren değerlerle "bozabileceğimiz" anlamına gelir.
- **Ödül düşmeye başlıyor**. Bazen ödül azalmaya başlıyor, bu da Q-Tablosundaki daha önce öğrenilmiş değerleri durumu kötüleştirenlerle "bozabileceğimiz" anlamına geliyor.
Bu gözlem, eğitim ilerlemesini grafikle gösterdiğimizde daha net bir şekilde görülebilir.
Bu gözlem, eğitim ilerlemesini grafikle gösterdiğimizde daha net görünür.
## Eğitim İlerlemesini Grafikle Gösterme
## Eğitim İlerlemesini Grafikle Görüntüleme
Eğitim sırasında, her iterasyondaki kümülatif ödül değerini `rewards` vektörüne topladık. İşte bunu iterasyon numarasına karşı grafikle gösterdiğimizde nasıl göründüğü:
Eğitim sırasında, her iterasyondaki kümülatif ödül değerlerini `rewards` vektörüne kaydettik. Burada iterasyon numarasına karşı grafiği:
Bu grafikten bir şey söylemek mümkün değil, çünkü stokastik eğitim sürecinin doğası gereği eğitim oturumlarının uzunluğu büyük ölçüde değişiyor. Bu grafiği daha anlamlı hale getirmek için, bir dizi deney boyunca **hareketli ortalama** hesaplayabiliriz, örneğin 100. Bu, `np.convolve` kullanılarak kolayca yapılabilir: (kod bloğu 12)
Bu grafikle bir şey söylemek mümkün değil, çünkü stohastik eğitim sürecinin doğası gereği eğitim süresi çok değişkendir. Bu grafiğin daha anlamlı olması için deneylerin üzerinde **koşan ortalama** hesaplayabiliriz, örneğin 100 deney üzerinden. Bu, `np.convolve` ile kolayca yapılabilir: (kod bloğu 12)
Öğrenmeyi daha kararlı hale getirmek için hiperparametrelerimizden bazılarını eğitim sırasında değiştirmek mantıklıdır. Özellikle:
- **Öğrenme oranı** `alpha` için başlangıçta 1'e yakın değerler ile başlayabilir ve sonra bu parametreyi azaltabiliriz. Zamanla Q-Tablosunda iyi olasılık değerleri elde edeceğiz, dolayısıyla onları sadece biraz ayarlamalı, tamamen yenileriyle değiştirmemeliyiz.
## Hiperparametreleri Değiştirme
- **Epsilon'u artırmak**. `epsilon`'u yavaşça artırmak isteyebiliriz, böylece keşif daha az, sömürü daha fazla olur. Muhtemelen düşük `epsilon` ile başlayıp neredeyse 1'e kadar çıkarız.
Öğrenmeyi daha istikrarlı hale getirmek için, eğitim sırasında bazı hiperparametrelerimizi ayarlamak mantıklı olabilir. Özellikle:
> **Görev 1**: Hiperparametre değerleriyle oynayın ve daha yüksek kümülatif ödül elde edip edemediğinizi görün. 195'in üzerinde alıyor musunuz?
- **Öğrenme oranı** için, `alpha`, 1'e yakın değerlerle başlayabilir ve ardından bu parametreyi düşürmeye devam edebiliriz. Zamanla, Q-Tablosunda iyi olasılık değerleri elde edeceğiz ve bu nedenle onları hafifçe ayarlamalı, tamamen yeni değerlerle üzerine yazmamalıyız.
- **Epsilon'u artırma**. `epsilon`'u yavaşça artırmak isteyebiliriz, böylece daha az keşif yapıp daha fazla istismar yapabiliriz. Muhtemelen daha düşük bir `epsilon` değeriyle başlamak ve neredeyse 1'e kadar çıkarmak mantıklı olacaktır.
> **Görev 1**: Hiperparametre değerleriyle oynayın ve daha yüksek toplam ödül elde edip edemeyeceğinizi görün. 195'in üzerine çıkabiliyor musunuz?
> **Görev 2**: Problemi resmi olarak çözmek için, 100 ardışık çalışmada 195 ortalama ödül almanız gerekiyor. Bunu eğitim sırasında ölçün ve problemi resmi olarak çözdüğünüzden emin olun!
> **Görev 2**: Problemi resmi olarak çözmek için, 100 ardışık denemede ortalama 195 ödül almanız gerekiyor. Bunu eğitim sırasında ölçün ve problemin resmi olarak çözüldüğünden emin olun!
## Sonucu eylemde görmek
## Sonucu eylem halinde görmek
Eğitilmiş modelin nasıl davrandığını görmek ilginç olurdu. Simülasyonu çalıştıralım ve eğitim sırasında olduğu gibi aynı eylem seçme stratejisini izleyelim, Q-Tablosundaki olasılık dağılımına göre örnekleme yapalım: (kod bloğu 13)
Eğitilmiş modelin nasıl davrandığını gerçekten görmek ilginç olurdu. Simülasyonu çalıştıralım ve eğitim sırasında kullandığımız aynı eylem seçme stratejisini izleyelim, Q-Tablosundaki olasılık dağılımına göre örneklem yapalım: (kod bloğu 13)
```python
obs = env.reset()
@ -295,30 +318,32 @@ while not done:
env.close()
```
Şuna benzer bir şey görmelisiniz:
Şunun gibi bir şey görmelisiniz:

> **Görev 3**: Burada, Q-Tablosunun son kopyasını kullanıyorduk, ancak bu en iyi olanı olmayabilir. Unutmayın ki en iyi performans gösteren Q-Tablosunu `Qbest` değişkenine kaydettik! `Qbest`'i `Q` üzerine kopyalayarak en iyi performans gösteren Q-Tablosuyla aynı örneği deneyin ve farkı fark edip etmediğinizi görün.
> **Görev 3**: Burada en son kopya Q-Tablosunu kullanıyorduk, bu en iyi olanı olmayabilir. En iyi performans gösteren Q-Tablosunu `Qbest` değişkenine kaydettiğimizi unutmayın! Aynı örneği en iyi performans gösteren Q-Tablosu ile deneyin, `Qbest`i `Q` üzerine kopyalayarak farkı görüp görmediğinizi kontrol edin.
> **Görev 4**: Burada her adımda en iyi eylemi seçmiyorduk, bunun yerine ilgili olasılık dağılımıyla örnekleme yapıyorduk. Her zaman en iyi eylemi, en yüksek Q-Tablosu değerine sahip olanı seçmek daha mantıklı olur mu? Bu, en yüksek Q-Tablosu değerine karşılık gelen eylem numarasını bulmak için `np.argmax` fonksiyonu kullanılarak yapılabilir. Bu stratejiyi uygulayın ve dengelemeyi iyileştirip iyileştirmediğini görün.
> **Görev 4**: Burada her adımda en iyi eylemi seçmiyorduk, ancak karşılık gelen olasılık dağılımıyla örneklem yapıyorduk. Her zaman en yüksek Q-Tablo değerine sahip olan en iyi eylemi seçmek daha mantıklı olur mu? Bu, `np.argmax` fonksiyonunu kullanarak en yüksek Q-Tablo değerine karşılık gelen eylem numarasını bulmakla yapılabilir. Bu stratejiyi uygulayın ve dengelemenin iyileşip iyileşmediğine bakın.
Artık ajanları, oyunun istenen durumunu tanımlayan bir ödül fonksiyonu sağlayarak ve arama alanını akıllıca keşfetme fırsatı vererek iyi sonuçlar elde etmeleri için nasıl eğiteceğimizi öğrendik. Q-Öğrenme algoritmasını, ayrık ve sürekli ortamlar durumunda, ancak ayrık eylemlerle başarıyla uyguladık.
Artık, oyunun istenen durumunu tanımlayan bir ödül fonksiyonu sağlayarak ve arama alanını akıllıca keşfetmelerine fırsat vererek, ajanları iyi sonuçlar elde edecek şekilde nasıl eğiteceğimizi öğrendik. Q-Öğrenme algoritmasını hem ayrık hem de sürekli ortamlarda, ancak ayrık eylemlerle başarıyla uyguladık.
Eylem durumunun da sürekli olduğu ve gözlem alanının çok daha karmaşık olduğu, örneğin Atari oyun ekranından bir görüntü gibi durumları incelemek de önemlidir. Bu tür problemler için genellikle iyi sonuçlar elde etmek amacıyla daha güçlü makine öğrenimi tekniklerini, örneğin sinir ağlarını kullanmamız gerekir. Bu daha ileri düzey konular, yaklaşan daha gelişmiş AI kursumuzun konusudur.
Eylem durumunun da sürekli olduğu ve gözlem alanının Atari oyun ekranından gelen görüntü gibi çok daha karmaşık olduğu durumları incelemek de önemlidir. Bu tür problemlerde genellikle iyi sonuçlar elde etmek için sinir ağları gibi daha güçlü makine öğrenme tekniklerini kullanmamız gerekir. Bu daha ileri konular, yaklaşmakta olan daha ileri seviye Yapay Zeka dersimizin konusudur.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Feragatname**:
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluğu sağlamak için çaba göstersek de, otomatik çeviriler hata veya yanlışlıklar içerebilir. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.