Il processo di costruzione, utilizzo e manutenzione dei modelli di machine learning e dei dati che utilizzano è molto diverso rispetto a molti altri flussi di lavoro di sviluppo. In questa lezione, demistificheremo il processo e delineeremo le principali tecniche che devi conoscere. Imparerai a:
Il processo di costruzione, utilizzo e manutenzione di modelli di machine learning e dei dati che utilizzano è un processo molto diverso da molti altri flussi di lavoro di sviluppo. In questa lezione, demistificheremo il processo e delineeremo le principali tecniche che devi conoscere. Tu:
- Comprendere i processi alla base del machine learning a un livello generale.
- Esplorare concetti di base come "modelli", "previsioni" e "dati di addestramento".
- Comprenderai i processi alla base del machine learning a un livello alto.
- Esplorerai concetti di base come 'modelli', 'predizioni' e 'dati di addestramento'.
[](https://youtu.be/4NGM0U2ZSHU "ML per principianti - Tecniche di Machine Learning")
[](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Clicca sull'immagine sopra per un breve video che illustra questa lezione.
> 🎥 Clicca sull'immagine sopra per un breve video che spiega questa lezione.
## Introduzione
A un livello generale, l'arte di creare processi di machine learning (ML) si compone di diversi passaggi:
A un livello alto, l'arte di creare processi di machine learning (ML) è composta da diversi passi:
1. **Decidere la domanda**. La maggior parte dei processi di ML inizia ponendo una domanda che non può essere risolta con un semplice programma condizionale o un motore basato su regole. Queste domande spesso riguardano previsioni basate su una raccolta di dati.
2. **Raccogliere e preparare i dati**. Per rispondere alla tua domanda, hai bisogno di dati. La qualità e, a volte, la quantità dei tuoi dati determineranno quanto bene potrai rispondere alla domanda iniziale. La visualizzazione dei dati è un aspetto importante di questa fase. Questa fase include anche la suddivisione dei dati in un gruppo di addestramento e uno di test per costruire un modello.
3. **Scegliere un metodo di addestramento**. A seconda della tua domanda e della natura dei tuoi dati, devi scegliere come addestrare un modello per riflettere al meglio i dati e fare previsioni accurate. Questa parte del processo di ML richiede competenze specifiche e, spesso, una notevole quantità di sperimentazione.
4. **Addestrare il modello**. Utilizzando i tuoi dati di addestramento, userai vari algoritmi per addestrare un modello a riconoscere schemi nei dati. Il modello potrebbe utilizzare pesi interni che possono essere regolati per privilegiare alcune parti dei dati rispetto ad altre, al fine di costruire un modello migliore.
5. **Valutare il modello**. Utilizzi dati mai visti prima (i tuoi dati di test) dal set raccolto per verificare le prestazioni del modello.
6. **Ottimizzazione dei parametri**. In base alle prestazioni del modello, puoi ripetere il processo utilizzando parametri o variabili diversi che controllano il comportamento degli algoritmi utilizzati per addestrare il modello.
7. **Prevedere**. Usa nuovi input per testare l'accuratezza del modello.
1. **Decidi la domanda**. La maggior parte dei processi di ML inizia con una domanda che non può essere risposta da un semplice programma condizionale o da un motore basato su regole. Queste domande spesso ruotano attorno a predizioni basate su una raccolta di dati.
2. **Raccogli e prepara i dati**. Per poter rispondere alla tua domanda, hai bisogno di dati. La qualità e, a volte, la quantità dei tuoi dati determineranno quanto bene potrai rispondere alla tua domanda iniziale. Visualizzare i dati è un aspetto importante di questa fase. Questa fase include anche la suddivisione dei dati in un gruppo di addestramento e uno di test per costruire un modello.
3. **Scegli un metodo di addestramento**. A seconda della tua domanda e della natura dei tuoi dati, devi scegliere come vuoi addestrare un modello per riflettere al meglio i tuoi dati e fare predizioni accurate. Questa è la parte del tuo processo di ML che richiede competenze specifiche e, spesso, un considerevole numero di sperimentazioni.
4. **Addestra il modello**. Usando i tuoi dati di addestramento, utilizzerai vari algoritmi per addestrare un modello a riconoscere pattern nei dati. Il modello potrebbe sfruttare pesi interni che possono essere regolati per privilegiare certe parti dei dati rispetto ad altre per costruire un modello migliore.
5. **Valuta il modello**. Utilizzi dati che non ha mai visto prima (i dati di test) dal tuo set raccolto per vedere come il modello sta performando.
6. **Ottimizzazione dei parametri**. Basandoti sulle prestazioni del tuo modello, puoi ripetere il processo utilizzando parametri diversi, o variabili, che controllano il comportamento degli algoritmi usati per addestrare il modello.
7. **Predici**. Usa nuovi input per testare la precisione del tuo modello.
## Quale domanda porre
I computer sono particolarmente abili nel scoprire schemi nascosti nei dati. Questa capacità è molto utile per i ricercatori che hanno domande su un determinato dominio che non possono essere facilmente risolte creando un motore basato su regole condizionali. Dato un compito attuariale, ad esempio, un data scientist potrebbe essere in grado di costruire regole artigianali sulla mortalità dei fumatori rispetto ai non fumatori.
I computer sono particolarmente abili nel scoprire pattern nascosti nei dati. Questa utilità è molto utile per i ricercatori che hanno domande su un determinato dominio che non possono essere facilmente risposte creando un motore basato su regole condizionali. Dato un compito attuariale, per esempio, uno scienziato dei dati potrebbe essere in grado di costruire regole artigianali riguardo alla mortalità di fumatori vs non fumatori.
Quando però vengono introdotte molte altre variabili, un modello di ML potrebbe dimostrarsi più efficiente nel prevedere i tassi di mortalità futuri basandosi sulla storia sanitaria passata. Un esempio più allegro potrebbe essere fare previsioni meteorologiche per il mese di aprile in una determinata località basandosi su dati che includono latitudine, longitudine, cambiamenti climatici, vicinanza all'oceano, schemi delle correnti a getto e altro.
Quando molte altre variabili sono portate nell'equazione, tuttavia, un modello ML potrebbe rivelarsi più efficiente per predire i tassi di mortalità futuri basati sulla storia sanitaria passata. Un esempio più allegro potrebbe essere fare previsioni meteorologiche per il mese di aprile in una data località basandosi su dati che includono latitudine, longitudine, cambiamento climatico, prossimità all'oceano, schemi del getto d'aria e altro.
✅ Questa [presentazione](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sui modelli meteorologici offre una prospettiva storica sull'uso del ML nell'analisi meteorologica.
✅ Questa [presentazione](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sui modelli meteo offre una prospettiva storica sull'uso del ML nell'analisi meteorologica.
## Attività preliminari alla costruzione
## Compiti preliminari alla costruzione
Prima di iniziare a costruire il tuo modello, ci sono diverse attività che devi completare. Per testare la tua domanda e formulare un'ipotesi basata sulle previsioni di un modello, devi identificare e configurare diversi elementi.
Prima di iniziare a costruire il tuo modello, ci sono diversi compiti che devi completare. Per testare la tua domanda e formare un'ipotesi basata sulle predizioni di un modello, devi identificare e configurare diversi elementi.
### Dati
Per rispondere alla tua domanda con un certo grado di certezza, hai bisogno di una buona quantità di dati del tipo giusto. Ci sono due cose che devi fare a questo punto:
Per poter rispondere alla tua domanda con una certa certezza, hai bisogno di una buona quantità di dati del tipo giusto. Ci sono due cose che devi fare a questo punto:
- **Raccogliere i dati**. Tenendo a mente la lezione precedente sull'equità nell'analisi dei dati, raccogli i tuoi dati con attenzione. Sii consapevole delle fonti di questi dati, di eventuali bias intrinseci e documenta la loro origine.
- **Preparare i dati**. Ci sono diversi passaggi nel processo di preparazione dei dati. Potresti dover unire i dati e normalizzarli se provengono da fonti diverse. Puoi migliorare la qualità e la quantità dei dati attraverso vari metodi, come convertire stringhe in numeri (come facciamo in [Clustering](../../5-Clustering/1-Visualize/README.md)). Potresti anche generare nuovi dati basandoti sugli originali (come facciamo in [Classificazione](../../4-Classification/1-Introduction/README.md)). Puoi pulire e modificare i dati (come faremo prima della lezione sull'[App Web](../../3-Web-App/README.md)). Infine, potresti anche doverli randomizzare e mescolare, a seconda delle tecniche di addestramento.
- **Raccogliere dati**. Tenendo a mente la lezione precedente sull'equità nell'analisi dei dati, raccogli i tuoi dati con cura. Sii consapevole delle fonti di questi dati, di eventuali bias intrinseci e documenta la loro origine.
- **Preparare i dati**. Ci sono diversi passi nel processo di preparazione dei dati. Potresti dover raccogliere dati e normalizzarli se provengono da fonti diverse. Puoi migliorare la qualità e la quantità dei dati tramite vari metodi come convertire stringhe in numeri (come facciamo in [Clustering](../../5-Clustering/1-Visualize/README.md)). Potresti anche generare nuovi dati, basati su quelli originali (come facciamo in [Classification](../../4-Classification/1-Introduction/README.md)). Puoi pulire e modificare i dati (come faremo prima della lezione [Web App](../../3-Web-App/README.md)). Infine, potresti anche doverli randomizzare e mescolarli, a seconda delle tecniche di addestramento.
✅ Dopo aver raccolto e processato i tuoi dati, prenditi un momento per verificare se la loro struttura ti permetterà di affrontare la domanda che intendi porre. Potrebbe essere che i dati non funzionino bene per il tuo compito, come scopriamo nelle lezioni su [Clustering](../../5-Clustering/1-Visualize/README.md)!
✅ Dopo aver raccolto e processato i tuoi dati, prenditi un momento per vedere se la loro forma ti permetterà di affrontare la tua domanda prevista. Potrebbe risultare che i dati non si comportino bene nel compito assegnato, come scopriamo nelle nostre lezioni di [Clustering](../../5-Clustering/1-Visualize/README.md)!
### Caratteristiche e Target
### Caratteristiche e Obiettivo
Una [caratteristica](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) è una proprietà misurabile dei tuoi dati. In molti dataset è espressa come intestazione di colonna, ad esempio 'data', 'dimensione' o 'colore'. La tua variabile caratteristica, solitamente rappresentata come `X` nel codice, rappresenta la variabile di input che verrà utilizzata per addestrare il modello.
Una [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) è una proprietà misurabile dei tuoi dati. In molti dataset è espressa come intestazione di colonna come 'data', 'dimensione' o 'colore'. La tua variabile feature, di solito rappresentata come `X` nel codice, rappresenta la variabile di input che sarà usata per addestrare un modello.
Un target è ciò che stai cercando di prevedere. Il target, solitamente rappresentato come `y` nel codice, rappresenta la risposta alla domanda che stai cercando di porre ai tuoi dati: a dicembre, quale **colore** di zucche sarà il più economico? A San Francisco, quali quartieri avranno il miglior **prezzo** immobiliare? A volte il target è anche chiamato attributo etichetta.
Un obiettivo è ciò che stai cercando di prevedere. L'obiettivo, di solito rappresentato come `y` nel codice, rappresenta la risposta alla domanda che stai cercando di porre ai tuoi dati: a dicembre, quali **colori** di zucche saranno i più economici? A San Francisco, quali quartieri avranno il miglior **prezzo** immobiliare? A volte l'obiettivo è anche chiamato attributo etichetta.
### Selezionare la variabile caratteristica
### Selezionare la variabile feature
🎓 **Selezione delle caratteristiche ed Estrazione delle caratteristiche** Come fai a sapere quale variabile scegliere quando costruisci un modello? Probabilmente attraverserai un processo di selezione delle caratteristiche o estrazione delle caratteristiche per scegliere le variabili giuste per il modello più performante. Tuttavia, non sono la stessa cosa: "L'estrazione delle caratteristiche crea nuove caratteristiche da funzioni delle caratteristiche originali, mentre la selezione delle caratteristiche restituisce un sottoinsieme delle caratteristiche." ([fonte](https://wikipedia.org/wiki/Feature_selection))
🎓 **Selezione e estrazione delle feature** Come si fa a sapere quale variabile scegliere quando si costruisce un modello? Probabilmente passerai attraverso un processo di selezione o estrazione delle feature per scegliere le variabili giuste per il modello più performante. Tuttavia, non sono la stessa cosa: "L'estrazione delle feature crea nuove feature da funzioni delle feature originali, mentre la selezione delle feature restituisce un sottoinsieme delle feature." ([fonte](https://wikipedia.org/wiki/Feature_selection))
### Visualizzare i dati
### Visualizza i tuoi dati
Un aspetto importante della cassetta degli attrezzi del data scientist è la capacità di visualizzare i dati utilizzando diverse librerie eccellenti come Seaborn o MatPlotLib. Rappresentare i dati visivamente potrebbe permetterti di scoprire correlazioni nascoste che puoi sfruttare. Le tue visualizzazioni potrebbero anche aiutarti a scoprire bias o dati sbilanciati (come scopriamo in [Classificazione](../../4-Classification/2-Classifiers-1/README.md)).
Un aspetto importante del toolkit dello scienziato dei dati è il potere di visualizzare i dati usando diverse ottime librerie come Seaborn o MatPlotLib. Rappresentare visivamente i tuoi dati potrebbe permetterti di scoprire correlazioni nascoste che puoi sfruttare. Le tue visualizzazioni potrebbero anche aiutarti a scoprire bias o dati sbilanciati (come scopriamo in [Classification](../../4-Classification/2-Classifiers-1/README.md)).
### Suddividere il dataset
### Suddividi il tuo dataset
Prima dell'addestramento, devi suddividere il tuo dataset in due o più parti di dimensioni disuguali che rappresentino comunque bene i dati.
- **Addestramento**. Questa parte del dataset viene adattata al tuo modello per addestrarlo. Questo set costituisce la maggior parte del dataset originale.
- **Test**. Un dataset di test è un gruppo indipendente di dati, spesso raccolto dai dati originali, che utilizzi per confermare le prestazioni del modello costruito.
- **Validazione**. Un set di validazione è un gruppo indipendente più piccolo di esempi che utilizzi per ottimizzare i parametri del modello o la sua architettura, al fine di migliorarlo. A seconda della dimensione dei tuoi dati e della domanda che stai ponendo, potresti non aver bisogno di costruire questo terzo set (come notiamo in [Previsioni di Serie Temporali](../../7-TimeSeries/1-Introduction/README.md)).
- **Addestramento**. Questa parte del dataset viene adattata al tuo modello per addestrarlo. Questo set costituisce la maggioranza del dataset originale.
- **Test**. Un dataset di test è un gruppo indipendente di dati, spesso raccolti dal dato originale, che usi per confermare le prestazioni del modello costruito.
- **Validazione**. Un set di validazione è un gruppo indipendente più piccolo di esempi che usi per ottimizzare gli iperparametri del modello, o la sua architettura, per migliorarlo. A seconda delle dimensioni dei tuoi dati e della domanda che stai ponendo, potresti non aver bisogno di costruire questo terzo set (come notiamo in [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
## Costruire un modello
Utilizzando i tuoi dati di addestramento, il tuo obiettivo è costruire un modello, o una rappresentazione statistica dei tuoi dati, utilizzando vari algoritmi per **addestrarlo**. Addestrare un modello lo espone ai dati e gli permette di fare supposizioni sugli schemi percepiti che scopre, valida e accetta o rifiuta.
Usando i tuoi dati di addestramento, il tuo obiettivo è costruire un modello, o una rappresentazione statistica dei tuoi dati, usando vari algoritmi per **addestrarlo**. Addestrare un modello lo espone ai dati e gli permette di fare assunzioni sui pattern percepiti che scopre, convalida e accetta o rifiuta.
### Decidere un metodo di addestramento
### Decidi un metodo di addestramento
A seconda della tua domanda e della natura dei tuoi dati, sceglierai un metodo per addestrarlo. Esaminando la [documentazione di Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - che utilizziamo in questo corso - puoi esplorare molti modi per addestrare un modello. A seconda della tua esperienza, potresti dover provare diversi metodi per costruire il miglior modello. È probabile che attraverserai un processo in cui i data scientist valutano le prestazioni di un modello fornendogli dati mai visti prima, verificando l'accuratezza, i bias e altri problemi che degradano la qualità, e selezionando il metodo di addestramento più appropriato per il compito.
A seconda della tua domanda e della natura dei tuoi dati, scegli un metodo per addestrarlo. Sfogliando la [documentazione di Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - che usiamo in questo corso - puoi esplorare molti modi di addestrare un modello. A seconda della tua esperienza, potresti dover provare diversi metodi per costruire il miglior modello. Probabilmente passerai attraverso un processo in cui gli scienziati dei dati valutano la prestazione di un modello alimentandolo con dati non visti prima, controllando l'accuratezza, il bias e altri problemi che degradano la qualità, e selezionando il metodo di addestramento più appropriato per il compito.
### Addestrare un modello
### Addestra un modello
Con i tuoi dati di addestramento, sei pronto per "adattarli" per creare un modello. Noterai che in molte librerie di ML troverai il codice 'model.fit' - è in questo momento che invii la tua variabile caratteristica come un array di valori (di solito 'X') e una variabile target (di solito 'y').
Munito dei tuoi dati di addestramento, sei pronto a 'adattarlo' per creare un modello. Noterai che in molte librerie ML trovi il codice 'model.fit' - è in questo momento che mandi la tua variabile feature come un array di valori (di solito 'X') e una variabile obiettivo (di solito 'y').
### Valutare il modello
### Valuta il modello
Una volta completato il processo di addestramento (può richiedere molte iterazioni, o 'epoche', per addestrare un modello grande), sarai in grado di valutare la qualità del modello utilizzando dati di test per misurarne le prestazioni. Questi dati sono un sottoinsieme dei dati originali che il modello non ha analizzato in precedenza. Puoi stampare una tabella di metriche sulla qualità del modello.
Una volta completato il processo di addestramento (può richiedere molte iterazioni, o 'epoche', per addestrare un modello grande), sarai in grado di valutare la qualità del modello usando dati di test per misurarne le prestazioni. Questi dati sono un sottoinsieme dei dati originali che il modello non ha analizzato in precedenza. Puoi stampare una tabella di metriche sulla qualità del tuo modello.
🎓 **Adattamento del modello**
🎓 **Model fitting**
Nel contesto del machine learning, l'adattamento del modello si riferisce all'accuratezza della funzione sottostante del modello mentre tenta di analizzare dati con cui non ha familiarità.
Nel contesto del machine learning, il model fitting si riferisce all'accuratezza della funzione sottostante del modello mentre tenta di analizzare dati con cui non è familiare.
🎓 **Underfitting** e **overfitting** sono problemi comuni che degradano la qualità del modello, poiché il modello si adatta troppo poco o troppo bene. Questo causa previsioni troppo allineate o troppo poco allineate con i dati di addestramento. Un modello overfit prevede i dati di addestramento troppo bene perché ha imparato troppo bene i dettagli e il rumore dei dati. Un modello underfit non è accurato poiché non riesce ad analizzare accuratamente né i dati di addestramento né quelli che non ha ancora "visto".
🎓 **Underfitting** e **overfitting** sono problemi comuni che degradano la qualità del modello, poiché il modello si adatta o troppo poco o troppo bene. Questo fa sì che il modello faccia predizioni troppo strettamente o troppo liberamente allineate con i dati di addestramento. Un modello overfit predice troppo bene i dati di addestramento perché ha imparato troppo bene i dettagli e il rumore dei dati. Un modello underfit non è accurato perché non può né analizzare accuratamente i dati di addestramento né i dati che non ha ancora 'visto'.
> Infografica di [Jen Looper](https://twitter.com/jenlooper)
## Ottimizzazione dei parametri
Una volta completato il tuo addestramento iniziale, osserva la qualità del modello e considera di migliorarlo regolando i suoi 'iperparametri'. Leggi di più sul processo [nella documentazione](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
Una volta completato il primo addestramento, osserva la qualità del modello e considera di migliorarlo modificando i suoi 'iperparametri'. Leggi di più sul processo [nella documentazione](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Previsione
## Predizione
Questo è il momento in cui puoi utilizzare dati completamente nuovi per testare l'accuratezza del tuo modello. In un contesto di ML "applicato", dove stai costruendo risorse web per utilizzare il modello in produzione, questo processo potrebbe coinvolgere la raccolta di input dell'utente (ad esempio, la pressione di un pulsante) per impostare una variabile e inviarla al modello per l'inferenza o la valutazione.
Questo è il momento in cui puoi usare dati completamente nuovi per testare la precisione del tuo modello. In un contesto ML 'applicato', in cui costruisci asset web per usare il modello in produzione, questo processo potrebbe coinvolgere la raccolta di input dall'utente (ad esempio la pressione di un pulsante) per impostare una variabile e inviarla al modello per inferenza, o valutazione.
In queste lezioni, scoprirai come utilizzare questi passaggi per preparare, costruire, testare, valutare e prevedere - tutti i gesti di un data scientist e altro ancora, mentre progredisci nel tuo percorso per diventare un ingegnere ML "full stack".
In queste lezioni, scoprirai come usare questi passaggi per preparare, costruire, testare, valutare e predire - tutti i gesti di uno scienziato dei dati e altro ancora, mentre avanzi nel tuo percorso per diventare un ingegnere ML 'full stack'.
---
## 🚀Sfida
Disegna un diagramma di flusso che rifletta i passaggi di un praticante di ML. Dove ti trovi attualmente nel processo? Dove prevedi di incontrare difficoltà? Cosa ti sembra facile?
Disegna un diagramma di flusso che riflette i passaggi di un praticante ML. Dove ti vedi attualmente nel processo? Dove prevedi di incontrare difficoltà? Cosa ti sembra facile?
Cerca online interviste con data scientist che discutono del loro lavoro quotidiano. Eccone [una](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Cerca online interviste con scienziati dei dati che discutono del loro lavoro quotidiano. Eccone [una](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Compito
[Intervista un data scientist](assignment.md)
[Intervista uno scienziato dei dati](assignment.md)
---
<!-- 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 fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione.
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per l’accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
> ### [Questa lezione è disponibile in R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Introduzione
Finora hai esplorato cosa sia la regressione con dati di esempio raccolti dal dataset dei prezzi delle zucche che useremo per tutta questa lezione. Hai anche visualizzato i dati usando Matplotlib.
Finora hai esplorato cos’è la regressione con dati campione raccolti dal dataset dei prezzi delle zucche che utilizzeremo per tutta la lezione. Hai inoltre visualizzato i dati usando Matplotlib.
Ora sei pronto per approfondire la regressione per l’apprendimento automatico. Mentre la visualizzazione ti permette di dare un senso ai dati, la vera potenza del Machine Learning deriva dall’_addestramento dei modelli_. I modelli vengono addestrati su dati storici per catturare automaticamente le dipendenze nei dati, e ti permettono di prevedere risultati per dati nuovi, che il modello non ha mai visto prima.
Ora sei pronto per approfondire la regressione per ML. Mentre la visualizzazione ti permette di interpretare i dati, il vero potere del Machine Learning deriva dall’_addestramento dei modelli_. I modelli sono addestrati su dati storici per catturare automaticamente le dipendenze dei dati, e ti permettono di prevedere i risultati per dati nuovi, che il modello non ha mai visto prima.
In questa lezione, imparerai di più su due tipi di regressione: _regressione lineare base_ e _regressione polinomiale_, insieme ad alcune delle matematiche sottostanti a queste tecniche. Questi modelli ci permetteranno di predire il prezzo delle zucche in base a diversi dati in input.
In questa lezione, imparerai di più su due tipi di regressione: _regressione lineare base_ e _regressione polinomiale_, insieme ad alcune delle basi matematiche che supportano queste tecniche. Questi modelli ci permetteranno di prevedere i prezzi delle zucche in base a diversi dati in input.
[](https://youtu.be/CRxFT8oTDMg "ML per principianti - Comprendere la regressione lineare")
[](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 Clicca sull'immagine sopra per una breve panoramica video sulla regressione lineare.
> 🎥 Clicca sull’immagine sopra per un breve video introduttivo sulla regressione lineare.
> In tutto questo curriculum, presumiamo una conoscenza minima di matematica, e cerchiamo di renderlo accessibile a studenti provenienti da altri campi, quindi fai attenzione a note, 🧮 richiamo di concetti, diagrammi e altri strumenti didattici per aiutare nella comprensione.
> Durante tutto il curriculum, assumiamo una conoscenza minima della matematica, e cerchiamo di renderla accessibile a studenti provenienti da altri ambiti, quindi cerca note, 🧮 richiami, diagrammi e altri strumenti didattici per aiutarti nella comprensione.
### Prerequisiti
Dovresti ora essere familiare con la struttura dei dati delle zucche che stiamo esaminando. Puoi trovarli precaricati e già puliti nel file _notebook.ipynb_ di questa lezione. Nel file, il prezzo delle zucche è mostrato per bushel in un nuovo dataframe. Assicurati di poter eseguire questi notebook nei kernel in Visual Studio Code.
A questo punto dovresti conoscere la struttura dei dati delle zucche che stiamo analizzando. Puoi trovare questi dati precaricati e puliti nel file _notebook.ipynb_ di questa lezione. Nel file, il prezzo della zucca è mostrato per bushel in un nuovo data frame. Assicurati di poter eseguire questi notebook in kernel in Visual Studio Code.
### Preparazione
Come promemoria, stai caricando questi dati per poter porre domande su di essi.
Come promemoria, carichi questi dati per porre domande su di essi.
- Qual è il momento migliore per acquistare zucche?
- Qual è il momento migliore per comprare le zucche?
- Quale prezzo posso aspettarmi per una cassa di zucche miniatura?
- Conviene acquistarle in cestini da mezzo bushel o nella scatola da 1 1/9 bushel?
- Dovrei comprarle in cestini da mezzo bushel o in scatole da 1 1/9 bushel?
Continuiamo a scavare in questi dati.
Nella lezione precedente, hai creato un dataframe Pandas e l'hai popolato con parte del dataset originale, standardizzando i prezzi per bushel. Facendo così, però, hai potuto raccogliere solo circa 400 punti dati e solo per i mesi autunnali.
Nella lezione precedente, hai creato un data frame Pandas e lo hai popolato con parte del dataset originale, standardizzando i prezzi per bushel. Facendo ciò, però, hai ottenuto solo circa 400 punti dati e solo per i mesi autunnali.
Dai un’occhiata ai dati precaricati nel notebook allegato a questa lezione. I dati sono già caricati e viene mostrato un primo scatterplot per visualizzare i dati mensili. Forse possiamo ottenere qualche dettaglio in più sulla natura dei dati pulendoli ulteriormente.
Dai un’occhiata ai dati precaricati nel notebook che accompagna questa lezione. I dati sono caricati e un primo scatterplot è tracciato per mostrare i dati del mese. Forse possiamo ottenere qualche dettaglio in più sulla natura dei dati pulendoli ulteriormente.
## Una linea di regressione lineare
Come hai appreso nella Lezione 1, l'obiettivo di un esercizio di regressione lineare è poter disegnare una linea per:
Come hai imparato nella Lezione 1, l’obiettivo di un esercizio di regressione lineare è essere in grado di tracciare una linea per:
- **Mostrare le relazioni tra variabili**. Mostrare la relazione tra le variabili
- **Fare previsioni**. Fare previsioni accurate su dove cadrebbe un nuovo punto dati in relazione a quella linea.
- **Mostrare le relazioni tra variabili**. Mostrare la relazione tra variabili
- **Fare previsioni**. Effettuare previsioni accurate su dove cadrebbe un nuovo punto dati rispetto a quella linea.
È tipico della **regressione ai minimi quadrati** tracciare questo tipo di linea. Il termine "minimi quadrati" si riferisce al processo di minimizzazione dell'errore totale nel nostro modello. Per ogni punto dati, misuriamo la distanza verticale (chiamata residuo) tra il punto effettivo e la nostra linea di regressione.
È tipico della **Regressione ai Minimi Quadrati** disegnare questo tipo di linea. Il termine "Minimi Quadrati" si riferisce al processo di minimizzazione dell’errore totale nel nostro modello. Per ogni punto dato, misuriamo la distanza verticale (chiamata residuo) tra il punto reale e la nostra linea di regressione.
Eleviamo al quadrato queste distanze per due motivi principali:
Queste distanze vengono elevate al quadrato per due motivi principali:
1. **Magnitudo oltre alla direzione:** Vogliamo trattare un errore di -5 allo stesso modo di uno di +5. Elevando al quadrato tutti i valori diventano positivi.
1. **Magnitudo rispetto alla direzione:** Vogliamo trattare un errore di -5 allo stesso modo di un errore di +5. Elevando al quadrato tutti i valori diventano positivi.
2. **Pena per gli outlier:** Elevando al quadrato si dà più peso agli errori più grandi, costringendo la linea a stare più vicina ai punti lontani.
2. **Penalizzare gli outlier:** Elevando al quadrato si dà maggior peso agli errori più grandi, costringendo la linea a stare più vicina ai punti lontani.
Poi sommiamo tutti questi valori al quadrato. Il nostro obiettivo è trovare la specifica linea dove questa somma finale è minima (il valore più piccolo possibile)—da qui il nome "minimi quadrati".
Poi sommiamo tutti questi valori al quadrato assieme. Il nostro obiettivo è trovare la linea specifica dove questa somma finale è minima (il valore più piccolo possibile)—da qui il nome "Minimi Quadrati".
> **🧮 Mostrami la matematica**
>
> Questa linea, chiamata _linea di miglior adattamento_ può essere espressa con [un'equazione](https://en.wikipedia.org/wiki/Simple_linear_regression):
> Questa linea, chiamata _linea di miglior adattamento_, può essere espressa da [un’equazione](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` è la 'variabile esplicativa'. `Y` è la 'variabile dipendente'. La pendenza della linea è `b` e `a` è l'intercetta y, cioè il valore di `Y` quando `X = 0`.
> `X` è la 'variabile esplicativa'. `Y` è la 'variabile dipendente'. La pendenza della linea è `b` e `a` è l’intercetta sull’asse y, che si riferisce al valore di `Y` quando `X = 0`.
>
>
>
>
> Per prima cosa, calcola la pendenza `b`. Infografica di [Jen Looper](https://twitter.com/jenlooper)
>
> In altre parole, e riferendoci alla nostra domanda originale sui dati delle zucche: "prevedere il prezzo di una zucca per bushel in base al mese", `X` si riferirebbe al prezzo e `Y` al mese di vendita.
> In altre parole, e riferendoci alla domanda originale sui dati delle zucche: "prevedere il prezzo di una zucca per bushel in base al mese", `X` si riferirebbe al prezzo e `Y` al mese di vendita.
>
>
> Calcola il valore di Y. Se stai pagando circa 4 dollari, deve essere aprile! Infografica di [Jen Looper](https://twitter.com/jenlooper)
> Calcola il valore di Y. Se stai pagando circa 4$, deve essere aprile! Infografica di [Jen Looper](https://twitter.com/jenlooper)
>
> La matematica che calcola la linea deve dimostrare la pendenza della linea, che dipende anche dall’intercetta, ovvero dove si trova `Y` quando `X = 0`.
> La matematica che calcola la linea deve dimostrare la pendenza della linea, che dipende anche dall’intercetta, cioè dove si trova `Y` quando `X = 0`.
>
> Puoi osservare il metodo di calcolo di questi valori sul sito [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Visita anche [questa calcolatrice per i minimi quadrati](https://www.mathsisfun.com/data/least-squares-calculator.html) per vedere come i valori influenzano la linea.
> Puoi osservare il metodo di calcolo di questi valori sul sito [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Visita anche [questa calcolatrice dei minimi quadrati](https://www.mathsisfun.com/data/least-squares-calculator.html) per vedere come i valori numerici influenzano la linea.
## Correlazione
Un altro termine da comprendere è il **coefficiente di correlazione** tra le variabili X e Y date. Usando uno scatterplot, puoi visualizzare rapidamente questo coefficiente. Un grafico con punti dati disposti su una linea ordinata ha alta correlazione, mentre un grafico con punti sparsi ovunque tra X e Y ha bassa correlazione.
Un altro termine da comprendere è il **Coefficiente di Correlazione** tra le variabili X e Y date. Usando uno scatterplot, puoi visualizzare rapidamente questo coefficiente. Un grafico con punti dati distribuiti ordinatamente in una linea mostra una forte correlazione, mentre un grafico con punti dati sparsi ovunque tra X e Y mostra una bassa correlazione.
Un buon modello di regressione lineare sarà quello che ha un coefficiente di correlazione alto (più vicino a 1 che a 0) usando il metodo di regressione ai minimi quadrati con una linea di regressione.
Un buon modello di regressione lineare sarà quello che ha un alto Coefficiente di Correlazione (più vicino a 1 che a 0) usando il metodo dei Minimi Quadrati con una linea di regressione.
✅ Esegui il notebook allegato a questa lezione e guarda lo scatterplot da Mese a Prezzo. I dati che associano il mese al prezzo per la vendita delle zucche sembrano avere alta o bassa correlazione, secondo la tua interpretazione visiva dello scatterplot? Cambia qualcosa se usi una misura più dettagliata invece di `Month`, per esempio *giorno dell’anno* (cioè numero di giorni dall’inizio dell’anno)?
✅ Esegui il notebook che accompagna questa lezione e osserva lo scatterplot tra Mese e Prezzo. I dati che associano il Mese al Prezzo per le vendite di zucche sembrano avere alta o bassa correlazione, secondo la tua interpretazione visiva dello scatterplot? Cambia qualcosa se usi una misura più dettagliata invece di `Month`, per esempio *il giorno dell’anno* (cioè numero di giorni dall’inizio dell’anno)?
Nel codice seguente, supponiamo di aver pulito i dati, e ottenuto un dataframe chiamato `new_pumpkins`, simile al seguente:
Nel codice qui sotto, assumiamo che abbiamo pulito i dati e ottenuto un data frame chiamato `new_pumpkins`, simile al seguente:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
> Il codice per pulire i dati è disponibile in [`notebook.ipynb`](notebook.ipynb). Abbiamo eseguito gli stessi passaggi di pulizia della lezione precedente e abbiamo calcolato la colonna `DayOfYear`con l’espressione seguente:
> Il codice per pulire i dati è disponibile in [`notebook.ipynb`](notebook.ipynb). Abbiamo eseguito gli stessi passaggi di pulizia della lezione precedente, e abbiamo calcolato la colonna `DayOfYear`usando la seguente espressione:
Ora che hai una comprensione della matematica dietro la regressione lineare, creiamo un modello di regressione per vedere se possiamo prevedere quale confezione di zucche avrà i prezzi migliori. Qualcuno che compra zucche per una festa di Halloween potrebbe voler questa informazione per ottimizzare i propri acquisti di zucche.
Ora che hai una comprensione della matematica dietro la regressione lineare, creiamo un modello di regressione per vedere se possiamo prevedere quale confezione di zucche avrà i prezzi migliori. Qualcuno che compra zucche per un campo di zucche per le feste potrebbe voler questa informazione per ottimizzare i suoi acquisti di confezioni.
## Cercare la correlazione
[](https://youtu.be/uoRq-lW2eQo "ML per principianti - Cercare la correlazione: la chiave per la regressione lineare")
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Clicca sull'immagine sopra per una breve panoramica video sulla correlazione.
> 🎥 Clicca sull’immagine sopra per un breve video introduttivo sulla correlazione.
Dalla lezione precedente probabilmente hai visto che il prezzo medio per diversi mesi si presenta così:
Dalla lezione precedente probabilmente hai visto che il prezzo medio per i diversi mesi somiglia a questo:
<imgalt="Prezzo medio per mese" src="../../../../translated_images/it/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="Average price by month" src="../../../../translated_images/it/barchart.a833ea9194346d76.webp"width="50%"/>
Questo suggerisce che ci dovrebbe essere qualche correlazione, e possiamo provare ad addestrare un modello di regressione lineare per predire la relazione tra `Month` e `Price`, o tra `DayOfYear` e `Price`. Qui c’è lo scatter plot che mostra quest’ultima relazione:
Questo suggerisce che ci dovrebbe essere qualche correlazione, e possiamo provare a addestrare un modello di regressione lineare per prevedere la relazione tra `Month` e `Price`, o tra `DayOfYear` e `Price`. Ecco lo scatter plot che mostra quest’ultima relazione:
<imgalt="Scatter plot di Prezzo vs. Giorno dell'anno" src="../../../../translated_images/it/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/it/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
Vediamo se c’è una correlazione usando la funzione `corr`:
Vediamo se c’è correlazione usando la funzione `corr`:
Sembra che la correlazione sia piuttosto bassa, -0.15 rispetto a `Month` e -0.17 rispetto a `DayOfMonth`, ma potrebbe esserci un’altra relazione importante. Sembra che ci siano diversi cluster di prezzi corrispondenti a diverse varietà di zucche. Per confermare questa ipotesi, tracciamo ogni categoria di zucca usando un colore diverso. Passando un parametro `ax` alla funzione di plot `scatter` possiamo disegnare tutti i punti sullo stesso grafico:
Sembra che la correlazione sia piuttosto bassa, -0.15 per `Month` e -0.17 per `DayOfYear`, ma potrebbe esserci un’altra relazione importante. Sembra che ci siano diversi cluster di prezzi corrispondenti a diverse varietà di zucche. Per confermare questa ipotesi, tracciamo ogni categoria di zucca con un colore differente. Passando un parametro `ax` alla funzione di plot `scatter` possiamo disegnare tutti i punti sullo stesso grafico:
```python
ax=None
@ -140,40 +141,40 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="Scatter plot di Prezzo vs. Giorno dell'anno" src="../../../../translated_images/it/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/it/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
La nostra indagine suggerisce che la varietà ha un effetto maggiore sul prezzo complessivo rispetto alla data reale di vendita. Vediamo questo con un grafico a barre:
La nostra indagine suggerisce che la varietà influenza di più il prezzo complessivo rispetto alla data di vendita effettiva. Possiamo vedere questo anche con un grafico a barre:
<imgalt="Scatter plot di Prezzo vs. Giorno dell'anno" src="../../../../translated_images/it/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/it/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
Se ora calcoliamo la correlazione tra `Price` e `DayOfYear` usando la funzione `corr`, otterremo qualcosa come `-0.27` - il che significa che ha senso addestrare un modello predittivo.
Se ora calcoliamo la correlazione tra `Price` e `DayOfYear` usando la funzione `corr`, otteniamo qualcosa come `-0.27`– il che significa che addestrare un modello predittivo ha senso.
> Prima di addestrare un modello di regressione lineare, è importante assicurarsi che i nostri dati siano puliti. La regressione lineare non funziona bene con valori mancanti, dunque ha senso eliminare tutte le celle vuote:
> Prima di addestrare un modello di regressione lineare, è importante assicurarsi che i dati siano puliti. La regressione lineare non funziona bene con valori mancanti, quindi è sensato eliminare tutte le celle vuote:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Un altro approccio sarebbe quello di riempire quei valori mancanti con la media delle rispettive colonne.
Un altro approccio sarebbe riempire quei valori vuoti con la media dei valori nella colonna corrispondente.
## Regressione Lineare Semplice
[](https://youtu.be/e4c_UP2fSjg "ML per principianti - Regressione Lineare e Polinomiale usando Scikit-learn")
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 Clicca sull'immagine sopra per una breve panoramica video sulla regressione lineare e polinomiale.
> 🎥 Clicca sull’immagine sopra per un breve video introduttivo sulla regressione lineare e polinomiale.
Per addestrare il nostro modello di Regressione Lineare, useremo la libreria **Scikit-learn**.
@ -183,31 +184,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Iniziamo separando i valori input (caratteristiche) e l’output atteso (etichetta) in array numpy separati:
Iniziamo separando i valori di input (caratteristiche) e l’output atteso (etichetta) in array numpy separati:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Nota che abbiamo dovuto eseguire il `reshape` sui dati di input affinché il pacchetto di Regressione Lineare li capisse correttamente. La Regressione Lineare si aspetta un array 2D come input, dove ogni riga dell’array corrisponde a un vettore di caratteristiche in input. Nel nostro caso, poiché abbiamo un solo input, ci serve un array di forma N×1, dove N è la dimensione del dataset.
> Nota che abbiamo dovuto eseguire `reshape` sui dati di input affinché il pacchetto di Regressione Lineare li comprendesse correttamente. La regressione lineare si aspetta un array 2D come input, dove ogni riga dell’array corrisponde a un vettore di caratteristiche in input. Nel nostro caso, dato che abbiamo un solo input, abbiamo bisogno di un array con forma N×1, dove N è la dimensione del dataset.
Poi, dobbiamo dividere i dati in set di addestramento e di test, così possiamo validare il modello dopo l’addestramento:
Poi, dobbiamo dividere i dati in dataset di addestramento e di test, così da poter validare il nostro modello dopo l’addestramento:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Infine, addestrare il modello vero e proprio di Regressione Lineare richiede solo due righe di codice. Definiamo l’oggetto `LinearRegression`, e lo adattiamo ai nostri dati usando il metodo `fit`:
Infine, addestrare il modello vero e proprio di Regressione Lineare richiede solo due righe di codice. Definiamo l’oggetto `LinearRegression` e lo adattiamo ai nostri dati usando il metodo `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
L'oggetto `LinearRegression` dopo aver effettuato il `fit` contiene tutti i coefficienti della regressione, che possono essere accessi utilizzando la proprietà `.coef_`. Nel nostro caso, c'è un solo coefficiente, che dovrebbe essere intorno a `-0.017`. Questo significa che i prezzi sembrano diminuire un po' col passare del tempo, ma non troppo, circa 2 centesimi al giorno. Possiamo anche accedere al punto di intersezione della regressione con l'asse Y usando `lin_reg.intercept_` - sarà intorno a `21` nel nostro caso, indicando il prezzo all'inizio dell'anno.
L'oggetto `LinearRegression` dopo l'addestramento (`fit`) contiene tutti i coefficienti della regressione, ai quali si può accedere tramite la proprietà `.coef_`. Nel nostro caso, c'è un solo coefficiente, che dovrebbe essere intorno a `-0.017`. Ciò significa che i prezzi sembrano calare un po' con il tempo, ma non troppo, circa 2 centesimi al giorno. Possiamo anche accedere al punto di intersezione della regressione con l'asse Y usando `lin_reg.intercept_` - sarà intorno a `21` nel nostro caso, indicando il prezzo all'inizio dell'anno.
Per vedere quanto è accurato il nostro modello, possiamo prevedere i prezzi su un dataset di test e quindi misurare quanto le nostre previsioni siano vicine ai valori attesi. Questo può essere fatto utilizzando la metrica dell'errore quadratico medio (RMSE), che è la radice della media di tutte le differenze quadrate tra valore atteso e valore previsto.
Per vedere quanto è accurato il nostro modello, possiamo prevedere i prezzi su un set di dati di test, e poi misurare quanto le nostre previsioni sono vicine ai valori attesi. Questo può essere fatto usando la metrica dell'errore quadratico medio radice (RMSE), che è la radice della media di tutte le differenze al quadrato tra il valore atteso e quello previsto.
Il nostro errore sembra essere intorno a 2 punti, cioè ~17%. Non troppo bene. Un altro indicatore della qualità del modello è il **coefficiente di determinazione**, che può essere ottenuto così:
Il nostro errore sembra essere intorno a 2 punti, ovvero ~17%. Non troppo buono. Un altro indicatore della qualità del modello è il **coefficiente di determinazione**, che si può ottenere così:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Se il valore è 0, significa che il modello non considera i dati di input e agisce come il *peggior predittore lineare*, che è semplicemente un valore medio del risultato. Il valore 1 significa che possiamo prevedere perfettamente tutti i risultati attesi. Nel nostro caso, il coefficiente è intorno a 0.06, cioè abbastanza basso.
Se il valore è 0, significa che il modello non tiene conto dei dati di input, e agisce come il *peggior predittore lineare*, che è semplicemente il valore medio del risultato. Il valore 1 significa che possiamo prevedere perfettamente tutti gli output attesi. Nel nostro caso, il coefficiente è intorno a 0.06, che è abbastanza basso.
Possiamo anche tracciare i dati di test insieme alla linea di regressione per vedere meglio come funziona la regressione nel nostro caso:
Un altro tipo di regressione lineare è la Regressione Polinomiale. Sebbene a volte ci sia una relazione lineare tra le variabili - più grande è la zucca in volume, più alto è il prezzo - a volte queste relazioni non possono essere rappresentate come un piano o una linea retta.
Un altro tipo di regressione lineare è la Regressione Polinomiale. Mentre a volte c'è una relazione lineare tra variabili - più grande è la zucca in volume, più alto è il prezzo - a volte queste relazioni non possono essere rappresentate come un piano o linea retta.
✅ Ecco [alcuni esempi in più](https://online.stat.psu.edu/stat501/lesson/9/9.8) di dati che possono richiedere una Regressione Polinomiale
✅ Ecco [alcuni esempi in più](https://online.stat.psu.edu/stat501/lesson/9/9.8) di dati che potrebbero usare la Regressione Polinomiale
Dai un'altra occhiata alla relazione tra Data e Prezzo. Questo scatterplot sembra necessariamente dover essere analizzato da una linea retta? I prezzi non possono fluttuare? In questo caso, puoi provare la regressione polinomiale.
Guarda di nuovo la relazione tra Data e Prezzo. Questo scatterplot sembra dover necessariamente essere analizzato con una linea retta? I prezzi non possono fluttuare? In questo caso, puoi provare la regressione polinomiale.
✅ I polinomi sono espressioni matematiche che possono consistere in una o più variabili e coefficienti
✅ I polinomi sono espressioni matematiche che potrebbero consistere di una o più variabili e coefficienti
La regressione polinomiale crea una linea curva per adattarsi meglio ai dati non lineari. Nel nostro caso, se includiamo una variabile `DayOfYear` al quadrato nei dati di input, dovremmo essere in grado di adattare i dati con una curva parabolica, che avrà un minimo in un certo punto dell'anno.
La regressione polinomiale crea una linea curva per adattarsi meglio ai dati non lineari. Nel nostro caso, se includiamo una variabile quadratica `DayOfYear` nei dati di input, dovremmo essere in grado di adattare i nostri dati con una curva parabolica, che avrà un minimo in un certo punto dell'anno.
Scikit-learn include un utile [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) per combinare insieme diversi passaggi di elaborazione dati. Una **pipeline** è una catena di **stimatori**. Nel nostro caso, creeremo una pipeline che prima aggiunge caratteristiche polinomiali al nostro modello e poi addestra la regressione:
Scikit-learn include una utile [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) per combinare insieme diversi passaggi di elaborazione dei dati. Una **pipeline** è una catena di **stimatori**. Nel nostro caso, creeremo una pipeline che prima aggiunge caratteristiche polinomiali al nostro modello, e poi allena la regressione:
```python
from sklearn.preprocessing import PolynomialFeatures
Usare `PolynomialFeatures(2)` significa che includeremo tutti i polinomi di secondo grado dai dati di input. Nel nostro caso significherà solo `DayOfYear`<sup>2</sup>, ma dati due variabili di input X e Y, questo aggiungerà X<sup>2</sup>, XY e Y<sup>2</sup>. Possiamo anche utilizzare polinomi di grado superiore se vogliamo.
Usare `PolynomialFeatures(2)` significa che includeremo tutti i polinomi di secondo grado dai dati di input. Nel nostro caso significa solo `DayOfYear`<sup>2</sup>, ma dati due input X e Y, aggiungerà X<sup>2</sup>, XY e Y<sup>2</sup>. Possiamo anche usare polinomi di grado più alto se vogliamo.
Le pipeline possono essere usate nello stesso modo dell'oggetto `LinearRegression` originale, cioè possiamo `fit` la pipeline, e poi usare `predict` per ottenere i risultati delle previsioni:
Per tracciare la curva di approssimazione liscia, usiamo `np.linspace` per creare un intervallo uniforme di valori di input, invece di tracciare direttamente sui dati di test non ordinati (che produrrebbe una linea a zigzag):
Le pipeline possono essere utilizzate nello stesso modo dell'oggetto `LinearRegression` originale, cioè possiamo `fit`tare la pipeline e quindi usare `predict` per ottenere i risultati della previsione. Ecco il grafico che mostra i dati di test e la curva di approssimazione:
Ecco il grafico che mostra i dati di test e la curva di approssimazione:
Usando la regressione polinomiale, possiamo ottenere un MSE leggermente più basso e un coefficiente di determinazione più alto, ma non in modo significativo. Dobbiamo prendere in considerazione altre caratteristiche!
Usando la Regressione Polinomiale, possiamo ottenere un RMSE leggermente più basso e una determinazione più alta, ma non in modo significativo. Dobbiamo prendere in considerazione altre caratteristiche!
> Puoi vedere che i prezzi minimi delle zucche si osservano intorno a Halloween. Come puoi spiegare questo?
🎃 Congratulazioni, hai appena creato un modello che può aiutare a prevedere il prezzo delle zucche da torta. Probabilmente puoi ripetere la stessa procedura per tutti i tipi di zucca, ma sarebbe tedioso. Impariamo ora come considerare la varietà di zucca nel nostro modello!
🎃 Congratulazioni, hai appena creato un modello che può aiutarti a prevedere il prezzo delle zucche da torta. Probabilmente puoi ripetere la stessa procedura per tutti i tipi di zucche, ma sarebbe laborioso. Impariamo ora come tenere conto della varietà di zucca nel nostro modello!
## Caratteristiche Categoricali
Nel mondo ideale, vogliamo poter prevedere i prezzi per diverse varietà di zucca usando lo stesso modello. Tuttavia, la colonna `Variety` è un po' diversa da colonne come `Month`, perché contiene valori non numerici. Queste colonne sono chiamate **categoriche**.
Nel mondo ideale, vogliamo essere in grado di prevedere i prezzi per diverse varietà di zucche usando lo stesso modello. Tuttavia, la colonna `Variety` è un po' diversa dalle colonne come `Month`, perché contiene valori non numerici. Queste colonne si chiamano**categoriche**.
[](https://youtu.be/DYGliioIAE0 "ML per principianti - Previsioni con caratteristiche categoriche e regressione lineare")
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 Clicca sull'immagine sopra per un breve video di overview sull'uso delle caratteristiche categoriche.
> 🎥 Clicca sull'immagine sopra per una breve panoramica video sull'uso delle caratteristiche categoriche.
Qui puoi vedere come il prezzo medio dipende dalla varietà:
<imgalt="Prezzo medio per varietà"src="../../../../translated_images/it/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
<imgalt="Average price by variety" src="../../../../translated_images/it/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
Per considerare la varietà, dobbiamo prima convertirla in forma numerica, o **codificarla**. Ci sono diversi modi per farlo:
Per tenere conto della varietà, dobbiamo prima convertirla in forma numerica, o **codificarla**. Ci sono diversi modi per farlo:
* La semplice **codifica numerica** costruisce una tabella delle diverse varietà e poi sostituisce il nome della varietà con un indice in quella tabella. Questa non è la scelta migliore per regressione lineare, perché questa prende il valore numerico effettivo dell'indice e lo aggiunge al risultato moltiplicandolo per un coefficiente. Nel nostro caso, la relazione tra il numero indice e il prezzo è chiaramente non lineare, anche se facciamo in modo che gli indici siano ordinati in un certo modo.
* La **one-hot encoding** sostituirà la colonna `Variety` con 4 colonne diverse, una per ogni varietà. Ogni colonna conterrà `1` se la riga corrispondente è della data varietà, e `0` altrimenti. Questo significa che ci saranno quattro coefficienti nella regressione lineare, uno per ogni varietà di zucca, responsabili del "prezzo di partenza" (o meglio "prezzo aggiuntivo") per quella particolare varietà.
* La semplice **codifica numerica** costruirà una tabella delle varietà diverse, e poi sostituirà il nome della varietà con un indice in quella tabella. Questa non è l'idea migliore per la regressione lineare, perché la regressione lineare prende il valore numerico effettivo dell'indice, e lo aggiunge al risultato, moltiplicandolo per qualche coefficiente. Nel nostro caso, la relazione tra il numero indice e il prezzo è chiaramente non lineare, anche se ci assicurassimo che gli indici siano ordinati in un certo modo.
* La **codifica one-hot** sostituirà la colonna `Variety` con 4 colonne diverse, una per ogni varietà. Ogni colonna conterrà `1` se la riga corrispondente è di quella data varietà, e `0` altrimenti. Questo significa che ci saranno quattro coefficienti nella regressione lineare, uno per ogni varietà di zucca, responsabile del "prezzo di partenza" (o meglio "prezzo aggiuntivo") per quella particolare varietà.
Il codice sotto mostra come possiamo applicare la codifica one-hot alla varietà:
Il codice qui sotto mostra come possiamo codificare con one-hot una varietà:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -309,7 +332,7 @@ X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Il resto del codice è lo stesso che abbiamo usato sopra per addestrare la regressione lineare. Se provi, vedrai che l’errore quadratico medio è circa lo stesso, ma otteniamo un coefficiente di determinazione molto più alto (~77%). Per avere previsioni ancora più precise, possiamo considerare altre caratteristiche categoriche oltre che caratteristiche numeriche, come `Month` o `DayOfYear`. Per avere un unico grande array di caratteristiche, possiamo usare `join`:
Il resto del codice è lo stesso che abbiamo usato sopra per addestrare la regressione lineare. Se provi, vedrai che l'errore quadratico medio è simile, ma otteniamo un coefficiente di determinazione molto più alto (~77%). Per ottenere previsioni ancora più accurate, possiamo considerare più caratteristiche categoriche, così come caratteristiche numeriche, come `Month` o `DayOfYear`. Per ottenere un unico grande array di caratteristiche, possiamo usare `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,21 +342,21 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Qui consideriamo anche `City` e il tipo di `Package`, che ci dà MSE 2.84 (10%) e coefficiente di determinazione 0.94!
Qui prendiamo in considerazione anche `City` e `Package`, il che ci dà un RMSE di 2.84 (10.5%), e una determinazione di 0.94!
## Mettere tutto insieme
Per creare il miglior modello, possiamo usare i dati combinati (categorici codificati one-hot + numerici) dall'esempio sopra insieme alla regressione polinomiale. Ecco il codice completo per la tua comodità:
Per ottenere il miglior modello, possiamo usare dati combinati (caratteristiche categoriche codificate one-hot + numeriche) dall'esempio sopra insieme alla Regressione Polinomiale. Ecco il codice completo per la tua comodità:
```python
# impostare i dati di addestramento
# configurare i dati di addestramento
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# fare la divisione train-test
# effettuare la divisione train-test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
Questo dovrebbe darci il miglior coefficiente di determinazione di quasi 97% e MSE=2.23 (~8% di errore nella previsione).
Questo dovrebbe darci il miglior coefficiente di determinazione di quasi il 97%, e RMSE=2.23 (~8% di errore di previsione).
| Modello | MSE | Coefficiente di determinazione |
|---------|-----|-------------------------------|
| Modello | RMSE | Determinazione |
|---------|------|----------------|
| Lineare `DayOfYear` | 2.77 (17.2%) | 0.07 |
| Polinomiale `DayOfYear` | 2.73 (17.0%) | 0.08 |
| Lineare `Variety` | 5.24 (19.7%) | 0.77 |
| Lineare tutte le caratteristiche | 2.84 (10.5%) | 0.94 |
| Polinomiale tutte le caratteristiche | 2.23 (8.25%) | 0.97 |
| Lineare Tutte le caratteristiche | 2.84 (10.5%) | 0.94 |
| Polinomiale Tutte le caratteristiche | 2.23 (8.25%) | 0.97 |
🏆 Ben fatto! Hai creato quattro modelli di regressione in una lezione e migliorato la qualità del modello fino al 97%. Nella sezione finale su Regressione, imparerai la Regressione Logistica per determinare le categorie.
🏆 Ben fatto! Hai creato quattro modelli di Regressione in una lezione, e migliorato la qualità del modello al 97%. Nella sezione finale sulla Regressione, imparerai la Regressione Logistica per determinare le categorie.
---
## 🚀Sfida
Prova diverse variabili in questo notebook per vedere come la correlazione corrisponde all’accuratezza del modello.
Prova diverse variabili in questo notebook per vedere come la correlazione corrisponde alla precisione del modello.
In questa lezione abbiamo imparato la regressione lineare. Ci sono altri tipi importanti di regressione. Leggi sulle tecniche Stepwise, Ridge, Lasso e Elasticnet. Un buon corso da studiare per approfondire è il [corso Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
In questa lezione abbiamo imparato la Regressione Lineare. Ci sono altri tipi importanti di regressione. Leggi delle tecniche Stepwise, Ridge, Lasso ed Elasticnet. Un buon corso per approfondire è il [corso Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Compito
[Costruisci un modello](assignment.md)
[Costruisci un Modello](assignment.md)
---
<!-- 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). Pur impegnandoci per garantire l'accuratezza, si prega di considerare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua madre deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non ci assumiamo alcuna responsabilità per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Pur impegnandoci per l'accuratezza, si prega di considerare che le traduzioni automatiche 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 umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.
"## Regressione Lineare e Polinomiale per la Valutazione delle Zucche - Lezione 3\n",
"## Regressione Lineare e Polinomiale per il Prezzo della Zucca - Lezione 3\n",
"\n",
"Carica le librerie necessarie e il dataset. Converti i dati in un dataframe contenente un sottoinsieme dei dati:\n",
"\n",
"- Considera solo le zucche con prezzo al bushel\n",
"- Prendi solo le zucche valutate al bushel\n",
"- Converti la data in un mese\n",
"- Calcola il prezzo come media tra il prezzo massimo e minimo\n",
"- Converti il prezzo per riflettere la valutazione in base alla quantità per bushel\n"
"- Calcola il prezzo come media dei prezzi massimi e minimi\n",
"- Converti il prezzo per riflettere la valutazione in base alla quantità di bushel\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Un diagramma a dispersione ci ricorda che abbiamo dati mensili solo da agosto a dicembre. Probabilmente abbiamo bisogno di più dati per poter trarre conclusioni in modo lineare.\n"
"Un grafico a dispersione ci ricorda che abbiamo dati mensili solo da agosto a dicembre. Probabilmente abbiamo bisogno di più dati per poter trarre conclusioni in modo lineare.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Vediamo se c'è correlazione:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Sembra che la correlazione sia piuttosto bassa, ma c'è qualche altra relazione più importante - perché i punti di prezzo nel grafico sopra sembrano avere diversi cluster distinti. Facciamo un grafico che mostrerà le diverse varietà di zucca:\n"
"Sembra che la correlazione sia piuttosto piccola, ma c'è qualche altra relazione più importante - perché i punti prezzo nel grafico sopra sembrano avere diversi gruppi distinti. Facciamo un grafico che mostri le diverse varietà di zucca:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Per il momento, concentriamoci solo su una varietà - **tipo di torta**.\n"
]
},
{
"cell_type": "code",
@ -584,7 +588,7 @@
"source": [
"### Regressione Lineare\n",
"\n",
"Utilizzeremo Scikit Learn per addestrare un modello di regressione lineare:\n"
"Useremo Scikit Learn per addestrare un modello di regressione lineare:\n"
]
},
{
@ -662,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"La pendenza della linea può essere determinata dai coefficienti di regressione lineare:\n"
"La pendenza della linea può essere determinata dai coefficienti della regressione lineare:\n"
]
},
{
@ -688,7 +692,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Possiamo usare il modello addestrato per prevedere il prezzo:\n"
]
},
{
"cell_type": "code",
@ -718,9 +724,9 @@
"source": [
"### Regressione Polinomiale\n",
"\n",
"A volte la relazione tra le caratteristiche e i risultati è intrinsecamente non lineare. Ad esempio, i prezzi delle zucche potrebbero essere alti in inverno (mesi=1,2), poi scendere in estate (mesi=5-7) e risalire successivamente. La regressione lineare non è in grado di individuare questa relazione con precisione.\n",
"A volte la relazione tra le caratteristiche e i risultati è intrinsecamente non lineare. Per esempio, i prezzi della zucca potrebbero essere alti in inverno (mesi=1,2), poi diminuire durante l'estate (mesi=5-7), e poi risalire. La regressione lineare non è in grado di trovare questa relazione in modo accurato.\n",
"\n",
"In questo caso, potremmo considerare di aggiungere caratteristiche extra. Un modo semplice è utilizzare polinomi derivati dalle caratteristiche di input, il che porterebbe a una **regressione polinomiale**. In Scikit Learn, possiamo pre-calcolare automaticamente le caratteristiche polinomiali utilizzando le pipeline:\n"
"In questo caso, potremmo considerare di aggiungere caratteristiche extra. Un modo semplice è utilizzare polinomi delle caratteristiche di input, il che porterebbe alla **regressione polinomiale**. In Scikit Learn, possiamo pre-calcolare automaticamente le caratteristiche polinomiali usando le pipeline: \n"
"In un mondo ideale, vorremmo essere in grado di prevedere i prezzi per diverse varietà di zucche utilizzando lo stesso modello. Per tenere conto della varietà, dobbiamo prima convertirla in forma numerica, o **codificarla**. Ci sono diversi modi per farlo:\n",
"Nel mondo ideale, vogliamo essere in grado di prevedere i prezzi per diverse varietà di zucca utilizzando lo stesso modello. Per tenere conto della varietà, dobbiamo prima convertirla in forma numerica, o **codificare**. Ci sono diversi modi in cui possiamo farlo:\n",
"\n",
"* Una semplice codifica numerica che costruirà una tabella delle diverse varietà e poi sostituirà il nome della varietà con un indice in quella tabella. Questa non è la soluzione migliore per la regressione lineare, perché la regressione lineare tiene conto del valore numerico dell'indice, e il valore numerico probabilmente non è correlato numericamente con il prezzo.\n",
"* La codifica one-hot, che sostituirà la colonna `Variety` con 4 colonne diverse, una per ogni varietà, che conterranno 1 se la riga corrispondente appartiene a una determinata varietà, e 0 altrimenti.\n",
"* Codifica numerica semplice che costruirà una tabella di diverse varietà, e poi sostituirà il nome della varietà con un indice in quella tabella. Questa non è la migliore idea per la regressione lineare, perché la regressione lineare tiene conto del valore numerico dell'indice, e il valore numerico probabilmente non sarà correlato numericamente con il prezzo.\n",
"* Codifica one-hot, che sostituirà la colonna `Variety` con 4 colonne diverse, una per ogni varietà, che conterrà 1 se la riga corrispondente è della data varietà, e 0 altrimenti.\n",
"\n",
"Il codice seguente mostra come possiamo codificare una varietà con il metodo one-hot:\n"
"Il codice qui sotto mostra come possiamo codificare una varietà con one-hot:\n"
]
},
{
@ -940,7 +949,7 @@
"source": [
"### Regressione Lineare sulla Varietà\n",
"\n",
"Ora utilizzeremo lo stesso codice di sopra, ma invece di `DayOfYear` useremo la nostra varietà codificata one-hot come input:\n"
"Useremo ora lo stesso codice di sopra, ma invece di `DayOfYear` useremo la nostra varietà codificata one-hot come input:\n"
]
},
{
@ -988,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Possiamo anche provare a utilizzare altre caratteristiche nello stesso modo e combinarle con caratteristiche numeriche, come `Month` o `DayOfYear`:\n"
"Possiamo anche provare a usare altre caratteristiche allo stesso modo, combinandole con caratteristiche numeriche, come `Month` o `DayOfYear`:\n"
]
},
{
@ -1021,7 +1030,7 @@
"source": [
"### Regressione Polinomiale\n",
"\n",
"La regressione polinomiale può essere utilizzata anche con caratteristiche categoriche che sono codificate in one-hot. Il codice per addestrare la regressione polinomiale sarebbe essenzialmente lo stesso di quello che abbiamo visto sopra.\n"
"La regressione polinomiale può essere utilizzata anche con caratteristiche categoriche che sono codificate one-hot. Il codice per addestrare la regressione polinomiale sarebbe essenzialmente lo stesso che abbiamo visto sopra.\n"
]
},
{
@ -1068,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\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"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Esclusione di responsabilità**: \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 deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un umano. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
Proces tworzenia, używania i utrzymywania modeli uczenia maszynowego oraz danych, które wykorzystują, różni się znacząco od wielu innych przepływów pracy w programowaniu. W tej lekcji rozwiejemy wątpliwości dotyczące tego procesu i przedstawimy główne techniki, które warto znać. Dowiesz się:
Proces budowania, używania i utrzymywania modeli uczenia maszynowego oraz danych, których używają, różni się znacznie od wielu innych przepływów pracy programistycznej. W tej lekcji rozwiejemy tajemnice tego procesu i przedstawimy główne techniki, które musisz znać. Nauczysz się:
- Jak zrozumieć procesy leżące u podstaw uczenia maszynowego na wysokim poziomie.
- Jak zgłębić podstawowe pojęcia, takie jak „modele”, „predykcje” i „dane treningowe”.
- Rozumieć procesy leżące u podstaw uczenia maszynowego na wysokim poziomie.
- Poznawać podstawowe pojęcia, takie jak „modele”, „prognozy” i „dane treningowe”.
## [Quiz przed lekcją](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
[](https://youtu.be/4NGM0U2ZSHU "ML dla początkujących - Techniki uczenia maszynowego")
[](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film omawiający tę lekcję.
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film omawiający tę lekcję.
## Wprowadzenie
Na wysokim poziomie, proces tworzenia systemów uczenia maszynowego (ML) składa się z kilku kroków:
Na wysokim poziomie, rzemiosło tworzenia procesów uczenia maszynowego (ML) składa się z kilku etapów:
1. **Określenie pytania**. Większość procesów ML zaczyna się od postawienia pytania, na które nie można odpowiedzieć za pomocą prostego programu warunkowego lub silnika opartego na regułach. Pytania te często dotyczą przewidywań opartych na zbiorze danych.
2. **Zbieranie i przygotowanie danych**. Aby móc odpowiedzieć na pytanie, potrzebujesz danych. Jakość, a czasem ilość danych, będzie decydować o tym, jak dobrze możesz odpowiedzieć na swoje pytanie. Wizualizacja danych jest ważnym aspektem tego etapu. Ten etap obejmuje również podział danych na grupy treningowe i testowe w celu budowy modelu.
3. **Wybór metody treningowej**. W zależności od pytania i charakteru danych, musisz wybrać sposób trenowania modelu, aby najlepiej odzwierciedlał dane i dokonywał trafnych przewidywań. To część procesu ML, która wymaga specjalistycznej wiedzy i często dużej ilości eksperymentów.
4. **Trenowanie modelu**. Korzystając z danych treningowych, używasz różnych algorytmów, aby nauczyć model rozpoznawania wzorców w danych. Model może wykorzystywać wewnętrzne wagi, które można dostosować, aby preferować określone części danych nad innymi, co prowadzi do lepszego modelu.
5. **Ocena modelu**. Używasz danych, których model wcześniej nie widział (danych testowych), aby sprawdzić, jak model działa.
6. **Dostrajanie parametrów**. Na podstawie wyników modelu możesz powtórzyć proces, używając różnych parametrów lub zmiennych, które kontrolują zachowanie algorytmów używanych do trenowania modelu.
7. **Przewidywanie**. Użyj nowych danych wejściowych, aby sprawdzić dokładność modelu.
1. **Zdecyduj o pytaniu**. Większość procesów ML zaczyna się od postawienia pytania, na które nie można odpowiedzieć za pomocą prostego programu warunkowego lub silnika opartego na regułach. Pytania te często dotyczą prognoz opartych na zbiorze danych.
2. **Zbierz i przygotuj dane**. Aby odpowiedzieć na swoje pytanie, potrzebujesz danych. Jakość, a czasami ilość danych, określi, jak dobrze możesz odpowiedzieć na pytanie. Wizualizacja danych jest ważnym aspektem tej fazy. Ta faza obejmuje także podział danych na grupę treningową i testową do budowy modelu.
3. **Wybierz metodę treningu**. W zależności od pytania i charakteru danych musisz wybrać, jak chcesz trenować model, aby najlepiej odzwierciedlał dane i wykonywał dokładne prognozy. To część procesu ML, która wymaga specjalistycznej wiedzy i często sporej ilości eksperymentów.
4. **Wytrenuj model**. Korzystając z danych treningowych, zastosujesz różne algorytmy do wytrenowania modelu, aby rozpoznawał wzorce w danych. Model może wykorzystywać wewnętrzne wagi, które można dostosowywać, aby faworyzować pewne części danych i zbudować lepszy model.
5. **Oceń model**. Używasz dotychczas niewidzianych danych (danych testowych) z twojego zbioru, aby sprawdzić, jak model działa.
6. **Dostrajanie parametrów**. Na podstawie wydajności modelu możesz powtórzyć proces, stosując różne parametry lub zmienne, które kontrolują zachowanie algorytmów używanych do trenowania modelu.
7. **Prognozuj**. Użyj nowych danych wejściowych do przetestowania dokładności modelu.
## Jakie pytanie zadać?
## Jakie pytanie zadać
Komputery są szczególnie dobre w odkrywaniu ukrytych wzorców w danych. Ta umiejętność jest bardzo pomocna dla badaczy, którzy mają pytania dotyczące określonej dziedziny, na które nie można łatwo odpowiedzieć, tworząc silnik oparty na regułach warunkowych. Na przykład, w zadaniu aktuarialnym, data scientist może skonstruować ręcznie stworzone reguły dotyczące śmiertelności palaczy w porównaniu z niepalącymi.
Komputery są szczególnie dobre w odkrywaniu ukrytych wzorców w danych. Ta użyteczność jest niezwykle pomocna dla badaczy, którzy mają pytania dotyczące danej dziedziny, na które trudno odpowiedzieć, tworząc warunkowy silnik reguł. Na przykład, przy zadaniu aktuarialnym, data scientist może zbudować ręcznie opracowane reguły dotyczące śmiertelności palaczy w porównaniu z niepalącymi.
Jednak gdy do równania wprowadza się wiele innych zmiennych, model ML może okazać się bardziej efektywny w przewidywaniu przyszłych wskaźników śmiertelności na podstawie historii zdrowotnej. Bardziej optymistycznym przykładem może być przewidywanie pogody na kwiecień w danej lokalizacji na podstawie danych takich jak szerokość geograficzna, długość geograficzna, zmiany klimatyczne, bliskość oceanu, wzorce prądów strumieniowych i inne.
Gdy do równania wprowadzonych zostanie wiele innych zmiennych, model ML może okazać się bardziej efektywny w przewidywaniu przyszłych wskaźników śmiertelności na podstawie historii zdrowotnej. Bardziej optymistycznym przykładem może być prognozowanie pogody na kwiecień dla danego miejsca na podstawie danych, które obejmują szerokość geograficzną, długość geograficzną, zmiany klimatu, bliskość oceanu, wzorce prądów strumieniowych i więcej.
✅ Ta [prezentacja](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) dotycząca modeli pogodowych oferuje historyczną perspektywę wykorzystania ML w analizie pogody.
✅ Ten [pakiet slajdów](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) dotyczący modeli pogodowych oferuje historyczną perspektywę wykorzystania ML w analizie pogodowej.
## Zadania przed budową modelu
## Zadania przedbudowy
Przed rozpoczęciem budowy modelu musisz wykonać kilka zadań. Aby przetestować swoje pytanie i sformułować hipotezę na podstawie przewidywań modelu, musisz zidentyfikować i skonfigurować kilka elementów.
Zanim zaczniesz budować model, musisz wykonać kilka zadań. Aby przetestować swoje pytanie i sformułować hipotezę na podstawie prognoz modelu, musisz zidentyfikować i skonfigurować kilka elementów.
### Dane
Aby móc odpowiedzieć na pytanie z jakąkolwiek pewnością, potrzebujesz odpowiedniej ilości danych o właściwym typie. Na tym etapie musisz zrobić dwie rzeczy:
Aby z dużą pewnością odpowiedzieć na swoje pytanie, potrzebujesz odpowiedniej ilości danych odpowiedniego typu. W tym momencie musisz wykonać dwie rzeczy:
- **Zbierz dane**. Mając na uwadze poprzednią lekcję dotyczącą sprawiedliwości w analizie danych, zbieraj dane ostrożnie. Zwróć uwagę na źródła tych danych, wszelkie wrodzone uprzedzenia, które mogą zawierać, i dokumentuj ich pochodzenie.
- **Przygotuj dane**. Proces przygotowania danych obejmuje kilka kroków. Możesz potrzebować zestawić dane i znormalizować je, jeśli pochodzą z różnych źródeł. Możesz poprawić jakość i ilość danych za pomocą różnych metod, takich jak konwersja ciągów znaków na liczby (jak robimy w [Klasteryzacji](../../5-Clustering/1-Visualize/README.md)). Możesz również wygenerować nowe dane na podstawie oryginalnych (jak robimy w [Klasyfikacji](../../4-Classification/1-Introduction/README.md)). Możesz wyczyścić i edytować dane (jak zrobimy przed lekcją dotyczącą [Aplikacji Webowej](../../3-Web-App/README.md)). Na koniec możesz również potrzebować ich losowego uporządkowania i przetasowania, w zależności od technik treningowych.
- **Zbierz dane**. Mając na uwadze poprzednią lekcję na temat równości w analizie danych, zbieraj dane ostrożnie. Bądź świadomy źródeł tych danych, ewentualnych wbudowanych uprzedzeń oraz dokumentuj ich pochodzenie.
- **Przygotuj dane**. W procesie przygotowania danych jest kilka etapów. Może być konieczne zebranie danych i ich normalizacja, jeśli pochodzą z różnych źródeł. Możesz poprawić jakość i ilość danych poprzez różne metody, takie jak konwersja łańcuchów znaków na liczby (jak robimy w [Klasteryzacji](../../5-Clustering/1-Visualize/README.md)). Możesz także wygenerować nowe dane na bazie oryginalnych (jak robimy w [Klasyfikacji](../../4-Classification/1-Introduction/README.md)). Możesz oczyścić i edytować dane (jak zrobimy przed lekcją [Aplikacja Webowa](../../3-Web-App/README.md)). Na koniec może być także potrzebne losowe uporządkowanie i przetasowanie danych, zależnie od wybranych technik treningowych.
✅ Po zebraniu i przetworzeniu danych, poświęć chwilę, aby sprawdzić, czy ich struktura pozwoli Ci odpowiedzieć na zamierzone pytanie. Może się okazać, że dane nie sprawdzą się dobrze w Twoim zadaniu, jak odkrywamy w naszych lekcjach dotyczących [Klasteryzacji](../../5-Clustering/1-Visualize/README.md)!
✅ Po zebraniu i przetworzeniu danych, poświęć chwilę, by sprawdzić, czy ich forma pozwoli na odpowiedź na planowane pytanie. Może się okazać, że dane nie sprawdzą się dobrze przy danym zadaniu, co odkrywamy w lekcjach [Klasteryzacji](../../5-Clustering/1-Visualize/README.md)!
### Cechy i cel
[Cechy](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) to mierzalne właściwości Twoich danych. W wielu zbiorach danych są one wyrażone jako nagłówki kolumn, takie jak „data”, „rozmiar” czy „kolor”. Zmienna cechy, zwykle reprezentowana jako `X` w kodzie, reprezentuje zmienną wejściową, która będzie używana do trenowania modelu.
[Cechą](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) jest mierzalna właściwość danych. W wielu zbiorach danych jest ona wyrażana jako nagłówek kolumny, taki jak 'data', 'rozmiar' lub 'kolor'. Zmienna cechy, zwykle oznaczana w kodzie jako `X`, reprezentuje zmienną wejściową, która będzie używana do trenowania modelu.
Cel to rzecz, którą próbujesz przewidzieć. Cel, zwykle reprezentowany jako `y` w kodzie, odpowiada na pytanie, które próbujesz zadać swoim danym: w grudniu, jaki **kolor** dyni będzie najtańszy? W San Francisco, które dzielnice będą miały najlepsze **ceny** nieruchomości? Czasami cel nazywany jest również atrybutem etykiety.
Cel to rzecz, którą próbujesz przewidzieć. Cel, zwykle oznaczany w kodzie jako `y`, reprezentuje odpowiedź na pytanie, które zadajesz danym: w grudniu, jakie kolory dyni będą najtańsze? w San Francisco, które dzielnice będą miały najlepsze ceny nieruchomości? Czasem cel nazywany jest też etykietą (label).
### Wybór zmiennej cechy
🎓 **Wybór cech i ekstrakcja cech**Jak wybrać odpowiednią zmienną podczas budowy modelu? Prawdopodobnie przejdziesz przez proces wyboru cech lub ekstrakcji cech, aby wybrać odpowiednie zmienne dla najbardziej wydajnego modelu. Nie są to jednak te same procesy: „Ekstrakcja cech tworzy nowe cechy na podstawie funkcji oryginalnych cech, podczas gdy wybór cech zwraca podzbiór cech.” ([źródło](https://wikipedia.org/wiki/Feature_selection))
🎓 **Wybór cech i ekstrakcja cech**Skąd wiesz, którą zmienną wybrać przy budowie modelu? Prawdopodobnie przejdziesz przez proces wyboru cech lub ekstrakcji cech, aby wybrać odpowiednie zmienne do najlepszego modelu. Nie są to jednak tożsame procesy: „Ekstrakcja cech tworzy nowe cechy na podstawie funkcji oryginalnych cech, natomiast wybór cech zwraca podzbiór cech.” ([źródło](https://wikipedia.org/wiki/Feature_selection))
### Wizualizacja danych
### Wizualizuj swoje dane
Ważnym aspektem narzędzi data scientist jest możliwość wizualizacji danych za pomocą kilku doskonałych bibliotek, takich jak Seaborn czy MatPlotLib. Reprezentowanie danych wizualnie może pozwolić Ci odkryć ukryte korelacje, które możesz wykorzystać. Twoje wizualizacje mogą również pomóc w odkryciu uprzedzeń lub niezrównoważonych danych (jak odkrywamy w [Klasyfikacji](../../4-Classification/2-Classifiers-1/README.md)).
Ważnym elementem zestawu narzędzi data scientistów jest możliwość wizualizacji danych przy użyciu znakomitych bibliotek, takich jak Seaborn czy MatPlotLib. Graficzne przedstawienie danych może pozwolić na odkrycie ukrytych korelacji, które można wykorzystać. Wizualizacje mogą także pomóc w wykryciu uprzedzeń lub niezrównoważonych danych (co odkrywamy w [Klasyfikacji](../../4-Classification/2-Classifiers-1/README.md)).
### Podział zbioru danych
Przed treningiem musisz podzielić swój zbiór danych na dwie lub więcej części o nierównych rozmiarach, które nadal dobrze reprezentują dane.
Przed treningiem musisz podzielić zbiór danych na dwie lub więcej części o nierównej wielkości, które nadal dobrze reprezentują dane.
- **Trening**. Ta część zbioru danych jest dopasowana do Twojego modelu, aby go wytrenować. Ten zestaw stanowi większość oryginalnego zbioru danych.
- **Testowanie**. Zestaw testowy to niezależna grupa danych, często pochodząca z oryginalnych danych, którą używasz do potwierdzenia wydajności zbudowanego modelu.
- **Walidacja**. Zestaw walidacyjny to mniejsza niezależna grupa przykładów, którą używasz do dostrajania hiperparametrów modelu lub jego architektury, aby poprawić model. W zależności od rozmiaru danych i pytania, które zadajesz, możesz nie potrzebować budować tego trzeciego zestawu (jak zauważamy w [Prognozowaniu szeregów czasowych](../../7-TimeSeries/1-Introduction/README.md)).
- **Treningowy**. Ta część zbioru danych służy do dopasowania modelu i jego treningu. Ta grupa stanowi większość oryginalnego zbioru danych.
- **Testowy**. Zbiór testowy to niezależna grupa danych, często wyodrębniona z oryginalnego zbioru, którą używasz do potwierdzenia jakości wytrenowanego modelu.
- **Walidacyjny**. Zbiór walidacyjny to mniejsza, niezależna grupa przykładów, którą używasz do dostrojenia hiperparametrów lub architektury, aby poprawić model. W zależności od wielkości twoich danych i pytania, które zadajesz, możesz nie potrzebować tworzyć tego trzeciego zbioru (jak zaznaczamy w [Prognozowaniu szeregów czasowych](../../7-TimeSeries/1-Introduction/README.md)).
## Budowa modelu
Korzystając z danych treningowych, Twoim celem jest zbudowanie modelu, czyli statystycznej reprezentacji danych, używając różnych algorytmów do jego **trenowania**. Trenowanie modelu pozwala mu na analizę danych i dokonywanie założeń dotyczących wzorców, które odkrywa, weryfikuje i akceptuje lub odrzuca.
Korzystając z danych treningowych, twoim celem jest zbudowanie modelu, czyli statystycznej reprezentacji danych, używając różnych algorytmów do jego **wytrenowania**. Trening modelu polega na „ekspozycji” modelu na dane, co pozwala mu dokonywać założeń na temat rozpoznawanych wzorców, które następnie weryfikuje, akceptuje lub odrzuca.
### Wybór metody treningowej
### Wybierz metodę treningu
W zależności od pytania i charakteru danych wybierzesz metodę ich trenowania. Przeglądając [dokumentację Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - którą używamy w tym kursie - możesz odkryć wiele sposobów trenowania modelu. W zależności od doświadczenia możesz musieć wypróbować kilka różnych metod, aby zbudować najlepszy model. Prawdopodobnie przejdziesz przez proces, w którym data scientist ocenia wydajność modelu, podając mu dane, których wcześniej nie widział, sprawdzając dokładność, uprzedzenia i inne problemy obniżające jakość, oraz wybierając najbardziej odpowiednią metodę treningową dla danego zadania.
W zależności od pytania i charakteru danych wybierzesz metodę treningu. Przeglądając [dokumentację Scikit-learn](https://scikit-learn.org/stable/user_guide.html) – której używamy w tym kursie – możesz poznać wiele sposobów trenowania modelu. W zależności od doświadczenia, możesz spróbować kilku różnych metod, aby zbudować najlepszy model. Najczęściej proces ten obejmuje ocenę wydajności modelu przez data scientistów - podają im dane niewidziane wcześniej, sprawdzają dokładność, uprzedzenia i inne problemy obniżające jakość, a następnie wybierają najbardziej odpowiednią metodę treningu.
### Trenowanie modelu
### Wytrenuj model
Mając dane treningowe, jesteś gotowy, aby „dopasować” je do stworzenia modelu. Zauważysz, że w wielu bibliotekach ML znajdziesz kod „model.fit” - to właśnie wtedy przesyłasz zmienną cechy jako tablicę wartości (zwykle „X”) i zmienną celu (zwykle „y”).
Mając dane treningowe, jesteś gotów „dopasować” je, aby stworzyć model. W wielu bibliotekach ML znajdziesz polecenie 'model.fit' - właśnie wtedy przesyłasz swoją zmienną cechy jako tablicę wartości (zwykle 'X') oraz zmienną celu (zwykle 'y').
### Ocena modelu
### Oceń model
Po zakończeniu procesu treningowego (może to zająć wiele iteracji, czyli „epok”, aby wytrenować duży model), będziesz mógł ocenić jakość modelu, używając danych testowych do oceny jego wydajności. Te dane są podzbiorem oryginalnych danych, których model wcześniej nie analizował. Możesz wydrukować tabelę metryk dotyczących jakości modelu.
Po zakończeniu procesu treningowego (który może wymagać wielu iteracji, zwanych 'epokami', by wytrenować duży model), możesz ocenić jakość modelu, używając danych testowych do pomiaru jego wydajności. Dane te to podzbiór oryginalnych danych, których model wcześniej nie analizował. Możesz wyświetlić tabelę z metrykami jakości swojego modelu.
🎓 **Dopasowanie modelu**
W kontekście uczenia maszynowego dopasowanie modelu odnosi się do dokładności funkcji modelu, gdy próbuje analizować dane, których nie zna.
W kontekście uczenia maszynowego dopasowanie modelu odnosi się do dokładności funkcji leżącej u podstaw modelu podczas próby analizy nieznanych mu danych.
🎓 **Niedopasowanie** i **przeuczenie** to częste problemy, które obniżają jakość modelu, gdy model dopasowuje się albo zbyt słabo, albo zbyt dobrze. Powoduje to, że model dokonuje przewidywań albo zbyt ściśle związanych, albo zbyt luźno związanych z danymi treningowymi. Model przeuczony przewiduje dane treningowe zbyt dobrze, ponieważ nauczył się zbyt dobrze szczegółów i szumów danych. Model niedopasowany nie jest dokładny, ponieważ nie potrafi ani dokładnie analizować danych treningowych, ani danych, których jeszcze „nie widział”.
🎓 **Niedopasowanie** i **przeuczenie** to częste problemy obniżające jakość modelu, gdy model dopasowuje się albo zbyt słabo, albo zbyt mocno. Powoduje to, że prognozy modelu są zbyt dokładnie (overfit) lub zbyt niedokładnie (underfit) dopasowane do danych treningowych. Model overfit przewiduje dane treningowe zbyt dokładnie, ponieważ zbyt dobrze poznał szczegóły i szumy danych. Model underfit jest niedokładny, ponieważ nie potrafi ani poprawnie analizować danych treningowych, ani danych, których wcześniej nie „widział”.
> Infografika autorstwa [Jen Looper](https://twitter.com/jenlooper)
## Dostrajanie parametrów
Po zakończeniu początkowego treningu, obserwuj jakość modelu i rozważ jego poprawę poprzez dostosowanie „hiperparametrów”. Przeczytaj więcej o tym procesie [w dokumentacji](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
Gdy wstępny trening jest ukończony, obserwuj jakość modelu i rozważ jego ulepszenie poprzez dostrajanie 'hiperparametrów'. Więcej informacji o tym procesie znajdziesz [w dokumentacji](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Przewidywanie
## Prognozowanie
To moment, w którym możesz użyć zupełnie nowych danych, aby przetestować dokładność swojego modelu. W „zastosowanym” środowisku ML, gdzie budujesz zasoby internetowe do użycia modelu w produkcji, proces ten może obejmować zbieranie danych od użytkownika (np. naciśnięcie przycisku), aby ustawić zmienną i przesłać ją do modelu w celu wnioskowania lub oceny.
To moment, w którym możesz użyć całkowicie nowych danych, aby przetestować dokładność modelu. W praktycznym zastosowaniu ML, gdzie budujesz zasoby webowe do użycia modelu w produkcji, proces ten może wiązać się z pozyskaniem danych od użytkownika (np. naciśnięcie przycisku), ustawieniem zmiennej i przesłaniem jej do modelu do inferencji, czyli oceny.
W tych lekcjach odkryjesz, jak używać tych kroków do przygotowania, budowy, testowania, oceny i przewidywania - wszystkie gesty data scientist i więcej, w miarę jak postępujesz w swojej podróży, aby zostać „full stack” inżynierem ML.
W tych lekcjach poznasz, jak korzystać z tych kroków, aby przygotować, zbudować, przetestować, ocenić i prognozować – wszystkie gesty data scientista i jeszcze więcej, na drodze do zostania inżynierem ML 'full stack'.
---
## 🚀Wyzwanie
Narysuj diagram przepływu przedstawiający kroki praktyka ML. Gdzie widzisz siebie teraz w tym procesie? Gdzie przewidujesz, że napotkasz trudności? Co wydaje się łatwe?
Narysuj schemat blokowy odzwierciedlający kroki praktyka ML. Gdzie widzisz siebie obecnie w tym procesie? Gdzie przewidujesz trudności? Co wydaje ci się łatwe?
## [Quiz po lekcji](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
## Przegląd i samodzielna nauka
## Powtórka i samodzielna nauka
Poszukaj w internecie wywiadów z data scientistami, którzy omawiają swoją codzienną pracę. Oto [jeden](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Wyszukaj w internecie wywiady z data scientistami, którzy opowiadają o swojej codziennej pracy. Oto [jeden](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Zadanie
[Przeprowadź wywiad z data scientistem](assignment.md)
[Przeprowadź wywiad z data scientistą](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 o krytycznym 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 korzystania z tego tłumaczenia.
Dokument ten został przetłumaczony za pomocą usługi tłumaczeń AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dokładamy starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w języku źródłowym powinien być uznawany za wersję autorytatywną. W przypadku informacji o kluczowym znaczeniu 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.
## [Quiz przed wykładem](https://ff-quizzes.netlify.app/en/ml/)
> ### [Ta lekcja jest dostępna w R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
> ### [Ta lekcja jest też dostępna w R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Wprowadzenie
Do tej pory poznaliście, czym jest regresja na podstawie przykładowych danych z zestawu danych dotyczącego cen dyni, które będziemy wykorzystywać w trakcie tej lekcji. Wizualizowaliście je także za pomocą Matplotlib.
Do tej pory zapoznaliście się z tym, czym jest regresja na podstawie przykładowych danych z zestawu danych o cenach dyni, który będziemy wykorzystywać w całej lekcji. Wizualizowaliście je również za pomocą Matplotlib.
Teraz jesteście gotowi, by zagłębić się bardziej w regresję dla ML. Podczas gdy wizualizacja pozwala zrozumieć dane, prawdziwa siła uczenia maszynowego pochodzi z _trenowania modeli_. Modele są trenowane na danych historycznych, aby automatycznie wychwytywać zależności w danych i umożliwiają przewidywanie wyników dla nowych danych, których model wcześniej nie widział.
Teraz jesteście gotowi, by zagłębić się w regresję w ML. Podczas gdy wizualizacja pozwala zrozumieć dane, prawdziwa moc uczenia maszynowego pochodzi z _trenowania modeli_. Modele są trenowane na danych historycznych, aby automatycznie uchwycić zależności danych, i pozwalają przewidywać wyniki dla nowych danych, których model wcześniej nie widział.
W tej lekcji dowiecie się więcej o dwóch rodzajach regresji: _podstawowej regresji liniowej_ i _regresji wielomianowej_, wraz z wyjaśnieniem matematyki stojącej za tymi technikami. Te modele pozwolą nam przewidzieć ceny dyni w zależności od różnych danych wejściowych.
W tej lekcji poznacie dwa typy regresji: _podstawową regresję liniową_ i _regresję wielomianową_, wraz z częścią matematyki leżącej u podstaw tych technik. Te modele pozwolą nam przewidywać ceny dyni w zależności od różnych danych wejściowych.
[](https://youtu.be/CRxFT8oTDMg "ML dla początkujących - Zrozumienie regresji liniowej")
[](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 Kliknij powyższy obrazek, aby obejrzeć krótki przegląd regresji liniowej.
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film podsumowujący regresję liniową.
> W całym tym kursie zakładamy minimalną znajomość matematyki i staramy się uczynić ją dostępną dla uczniów z innych dziedzin, więc zwracaj uwagę na notatki, 🧮 wzmianki, diagramy i inne narzędzia wspomagające naukę.
> W całym kursie zakładamy minimalną znajomość matematyki i staramy się uczynić go dostępnym dla studentów z innych dziedzin, więc zwracaj uwagę na notatki, 🧮 uwagi, diagramy i inne narzędzia pomagające zrozumieć materiał.
### Wymagania wstępne
Powinieneś już znać strukturę danych dotyczących dyni, które badamy. Możesz je znaleźć wstępnie załadowane i wyczyszczone w pliku _notebook.ipynb_ towarzyszącym tej lekcji. W tym pliku cena dyni jest wyświetlana za korzec w nowej ramce danych. Upewnij się, że potrafisz uruchomić te notatniki w kernelach w Visual Studio Code.
Powinieneś już znać strukturę danych o dyniach, które badamy. Znajdziesz je wstępnie załadowane i wyczyszczone w pliku _notebook.ipynb_ dołączonym do tej lekcji. W pliku cena dyni jest wyświetlana za kosz (bushel) w nowej ramce danych. Upewnij się, że potrafisz uruchomić te notatniki w kernelach w Visual Studio Code.
### Przygotowanie
Dla przypomnienia, ładujesz te dane, aby móc zadawać im pytania.
Przypominamy, że ładujesz te dane, aby móc zadawać im pytania.
- Kiedy jest najlepszy czas na kupno dyni?
- Jakiej ceny mogę oczekiwać za skrzynkę miniaturowych dyń?
- Czy powinienem kupić je w półkorcowych koszach czy w pudełku o pojemności 1 1/9 korca?
Zanurzmy się dalej w te dane.
- Kiedy jest najlepszy czas na zakup dyń?
- Jaką cenę mogę się spodziewać za opakowanie mini dyń?
- Czy powinienem kupować je w połowie kosza (half-bushel), czy w kartonie 1 1/9 bushel?
Zanurzmy się głębiej w te dane.
W poprzedniej lekcji stworzyłeś ramkę danych Pandas i wypełniłeś ją częścią oryginalnego zestawu danych, standaryzując ceny za korzec. Zrobienie tego pozwoliło zebrać około 400 punktów danych tylko dla miesięcy jesiennych.
W poprzedniej lekcji utworzyłeś ramkę danych Pandas i wypełniłeś ją częścią oryginalnego zestawu, standaryzując ceny za kosz. Jednak uzyskałeś wtedy tylko około 400 punktów danych i tylko za miesiące jesienne.
Spójrz na dane, które wstępnie załadowaliśmy w notatniku towarzyszącym tej lekcji. Dane są już załadowane, a na wykresie rozrzutu wstępnie pokazano dane miesięczne. Być może możemy uzyskać trochę więcej szczegółów o naturze danych, oczyszczając je bardziej.
Spójrz na dane, które wstępnie załadowaliśmy do notatnika towarzyszącego tej lekcji. Dane są wczytane, a na wykresie punktowym pokazano dane miesięczne. Może uda się uzyskać więcej szczegółów na temat charakteru danych, czyszcząc je bardziej.
## Linia regresji liniowej
Jak nauczyliście się w Lekcji 1, celem regresji liniowej jest stworzenie linii, która:
Jak się nauczyłeś w Lekcji 1, celem ćwiczenia z regresji liniowej jest możliwość narysowania linii, która:
- **Pokaże zależności między zmiennymi**.
- **Pozwoli na dokonywanie predykcji** nowych punktów danych względem tej linii.
- **Pokazuje zależności zmiennych**. Pokazuje związek między zmiennymi
- **Dokonuje prognoz**. Dokonuje dokładnych przewidywań, gdzie nowy punkt danych będzie się znajdował względem tej linii.
Typowo dla **Metody najmniejszych kwadratów** rysowana jest właśnie taka linia. Termin "Najmniejszych kwadratów" odnosi się do procesu minimalizowania całkowitego błędu naszego modelu. Dla każdego punktu danych mierzymy pionową odległość (zwaną resztą) pomiędzy rzeczywistym punktem a naszą linią regresji.
Typową metodą do rysowania takiej linii jest **Regresja najmniejszych kwadratów**. Termin "najmniejsze kwadraty" odnosi się do procesu minimalizowania całkowitego błędu w naszym modelu. Dla każdego punktu danych mierzymy pionową odległość (zwaną resztą) między rzeczywistym punktem a naszą linią regresji.
Te odległości kwadratujemy z dwóch głównych powodów:
Kwadratujemy te odległości z dwóch głównych powodów:
1. **Wielkość ważniejsza od kierunku:** Chcemy traktować błąd -5 tak samo jak błąd +5. Kwadrat zamienia wszystkie wartości na dodatnie.
1. **Wielkość zamiast kierunku:** Chcemy traktować błąd -5 tak samo jak błąd +5. Kwadratując, wszystkie wartości stają się dodatnie.
2. **Karanie wartości odstających:** Kwadratowanie nadaje większą wagę większym błędom, zmuszając linię do bycia bliżej punktów odstających.
2. **Karzemy wartości odstające:** Kwadratowanie daje większą wagę większym błędom, zmuszając linię, aby była bliżej punktów odległych.
Następnie sumujemy wszystkie te kwadraty. Naszym celem jest znalezienie właśnie takiej linii, dla której ta suma jest najmniejsza — stąd nazwa "Najmniejszych kwadratów".
Następnie sumujemy wszystkie te wartości kwadratowe. Naszym celem jest znalezienie konkretnej linii, dla której ta suma jest najmniejsza (najmniejsza możliwa wartość) — stąd nazwa "najmniejszych kwadratów".
> **🧮 Pokaż mi matematykę**
>
> Ta linia, zwana _linią najlepszego dopasowania_, może być wyrażona za pomocą [równania](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> **🧮 Pokaż mi matematykę**
>
> Ta linia, nazywana _linią najlepszego dopasowania_, może być wyrażona za pomocą [równania](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` to 'zmienna objaśniająca'. `Y` to 'zmienna zależna'. Nachylenie linii to `b`, a `a` to punkt przecięcia z osią Y, czyli wartość `Y` gdy `X = 0`.
> `X` to 'zmienna objaśniająca'. `Y` to 'zmienna zależna'. Nachylenie linii to `b`, a `a` to punkt przecięcia z osią y, czyli wartość `Y` gdy `X = 0`.
>
>
> Najpierw obliczamy nachylenie `b`. Infografika autorstwa [Jen Looper](https://twitter.com/jenlooper)
>
> Innymi słowy, odnosząc się do naszego oryginalnego pytania o dynie: "przewidzieć cenę dyni za korzec w zależności od miesiąca", `X` będzie odpowiadać cenie, a `Y` będzie odpowiadać miesiącowi sprzedaży.
> Innymi słowy, odnosząc się do oryginalnego pytania dla danych o dyniach: "przewidzieć cenę dyni za kosz według miesiąca", `X` oznacza cenę, a `Y` miesiąc sprzedaży.
>
>
> Oblicz wartość Y. Jeśli płacisz około 4 dolarów, musi to być kwiecień! Infografika autorstwa [Jen Looper](https://twitter.com/jenlooper)
> Oblicz wartość Y. Jeśli płacisz około 4 dolarów, to musi być kwiecień! Infografika autorstwa [Jen Looper](https://twitter.com/jenlooper)
>
> Matematyka obliczająca linię musi uwzględniać nachylenie, które zależy też od punktu przecięcia, czyli wartości `Y` gdy `X = 0`.
> Matematyka obliczająca linię musi uwzględniać nachylenie linii, które zależy również od punktu przecięcia, czyli gdzie `Y` znajduje się gdy `X = 0`.
>
> Możesz zobaczyć metodę obliczania tych wartości na stronie [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Odwiedź także [Ten kalkulator najmniejszych kwadratów](https://www.mathsisfun.com/data/least-squares-calculator.html), aby zobaczyć, jak wartości liczb wpływają na linię.
> Możesz zobaczyć sposób obliczeń tych wartości na stronie [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Odwiedź też [ten kalkulator najmniejszych kwadratów](https://www.mathsisfun.com/data/least-squares-calculator.html), aby zobaczyć, jak wartości liczb wpływają na linię.
## Korelacja
Jeszcze jedno pojęcie, które warto poznać, to **współczynnik korelacji** między danymi zmiennymi X i Y. Korzystając z wykresu rozrzutu, można szybko zwizualizować ten współczynnik. Wykres z punktami ułożonymi w porządną linię ma wysoką korelację, natomiast wykres, gdzie punkty są rozrzucone wszędzie pomiędzy X i Y, ma niską korelację.
Jeszcze jedno pojęcie do zrozumienia to **współczynnik korelacji** między danymi zmiennymi X i Y. Na wykresie punktowym można szybko zwizualizować ten współczynnik. Wykres z punktami ułożonymi w zgrabną linię ma wysoką korelację, natomiast wykres z punktami rozrzuconymi wszędzie między X a Y ma niską korelację.
Dobry model regresji liniowej będzie miał wysoki (bliższy 1 niż 0) współczynnik korelacji wyznaczony metodą najmniejszych kwadratów z linią regresji.
Dobry model regresji liniowej będzie miał wysoki (bliższy 1 niż 0) współczynnik korelacji, korzystając z metody regresji najmniejszych kwadratów z linią regresji.
✅ Uruchom notatnik dołączony do tej lekcji i spójrz na wykres rozrzutu Miesiąc a Cena. Czy dane łączące miesiąc z ceną sprzedaży dyni mają wysoką czy niską korelację według Twojej wizualnej interpretacji wykresu rozrzutu? Czy to się zmienia, jeśli użyjesz bardziej szczegółowej miary niż `Miesiąc`, np. *dzień roku* (liczba dni od początku roku)?
✅ Uruchom notatnik towarzyszący tej lekcji i spójrz na wykres rozrzutu Miesiąc do Cena. Czy dane łączące Miesiąc z Ceną za dynie wydają się mieć wysoką czy niską korelację, według Twojej wizualnej interpretacji wykresu? Czy to się zmienia, jeśli użyjesz bardziej szczegółowej miary zamiast `Month`, np. *dnia roku* (czyli liczby dni od początku roku)?
W poniższym kodzie założymy, że wyczyściliśmy dane i uzyskaliśmy ramkę danych o nazwie `new_pumpkins`, podobną do poniższej:
W poniższym kodzie założymy, że dane zostały wyczyszczone i otrzymaliśmy ramkę danych `new_pumpkins`, podobną do następującej:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
> Kod do oczyszczenia danych jest dostępny w [`notebook.ipynb`](notebook.ipynb). Wykonaliśmy te same kroki czyszczenia, co w poprzedniej lekcji, i obliczyliśmy kolumnę `DayOfYear` według następującego wyrażenia:
> Kod do wyczyszczenia danych jest dostępny w [`notebook.ipynb`](notebook.ipynb). Wykonaliśmy te same kroki czyszczenia co w poprzedniej lekcji i obliczyliśmy kolumnę `DayOfYear` za pomocą następującego wyrażenia:
Teraz, gdy rozumiesz matematykę stojącą za regresją liniową, stwórzmy model regresji, aby sprawdzić, czy potrafimy przewidzieć, która paczka dyń będzie miała najlepsze ceny. Ktoś kupujący dynie na świąteczną plantację może chcieć tych informacji, by zoptymalizować swoje zakupy paczek dyń na plantację.
Teraz, gdy rozumiesz matematykę stojącą za regresją liniową, stwórzmy model regresji, aby zobaczyć, czy możemy przewidzieć, które opakowanie dyń będzie miało najlepsze ceny. Osoba kupująca dynie na świąteczną plantację może chcieć te informacje, aby zoptymalizować swoje zakupy opakowań dyni na tę plantację.
## Szukanie korelacji
[](https://youtu.be/uoRq-lW2eQo "ML dla początkujących - Szukanie korelacji: klucz do regresji liniowej")
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Kliknij powyższy obrazek, aby zobaczyć krótki przegląd korelacji.
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film o korelacji.
Z poprzedniej lekcji prawdopodobnie widziałeś, że średnia cena dla różnych miesięcy wygląda tak:
Z poprzedniej lekcji prawdopodobnie zauważyłeś, że średnia cena w różnych miesiącach wygląda tak:
<imgalt="Średnia cena wg miesiąca" src="../../../../translated_images/pl/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="Average price by month" src="../../../../translated_images/pl/barchart.a833ea9194346d76.webp"width="50%"/>
To sugeruje, że może istnieć korelacja, i możemy spróbować wytrenować liniowy model regresji, by przewidzieć zależność między `Month` a `Price` lub między `DayOfYear` a `Price`. Oto wykres rozrzutu pokazujący tę drugą zależność:
To sugeruje, że powinno istnieć pewne powiązanie, i możemy spróbować wytrenować model regresji liniowej, aby przewidzieć zależność między `Month` a `Price`, lub między `DayOfYear` a `Price`. Oto wykres punktowy pokazujący tę ostatnią zależność:
<imgalt="Wykres rozrzutu Cena vs. Dzień roku" src="../../../../translated_images/pl/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pl/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
Sprawdźmy, czy jest korelacja, używając funkcji `corr`:
Wygląda na to, że korelacja jest dość mała, -0.15 wg `Month` i -0.17 wg `DayOfMonth`, ale mogłaby istnieć inna ważna zależność. Wygląda na to, że istnieją różne grupy cen odpowiadające różnym odmianom dyni. Aby potwierdzić tę hipotezę, nanieśmy każdy gatunek dyń innym kolorem. Przekazując argument `ax` funkcji `scatter`, możemy nanieść wszystkie punkty na tym samym wykresie:
Wygląda na to, że korelacja jest dość mała, -0.15 przy `Month` i -0.17 przy `DayOfYear`, ale może istnieć inna ważna zależność. Wydaje się, że istnieją różne klastry cen odpowiadające różnym odmianom dyni. Aby potwierdzić tę hipotezę, narysujmy każdą kategorię dyni innym kolorem. Przekazując parametr `ax` do funkcji `scatter`, możemy narysować wszystkie punkty na tym samym wykresie:
```python
ax=None
@ -140,40 +140,40 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="Wykres rozrzutu Cena vs. Dzień roku" src="../../../../translated_images/pl/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pl/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
Jeśli teraz obliczymy korelację między `Price` a `DayOfYear`funkcją `corr`, otrzymamy wartość około `-0.27`– co oznacza, że trening modelu predykcyjnego ma sens.
Jeśli teraz obliczymy korelację między `Price` a `DayOfYear`używając funkcji `corr`, otrzymamy coś około `-0.27` - co oznacza, że trenowanie modelu predykcyjnego ma sens.
> Przed wytrenowaniem modelu regresji liniowej ważne jest, aby upewnić się, że dane są czyste. Regresja liniowa źle radzi sobie z brakującymi wartościami, więc warto usunąć wszystkie puste komórki:
> Przed trenowaniem modelu regresji liniowej ważne jest, aby nasze dane były czyste. Regresja liniowa nie działa dobrze z brakującymi wartościami, więc warto pozbyć się wszystkich pustych komórek:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Innym podejściem byłoby wypełnienie tych pustych wartości średnimi wartościami z odpowiednich kolumn.
Innym podejściem byłoby zastąpienie pustych wartości średnimi wartościami z danej kolumny.
## Prosta regresja liniowa
[](https://youtu.be/e4c_UP2fSjg "ML dla początkujących - regresja liniowa i wielomianowa z użyciem Scikit-learn")
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 Kliknij powyższy obrazek, aby obejrzeć krótki przegląd regresji liniowej i wielomianowej.
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film podsumowujący regresję liniową i wielomianową.
Aby wytrenować nasz model regresji liniowej, użyjemy biblioteki **Scikit-learn**.
@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Zaczynamy od rozdzielenia wartości wejściowych (cech) i oczekiwanego wyniku (etykiety) do osobnych tablic numpy:
Zaczynamy od rozdzielenia wartości wejściowych (cech) oraz oczekiwanego wyniku (etykiety) do osobnych tablic numpy:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Zauważ, że musieliśmy wykonać `reshape` na danych wejściowych, aby pakiet Linear Regression zrozumiał je poprawnie. Regresja liniowa oczekuje 2-wymiarowej tablicy jako wejścia, gdzie każdy wiersz tablicy odpowiada wektorowi cech wejściowych. W naszym przypadku, ponieważ mamy tylko jedno wejście – potrzebujemy tablicy o kształcie N×1, gdzie N to rozmiar zestawu danych.
> Zauważ, że musieliśmy wykonać `reshape` na danych wejściowych, aby pakiet regresji liniowej poprawnie zrozumiał dane. Regresja liniowa oczekuje tablicy 2-wymiarowej, w której każdy wiersz odpowiada wektorowi cech wejściowych. W naszym przypadku, ponieważ mamy tylko jedno wejście - potrzebujemy tablicy o kształcie N×1, gdzie N to rozmiar zbioru danych.
Następnie musimy podzielić dane na zbiory treningowy i testowy, aby móc zweryfikować model po treningu:
Następnie musimy podzielić dane na zestawy treningowe i testowe, aby po treningu zweryfikować nasz model:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Na koniec wytrenowanie faktycznego modelu regresji liniowej zajmuje tylko dwie linijki kodu. Definiujemy obiekt `LinearRegression` i dopasowujemy go do naszych danych za pomocą metody `fit`:
Na koniec trenowanie właściwego modelu regresji liniowej zajmuje tylko dwie linijki kodu. Definiujemy obiekt `LinearRegression` i dopasowujemy go do naszych danych za pomocą metody `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
Obiekt `LinearRegression` po dopasowaniu (`fit`) zawiera wszystkie współczynniki regresji, do których można uzyskać dostęp za pomocą właściwości `.coef_`. W naszym przypadku jest tylko jeden współczynnik, który powinien wynosić około `-0.017`. Oznacza to, że ceny wydają się nieco spadać z czasem, ale niezbyt mocno, około 2 centów dziennie. Możemy również uzyskać punkt przecięcia regresji z osią Y, korzystając z `lin_reg.intercept_` - będzie to około `21` w naszym przypadku, co wskazuje na cenę na początku roku.
Obiekt `LinearRegression` po dopasowaniu (`fit`) zawiera wszystkie współczynniki regresji, do których można uzyskać dostęp za pomocą właściwości `.coef_`. W naszym przypadku jest tylko jeden współczynnik, który powinien mieć wartość około `-0.017`. Oznacza to, że ceny wydają się nieznacznie spadać wraz z upływem czasu, ale niezbyt dużo, około 2 centów dziennie. Możemy również uzyskać punkt przecięcia regresji z osią Y za pomocą `lin_reg.intercept_` - w naszym przypadku będzie to około `21`, co wskazuje na cenę na początku roku.
Aby sprawdzić, jak dokładny jest nasz model, możemy przewidzieć ceny na zbiorze testowym, a następnie zmierzyć, jak bliskie są nasze przewidywania wartościom oczekiwanym. Można to zrobić za pomocą wskaźnika błędu średniokwadratowego (RMSE), który jest pierwiastkiem średniej ze wszystkich kwadratów różnic między wartością oczekiwaną a przewidywaną.
Aby zobaczyć, jak dokładny jest nasz model, możemy przewidzieć ceny na zbiorze testowym, a następnie zmierzyć, jak bliskie są nasze prognozy wartościom oczekiwanym. Można to zrobić za pomocą wskaźnika błędu średniokwadratowego pierwiastkowego (RMSE), który jest pierwiastkiem z średniej wszystkich kwadratów różnic między wartością oczekiwaną a przewidywaną.
Nasz błąd wydaje się wynosić około 2 punktów, co stanowi ~17%. Niezbyt dobrze. Innym wskaźnikiem jakości modelu jest **współczynnik determinacji**, który można uzyskać w ten sposób:
Nasz błąd wydaje się wynosić około 2 punkty, czyli ~17%. Niezbyt dobrze. Innym wskaźnikiem jakości modelu jest **współczynnik determinacji**, który można otrzymać w ten sposób:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Jeśli wartość jest równa 0, oznacza to, że model nie uwzględnia danych wejściowych i działa jako *najgorszy liniowy predyktor*, którym jest po prostu średnia z wyniku. Wartość 1 oznacza, że możemy idealnie przewidzieć wszystkie wartości oczekiwane. W naszym przypadku współczynnik wynosi około 0.06, co jest dość niskie.
Jeśli wartość wynosi 0, oznacza to, że model nie uwzględnia danych wejściowych i działa jako *najgorszy liniowy predyktor*, którym jest po prostu średnia wartość wyniku. Wartość 1 oznacza, że możemy perfekcyjnie przewidzieć wszystkie oczekiwane wyniki. W naszym przypadku współczynnik wynosi około 0.06, co jest dość niskie.
Możemy również narysować dane testowe razem z linią regresji, aby lepiej zobaczyć, jak działa regresja w naszym przypadku:
Możemy także narysować dane testowe razem z linią regresji, aby lepiej zobaczyć, jak działa regresja w naszym przypadku:
```python
plt.scatter(X_test,y_test)
@ -235,17 +235,17 @@ plt.plot(X_test,pred)
## Regresja wielomianowa
Innym typem regresji liniowej jest regresja wielomianowa. Chociaż czasem istnieje liniowa zależność między zmiennymi – im większa dynia pod względem objętości, tym wyższa cena – to czasem tych zależności nie da się przedstawić jako płaszczyzna lub prosta.
Innym typem regresji liniowej jest regresja wielomianowa. Choć czasem między zmiennymi zachodzi liniowa zależność – im większa dynia pod względem objętości, tym wyższa cena – czasami takie zależności nie mogą być przedstawione jako płaszczyzna czy linia prosta.
✅ Oto [kilka innych przykładów](https://online.stat.psu.edu/stat501/lesson/9/9.8) danych, dla których można zastosować regresję wielomianową
✅ Oto [kilka kolejnych przykładów](https://online.stat.psu.edu/stat501/lesson/9/9.8) danych, które mogą wymagać regresji wielomianowej
Spójrz ponownie na zależność między Datą a Ceną. Czy ta wykres rozrzutu koniecznie powinien być analizowany za pomocą prostej? Czy ceny nie mogą się wahać? W takim przypadku można spróbować regresji wielomianowej.
Spójrz jeszcze raz na związek między Datą a Ceną. Czy ten wykres punktowy musi koniecznie być analizowany za pomocą linii prostej? Czy ceny nie mogą się wahać? W takim przypadku można spróbować regresji wielomianowej.
✅ Wielomiany to wyrażenia matematyczne, które mogą się składać z jednej lub więcej zmiennych oraz współczynników
✅ Wielomiany to wyrażenia matematyczne, które mogą składać się z jednej lub więcej zmiennych i współczynników
Regresja wielomianowa tworzy zakrzywioną linię, aby lepiej dopasować dane nieliniowe. W naszym przypadku, jeśli do danych wejściowych dodamy zmienną `DayOfYear` podniesioną do kwadratu, powinniśmy być w stanie dopasować nasze dane krzywą paraboliczną, która będzie miała minimum w pewnym punkcie w ciągu roku.
Regresja wielomianowa tworzy krzywą linię, aby lepiej dopasować dane nieliniowe. W naszym przypadku, jeśli do danych wejściowych dodamy zmienną `DayOfYear`<sup>2</sup>, powinniśmy być w stanie dopasować dane krzywą paraboliczną, która będzie miała minimum w pewnym momencie w ciągu roku.
Scikit-learn zawiera przydatne [API do łączenia etapów przetwarzania danych](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline). **Pipeline** to łańcuch **estymatorów**. W naszym przypadku stworzymy pipeline, który najpierw doda cechy wielomianowe do naszego modelu, a następnie wytrenuje regresję:
Scikit-learn zawiera przydatne [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) do łączenia różnych etapów przetwarzania danych razem. **Pipeline** to łańcuch **estimatorów**. W naszym przypadku stworzymy pipeline, który najpierw dodaje cechy wielomianowe do naszego modelu, a następnie trenuje regresję:
```python
from sklearn.preprocessing import PolynomialFeatures
Użycie `PolynomialFeatures(2)` oznacza, że uwzględnimy wszystkie wielomiany drugiego stopnia z danych wejściowych. W naszym przypadku będzie to po prostu `DayOfYear`<sup>2</sup>, ale przy dwóch zmiennych wejściowych X i Y doda X<sup>2</sup>, XY oraz Y<sup>2</sup>. Możemy również użyć wielomianów wyższego stopnia, jeśli chcemy.
Użycie `PolynomialFeatures(2)` oznacza, że uwzględnimy wszystkie wielomiany drugiego stopnia z danych wejściowych. W naszym przypadku będzie to po prostu `DayOfYear`<sup>2</sup>, ale mając dwie zmienne wejściowe X i Y, dodane zostaną X<sup>2</sup>, XY oraz Y<sup>2</sup>. Możemy także użyć wielomianów wyższych stopni, jeśli chcemy.
Pipelines można używać w taki sam sposób, jak oryginalny obiekt `LinearRegression`, tzn. możemy wywołać `fit` na pipeline, a następnie użyć `predict`, aby uzyskać wyniki prognozy:
Aby narysować gładką krzywą aproksymacyjną, używamy `np.linspace` do utworzenia jednolitego zakresu wartości wejściowych, zamiast bezpośrednio wykreślać na nieuporządkowanych danych testowych (co dałoby zygzakowatą linię):
Pipeline można używać tak samo jak oryginalny obiekt `LinearRegression`, tj. możemy `fit` pipeline, a następnie użyć `predict`, aby uzyskać przewidywania. Oto wykres pokazujący dane testowe i krzywą aproksymacji:
Oto wykres pokazujący dane testowe oraz krzywą aproksymacyjną:
Korzystając z regresji wielomianowej, możemy uzyskać nieco niższy MSE i wyższy współczynnik determinacji, ale nieznacznie. Musimy uwzględnić inne cechy!
Wykorzystując regresję wielomianową, możemy uzyskać nieco niższe RMSE i wyższy współczynnik determinacji, ale niezbyt znacząco. Musimy wziąć pod uwagę inne cechy!
> Możesz zauważyć, że minimalne ceny dyń są obserwowane około Halloween. Jak to wyjaśnisz?
> Możesz zauważyć, że minimalne ceny dyni występują gdzieś wokół Halloween. Jak możesz to wyjaśnić?
🎃 Gratulacje, właśnie stworzyłeś model, który może pomóc przewidzieć cenę dyń na ciasto. Prawdopodobnie możesz powtórzyć tę samą procedurę dla wszystkich typów dyń, ale byłoby to żmudne. Nauczmy się teraz, jak uwzględnić odmianę dyni w naszym modelu!
🎃 Gratulacje, właśnie stworzyłeś model, który może pomóc przewidzieć cenę dyni na ciasto. Prawdopodobnie możesz powtórzyć tę samą procedurę dla wszystkich rodzajów dyni, ale byłoby to żmudne. Nauczmy się teraz, jak uwzględnić odmianę dyni w naszym modelu!
## Cechy kategoryczne
W idealnym świecie chcielibyśmy móc przewidywać ceny dla różnych odmian dyni przy użyciu tego samego modelu. Jednak kolumna `Variety` jest nieco inna niż kolumny takie jak `Month`, ponieważ zawiera wartości niebędące liczbami. Takie kolumny nazywamy **kategorycznymi**.
W idealnym świecie chcemy móc przewidywać ceny dla różnych odmian dyni przy użyciu tego samego modelu. Jednak kolumna `Variety` jest nieco inna niż kolumny takie jak `Month`, ponieważ zawiera wartości nienumeryczne. Takie kolumny nazywamy **kategorycznymi**.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
[](https://youtu.be/DYGliioIAE0 "ML dla początkujących - przewidywania cech kategorycznych za pomocą regresji liniowej")
> 🎥 Kliknij powyższy obraz, aby obejrzeć krótki film o użyciu cech kategorycznych.
> 🎥 Kliknij powyższy obraz, aby zobaczyć krótki film o używaniu cech kategorycznych.
Tutaj możesz zobaczyć, jak średnia cena zależy od odmiany:
Tu widać, jak średnia cena zależy od odmiany:
<imgalt="Average price by variety"src="../../../../translated_images/pl/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
Aby uwzględnić odmianę, najpierw musimy przekonwertować ją na postać numeryczną, czyli ją **zdekodować (zakodować)**. Istnieje kilka sposobów, jak to zrobić:
Aby uwzględnić odmianę, najpierw musimy ją przekonwertować na formę numeryczną, czyli **zakodować**. Istnieje kilka sposobów, aby to zrobić:
* Proste **kodowanie numeryczne**zbuduje tabelę różnych odmian, a następnie zastąpi nazwę odmiany indeksem w tej tabeli. To nie jest najlepszy pomysł dla regresji liniowej, ponieważ regresja liniowa bierze rzeczywistą wartość numeryczną indeksu i dodaje ją do wyniku, mnożąc przez pewien współczynnik. W naszym przypadku zależność między numerem indeksu a ceną jest wyraźnie nieliniowa, nawet jeśli upewnimy się, że indeksy są uporządkowane w konkretny sposób.
* **Kodowanie one-hot** zastąpi kolumnę `Variety`4 różnymi kolumnami, po jednej dla każdej odmiany. Każda kolumna będzie zawierać `1`, jeśli odpowiadający wiersz jest danej odmiany, i `0` w przeciwnym wypadku. Oznacza to, że w regresji liniowej będzie cztery współczynniki, po jednym dla każdej odmiany dyni, odpowiedzialnych za "cenę startową" (a raczej "dodatkową cenę") dla danej odmiany.
* Proste **kodowanie numeryczne**tworzy tabelę różnych odmian, a następnie zastępuje nazwę odmiany indeksem w tej tabeli. Nie jest to najlepszy pomysł dla regresji liniowej, ponieważ regresja linearna bierze pod uwagę rzeczywistą wartość numeryczną indeksu, mnoży ją przez jakiś współczynnik i dodaje do wyniku. W naszym przypadku zależność między numerem indeksu a ceną jest wyraźnie nieliniowa, nawet jeśli uporządkujemy indeksy w określony sposób.
* **Kodowanie one-hot** zastąpi kolumnę `Variety`przez 4 różne kolumny, każdą dla innej odmiany. Każda kolumna będzie zawierać `1`, jeśli wiersz jest danej odmiany, a `0` w przeciwnym razie. Oznacza to, że w regresji liniowej będą cztery współczynniki, po jednym dla każdej odmiany dyni, odpowiedzialne za "cenę startową" (a raczej "dodatkową cenę") dla tej konkretnej odmiany.
Poniższy kod pokazuje, jak można zakodować odmianę metodą one-hot:
Poniższy kod pokazuje, jak możemy zakodować odmianę one-hot:
Aby wytrenować regresję liniową używając zakodowanej metodą one-hot odmiany jako dane wejściowe, wystarczy poprawnie zainicjalizować dane `X` i `y`:
Aby wytrenować regresję liniową przy użyciu one-hot zakodowanej odmiany jako danych wejściowych, wystarczy poprawnie zainicjalizować dane `X` i `y`:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Reszta kodu jest taka sama, jak używana wcześniej do trenowania regresji liniowej. Jeśli to wypróbujesz, zobaczysz, że średni błąd kwadratowy jest mniej więcej taki sam, ale uzyskujemy znacznie wyższy współczynnik determinacji (~77%). Aby uzyskać jeszcze dokładniejsze przewidywania, możemy uwzględnić więcej cech kategorycznych oraz numerycznych, takich jak `Month` czy `DayOfYear`. Aby uzyskać jedną dużą tablicę cech, możemy użyć `join`:
Reszta kodu jest taka sama, jak użyta wcześniej do trenowania regresji liniowej. Jeśli spróbujesz, zobaczysz, że średni błąd kwadratowy jest mniej więcej taki sam, ale uzyskujemy znacznie wyższy współczynnik determinacji (~77%). Aby uzyskać jeszcze dokładniejsze przewidywania, możemy uwzględnić więcej cech kategorycznych, jak również cechy liczbowe, takie jak `Month` czy `DayOfYear`. Aby utworzyć jedną dużą macierz cech, możemy użyć `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,14 +341,14 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Tutaj uwzględniamy również `City` i typ `Package`, co daje MSE 2.84 (10%) oraz współczynnik determinacji 0.94!
Tutaj uwzględniamy również `City` i typ `Package`, co daje nam RMSE 2.84 (10.5%) oraz determinację 0.94!
## Łączenie wszystkiego w całość
## Łączenie wszystkiego razem
Aby stworzyć najlepszy model, możemy użyć połączonych (zakodowanych one-hot kategorycznych + numerycznych) danych z powyższego przykładu wraz z regresją wielomianową. Oto kompletny kod dla Twojej wygody:
Aby stworzyć najlepszy model, możemy wykorzystać połączone (one-hot zakodowane kategorie + dane liczbowe) dane z powyższego przykładu wraz z regresją wielomianową. Oto kompletny kod dla wygody:
```python
# przygotuj dane treningowe
# ustaw dane treningowe
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
@ -336,43 +358,43 @@ y = new_pumpkins['Price']
# wykonaj podział na zbiór treningowy i testowy
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
To powinno dać nam najlepszy współczynnik determinacji prawie 97% oraz MSE=2.23 (~8% błąd przewidywania).
Powinno to dać nam najlepszy współczynnik determinacji prawie 97% oraz RMSE=2.23 (~8% błąd prognozy).
| Model | MSE | Współczynnik determinacji |
|-------|-----|----------------------------|
| `DayOfYear`liniowa | 2.77 (17.2%) | 0.07 |
| `DayOfYear`wielomianowa | 2.73 (17.0%) | 0.08 |
| `Variety`liniowa | 5.24 (19.7%) | 0.77 |
| Wszystkie cechy liniowe | 2.84 (10.5%) | 0.94 |
| Wszystkie cechy wielomianowe | 2.23 (8.25%) | 0.97 |
| Model | RMSE | Determinacja |
|-------|-----|---------------|
| `DayOfYear`Liniowy | 2.77 (17.2%) | 0.07 |
| `DayOfYear`Wielomianowy | 2.73 (17.0%) | 0.08 |
| `Variety`Liniowy | 5.24 (19.7%) | 0.77 |
| Wszystkie cechy Liniowy | 2.84 (10.5%) | 0.94 |
| Wszystkie cechy Wielomianowy | 2.23 (8.25%) | 0.97 |
🏆 Świetna robota! Stworzyłeś cztery modele regresji w jednej lekcji i poprawiłeś jakość modelu do 97%. W ostatnim rozdziale o regresji poznasz regresję logistyczną do określania kategorii.
🏆 Świetna robota! Stworzyłeś cztery modele regresji w jednej lekcji i poprawiłeś jakość modelu do 97%. W ostatniej części o regresji nauczysz się o regresji logistycznej do wyznaczania kategorii.
---
## 🚀Wyzwanie
## 🚀Wyzwanko
Przetestuj kilka różnych zmiennych w tym zeszycie, aby zobaczyć, jak korelacja przekłada się na dokładność modelu.
Przetestuj kilka różnych zmiennych w tym notatniku, aby zobaczyć, jak korelacja odpowiada dokładności modelu.
## [Quiz po wykładzie](https://ff-quizzes.netlify.app/en/ml/)
## Powtórka i samodzielna nauka
## Przegląd i samodzielna nauka
W tej lekcji poznaliśmy regresję liniową. Istnieją także inne ważne typy regresji. Przeczytaj o technikach Stepwise, Ridge, Lasso i Elasticnet. Dobrym kursem do nauki jest [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
W tej lekcji nauczyliśmy się o regresji liniowej. Istnieją inne ważne typy regresji. Przeczytaj o technikach Stepwise, Ridge, Lasso i Elasticnet. Dobrym kursem do nauki jest [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Zadanie
@ -381,6 +403,6 @@ W tej lekcji poznaliśmy regresję liniową. Istnieją także inne ważne typy r
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zastrzeżenie**:
Dokument ten został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym należy traktować jako autorytatywne źródło. W przypadku informacji krytycznych zaleca się profesjonalne tłumaczenie wykonane przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
**Oświadczenie**:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż staramy się 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ć uważany za źródło autorytatywne. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za ewentualne nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
"## Regresja liniowa i wielomianowa w wycenie dyni - Lekcja 3\n",
"## Regresja liniowa i wielomianowa cen dyni - Lekcja 3\n",
"\n",
"Załaduj wymagane biblioteki i zestaw danych. Przekształć dane w ramkę danych zawierającą wybrany podzbiór danych:\n",
"Załaduj wymagane biblioteki i zestaw danych. Przekształć dane na dataframe zawierający podzbiór danych:\n",
"\n",
"- Uwzględnij tylko dynie wyceniane na podstawie buszla\n",
"- Przekształć datę na miesiąc\n",
"- Oblicz cenę jako średnią cen wysokich i niskich\n",
"- Przekształć cenę, aby odzwierciedlała wycenę według ilości buszli\n"
"- Pobierz tylko dynie wycenione za buszel\n",
"- Konwertuj datę na miesiąc\n",
"- Oblicz cenę jako średnią z cen maksymalnej i minimalnej\n",
"- Przekształć cenę, aby odzwierciedlała wycenę za ilość buszli\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Wykres punktowy przypomina nam, że mamy dane miesięczne tylko od sierpnia do grudnia. Prawdopodobnie potrzebujemy więcej danych, aby móc wyciągać wnioski w sposób liniowy.\n"
"Wykres rozrzutu przypomina nam, że mamy dane tylko za miesiące od sierpnia do grudnia. Prawdopodobnie potrzebujemy więcej danych, aby móc wyciągać wnioski w sposób liniowy.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Zobaczmy, czy istnieje korelacja:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Wygląda na to, że korelacja jest dość mała, ale istnieje inna, ważniejsza zależność - ponieważ punkty cenowe na powyższym wykresie wydają się tworzyć kilka wyraźnych klastrów. Zróbmy wykres, który pokaże różne odmiany dyni:\n"
"Wygląda na to, że korelacja jest dość mała, ale istnieje jakaś inna, ważniejsza zależność – ponieważ punkty cenowe na powyższym wykresie wydają się tworzyć kilka wyraźnych klastrów. Stwórzmy wykres, który pokaże różne odmiany dyni:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Na razie skupmy się tylko na jednej odmianie - **typ tarty**.\n"
]
},
{
"cell_type": "code",
@ -584,7 +588,7 @@
"source": [
"### Regresja liniowa\n",
"\n",
"Użyjemy Scikit Learn do trenowania modelu regresji liniowej:\n"
"Użyjemy Scikit Learn do wytrenowania modelu regresji liniowej:\n"
]
},
{
@ -688,7 +692,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Możemy użyć wytrenowanego modelu do przewidywania ceny:\n"
]
},
{
"cell_type": "code",
@ -718,9 +724,9 @@
"source": [
"### Regresja wielomianowa\n",
"\n",
"Czasami zależność między cechami a wynikami jest z natury nieliniowa. Na przykład ceny dyni mogą być wysokie zimą (miesiące=1,2), potem spadać latem (miesiące=5-7), a następnie znów rosnąć. Regresja liniowa nie jest w stanie dokładnie uchwycić tej zależności.\n",
"Czasami związek między cechami a wynikami jest z natury nieliniowy. Na przykład ceny dyni mogą być wysokie zimą (miesiące=1,2), następnie spadać latem (miesiące=5-7), a potem znowu rosnąć. Regresja liniowa nie jest w stanie dokładnie odzwierciedlić tego związku.\n",
"\n",
"W takim przypadku możemy rozważyć dodanie dodatkowych cech. Prostym sposobem jest użycie wielomianów z cech wejściowych, co prowadzi do **regresji wielomianowej**. W Scikit Learn możemy automatycznie wstępnie obliczyć cechy wielomianowe, korzystając z potoków:\n"
"W takim przypadku możemy rozważyć dodanie dodatkowych cech. Prosty sposób to użycie wielomianów z cech wejściowych, co skutkuje **regresją wielomianową**. W Scikit Learn możemy automatycznie wstępnie obliczać cechy wielomianowe za pomocą potoków: \n"
"W idealnym świecie chcielibyśmy przewidywać ceny różnych odmian dyni za pomocą tego samego modelu. Aby uwzględnić odmianę, najpierw musimy przekształcić ją na formę numeryczną, czyli **zakodować**. Istnieje kilka sposobów, aby to zrobić:\n",
"W idealnym świecie chcielibyśmy móc przewidywać ceny różnych odmian dyni za pomocą tego samego modelu. Aby uwzględnić odmianę, musimy najpierw przekształcić ją na formę numeryczną, czyli **zakodować**. Istnieje kilka sposobów, aby to zrobić:\n",
"\n",
"* Proste kodowanie numeryczne, które tworzy tabelę różnych odmian, a następnie zastępuje nazwę odmiany indeksem z tej tabeli. Nie jest to najlepsze rozwiązanie dla regresji liniowej, ponieważ regresja liniowa uwzględnia wartość numeryczną indeksu, a wartość numeryczna prawdopodobnie nie będzie korelować liczbowo z ceną.\n",
"* Kodowanie one-hot, które zastępuje kolumnę `Variety` czterema różnymi kolumnami, po jednej dla każdej odmiany. Kolumny te zawierają wartość 1, jeśli dany wiersz dotyczy określonej odmiany, i 0 w przeciwnym razie.\n",
"* Proste kodowanie numeryczne, które utworzy tabelę różnych odmian, a następnie zastąpi nazwę odmiany indeksem w tej tabeli. Nie jest to najlepszy pomysł dla regresji liniowej, ponieważ regresja liniowa bierze pod uwagę numeryczną wartość indeksu, a wartość ta prawdopodobnie nie będzie numerycznie skorelowana z ceną.\n",
"* Kodowanie one-hot, które zastąpi kolumnę `Variety` 4 różnymi kolumnami, po jednej dla każdej odmiany, zawierającymi 1, jeśli odpowiedni wiersz dotyczy danej odmiany, oraz 0 w przeciwnym razie.\n",
"\n",
"Poniższy kod pokazuje, jak możemy zakodować odmianę za pomocą metody one-hot:\n"
"Poniższy kod pokazuje, jak można zakodować odmianę za pomocą kodowania one-hot:\n"
]
},
{
@ -940,7 +949,7 @@
"source": [
"### Regresja liniowa na podstawie odmiany\n",
"\n",
"Teraz użyjemy tego samego kodu co powyżej, ale zamiast `DayOfYear` użyjemy naszej zakodowanej metodą one-hot odmiany jako wejścia:\n"
"Teraz użyjemy tego samego kodu co powyżej, ale zamiast `DayOfYear` wykorzystamy naszą zakodowaną metodą one-hot odmianę jako wejście:\n"
]
},
{
@ -988,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Możemy również spróbować użyć innych cech w ten sam sposób i połączyć je z cechami numerycznymi, takimi jak `Month` lub `DayOfYear`:\n"
"Możemy również spróbować użyć innych cech w ten sam sposób i łączyć je z cechami numerycznymi, takimi jak `Month` lub `DayOfYear`:\n"
]
},
{
@ -1021,7 +1030,7 @@
"source": [
"### Regresja wielomianowa\n",
"\n",
"Regresja wielomianowa może być również stosowana z cechami kategorycznymi, które zostały zakodowane metodą one-hot. Kod do trenowania regresji wielomianowej będzie zasadniczo taki sam, jak pokazano powyżej.\n"
"Regresja wielomianowa może być również stosowana z cechami kategorycznymi zakodowanymi metodą one-hot. Kod do trenowania regresji wielomianowej byłby zasadniczo taki sam, jak ten, który widzieliśmy powyżej.\n"
]
},
{
@ -1068,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Zastrzeżenie**: \nTen 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.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Zastrzeżenie**: \nTen dokument został przetłumaczony za pomocą usługi tłumaczeń AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy starań, aby tłumaczenie było jak najdokładniejsze, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w języku źródłowym należy traktować jako autorytatywne źródło informacji. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego, ludzkiego tłumaczenia. 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"
Makine öğrenimi modellerini oluşturma, kullanma ve bu modellerin kullandığı verileri yönetme süreci, birçok diğer geliştirme iş akışından oldukça farklıdır. Bu derste, süreci açıklığa kavuşturacak ve bilmeniz gereken temel teknikleri özetleyeceğiz. Şunları yapacaksınız:
Makine öğrenimi modelleri ve kullandıkları verileri oluşturma, kullanma ve sürdürme süreci, birçok diğer geliştirme iş akışından çok farklı bir süreçtir. Bu derste, süreci sadeleştirecek ve bilmeniz gereken temel tekniklerin ana hatlarını çizeceğiz. Şunları yapacaksınız:
- Makine öğreniminin temel süreçlerini yüksek seviyede anlayacaksınız.
- Makine öğreniminin temelini oluşturan süreçleri yüksek seviyede anlayacaksınız.
- 'Modeller', 'tahminler' ve 'eğitim verisi' gibi temel kavramları keşfedeceksiniz.
## [Ders Öncesi Test](https://ff-quizzes.netlify.app/en/ml/)
## [Ders öncesi quiz](https://ff-quizzes.netlify.app/en/ml/)
[](https://youtu.be/4NGM0U2ZSHU "Yeni Başlayanlar için ML - Makine Öğrenimi Teknikleri")
[](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Yukarıdaki görsele tıklayarak bu dersle ilgili kısa bir videoya ulaşabilirsiniz.
> 🎥 Bu derste ilerlemek için yukarıdaki görsele tıklayın.
## Giriş
Genel olarak, makine öğrenimi (ML) süreçlerini oluşturma sanatı birkaç adımdan oluşur:
Yüksek seviyede, makine öğrenimi (ML) süreçleri oluşturma sanatı birkaç adımdan oluşur:
1. **Soruyu belirleyin**. Çoğu ML süreci, basit bir koşullu program veya kurallara dayalıbir motorla cevaplanamayan bir soruyu sormakla başlar. Bu sorular genellikle bir veri koleksiyonuna dayalı tahminlerle ilgilidir.
2. **Veri toplayın ve hazırlayın**. Sorunuzu cevaplayabilmek için veriye ihtiyacınız var. Verinizin kalitesi ve bazen miktarı, başlangıçtaki sorunuza ne kadar iyi cevap verebileceğinizi belirler. Veriyi görselleştirmek bu aşamanın önemli bir parçasıdır. Bu aşama ayrıca veriyi bir eğitim ve test grubuna ayırmayı içerir.
3. **Eğitim yöntemini seçin**. Sorunuza ve verinizin doğasına bağlı olarak, verinizi en iyi şekilde yansıtacak ve doğru tahminler yapacak bir model eğitme yöntemini seçmeniz gerekir. Bu, ML sürecinizin özel uzmanlık gerektiren ve genellikle önemli miktarda deneme gerektiren kısmıdır.
4. **Modeli eğitin**. Eğitim verinizi kullanarak, çeşitli algoritmalarla bir model eğiterek verideki desenleri tanımasını sağlarsınız. Model, verinin belirli bölümlerini diğerlerine göre önceliklendirmek için ayarlanabilir içsel ağırlıklar kullanabilir.
5. **Modeli değerlendirin**. Topladığınız veri setinden daha önce hiç görülmemiş verileri (test verinizi) kullanarak modelin performansını değerlendirirsiniz.
6. **Parametre ayarı**. Modelinizin performansına bağlı olarak, modeli eğitmek için kullanılan algoritmaların davranışını kontrol eden farklı parametreler veya değişkenler kullanarak süreci yeniden yapabilirsiniz.
7. **Tahmin yapın**. Modelinizin doğruluğunu test etmek için yeni girdiler kullanın.
1. **Soruyu belirleyin**. Çoğu ML süreci, basit bir koşullu program veya kurallara dayalımotorla cevaplanamayan bir soruyu sorarak başlar. Bu sorular genellikle bir veri koleksiyonuna dayanan tahminlerle ilgilidir.
2. **Veri toplayın ve hazırlayın**. Sorunuzu cevaplayabilmek için veriye ihtiyacınız vardır. Verinizin kalitesi ve zaman zaman miktarı, ilk sorunuza ne kadar iyi cevap verebileceğinizi belirler. Veriyi görselleştirmek bu aşamanın önemli bir parçasıdır. Bu aşama ayrıca, bir modeli oluşturmak için veriyi eğitim ve test gruplarına ayırmayı da içerir.
3. **Bir eğitim yöntemi seçin**. Sorunuza ve verinizin doğasına bağlı olarak, verinizi en iyi şekilde yansıtacak ve doğru tahminler yapacak bir modeli nasıl eğitmek istediğinizi seçmeniz gerekir. Bu, ML sürecinizin belirli uzmanlık gerektiren ve genellikle önemli miktarda deney gerektiren kısmıdır.
4. **Modeli eğitin**. Eğitim verilerinizi kullanarak, verideki kalıpları tanımak için çeşitli algoritmalarla bir modeli eğiteceksiniz. Model, verinin bazı bölümlerini diğerlerine göre daha öncelikli kılmak için ayarlanabilen iç ağırlıkları kullanabilir.
5. **Modeli değerlendirin**. Daha önce hiç görmediğiniz veriyi (test verilerinizi) kullanarak modelin performansını kontrol edersiniz.
6. **Parametre ayarlaması yapın**. Modelinizin performansına dayanarak, modeli eğitmek için kullanılan algoritmaların davranışını kontrol eden farklı parametrelerle veya değişkenlerle süreci yeniden yapabilirsiniz.
7. **Tahmin yapın**. Modelinizin doğruluğunu test etmek için yeni girişler kullanın.
## Hangi Soruyu Sormalı?
## Hangi soruyu sormalı
Bilgisayarlar, verilerdeki gizli desenleri keşfetme konusunda oldukça yeteneklidir. Bu yetenek, belirli bir alanda basit bir kurallara dayalı motor oluşturarak kolayca cevaplanamayan soruları olan araştırmacılar için çok faydalıdır. Örneğin, bir aktüeryal görevde, bir veri bilimci sigara içenler ile içmeyenlerin ölüm oranları hakkında el yapımı kurallar oluşturabilir.
Bilgisayarlar, veride gizli kalmış kalıpları keşfetme konusunda özellikle iyidir. Bu fayda, belirli bir alanla ilgili soruları koşullu kurallara dayalı bir motor oluşturmakla kolayca cevaplanamayan araştırmacılar için çok değerlidir. Örneğin, bir aktüeryal görevde, bir veri bilimci sigara içenler ve içmeyenlerin ölüm oranı hakkında el yapımı kurallar oluşturabilir.
Ancak, birçok başka değişken denkleme dahil edildiğinde, bir ML modeli geçmiş sağlık geçmişine dayanarak gelecekteki ölüm oranlarını tahmin etmekte daha verimli olabilir. Daha neşeli bir örnek olarak, bir konumda Nisan ayı için hava durumu tahminleri yapmak, enlem, boylam, iklim değişikliği, okyanusa yakınlık, jet akımı desenleri ve daha fazlasını içeren verilere dayanabilir.
Ancak, birçok başka değişken bu denklemde yer aldığında, ML modeli geçmiş sağlık geçmişine dayalı gelecekteki ölüm oranlarını tahmin etmek için daha verimli olabilir. Daha neşeli bir örnek, enlem, boylam, iklim değişikliği, okyanusa yakınlık, jet akımlarının desenleri ve daha fazlasını içeren verilere dayalı olarak belirli bir konumda Nisan ayı hava tahminleri yapmak olabilir.
✅ Bu [sunum dosyası](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf), hava analizi için ML kullanımı hakkında tarihsel bir perspektif sunmaktadır.
✅ Bu [sunum dizisi](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) hava modelleri hakkında ML kullanımı için tarihsel bir perspektif sunar.
## Model Oluşturmadan Önceki Görevler
## Ön hazırlık görevleri
Modelinizi oluşturmaya başlamadan önce tamamlamanız gereken birkaç görev vardır. Sorunuzu test etmek ve bir modelin tahminlerine dayalı bir hipotez oluşturmak için birkaç unsuru tanımlamanız ve yapılandırmanız gerekir.
Modelinizi oluşturmaya başlamadan önce tamamlamanız gereken birkaç görev vardır. Sorunuzu test etmek ve modelin tahminlerine dayanan bir hipotez oluşturmak için çeşitli unsurları tanımlamanız ve yapılandırmanız gerekir.
### Veri
Sorunuzu herhangi bir kesinlikle cevaplayabilmek için doğru türde yeterli miktarda veriye ihtiyacınız var. Bu noktada yapmanız gereken iki şey var:
Sorunuza belirli bir kesinlikle cevap verebilmek için doğru türde yeterli miktarda veriye ihtiyacınız vardır. Bu noktada yapmanız gereken iki şey vardır:
- **Veri toplayın**. Veri analizi hakkındaki önceki derste adalet konusunu göz önünde bulundurarak, verinizi dikkatlice toplayın. Bu verinin kaynaklarının, sahip olabileceği herhangi bir içsel önyargının farkında olun ve kökenini belgeleyin.
- **Veriyi hazırlayın**. Veri hazırlama sürecinde birkaç adım vardır. Veriler farklı kaynaklardan geliyorsa, verileri birleştirmeniz ve normalleştirmeniz gerekebilir. Verinin kalitesini ve miktarını, dizeleri sayılara dönüştürmek gibi çeşitli yöntemlerle artırabilirsiniz (örneğin [Kümeleme](../../5-Clustering/1-Visualize/README.md) dersinde yaptığımız gibi). Ayrıca, orijinal veriye dayanarak yeni veri üretebilirsiniz (örneğin [Sınıflandırma](../../4-Classification/1-Introduction/README.md) dersinde yaptığımız gibi). Veriyi temizleyebilir ve düzenleyebilirsiniz (örneğin [Web Uygulaması](../../3-Web-App/README.md) dersinden önce yapacağımız gibi). Son olarak, eğitim tekniklerinize bağlı olarak veriyi rastgeleleştirmeniz ve karıştırmanız gerekebilir.
- **Veri toplayın**. Veri analizinde adalet hakkında önceki dersi aklınızda tutarak verinizi dikkatlice toplayın. Bu verinin kaynaklarının farkında olun, sahip olabileceği herhangi bir yerleşik önyargıyı göz önünde bulundurun ve kökenini belgeleyin.
- **Veriyi hazırlayın**. Veri hazırlama sürecinde birkaç adım vardır. Veriler çeşitli kaynaklardan geliyorsa onları toplamanız ve normalleştirmeniz gerekebilir. Verinin kalitesini ve miktarını, [Kümeleme](../../5-Clustering/1-Visualize/README.md) dersinde yaptığımız gibi dizeleri sayılara dönüştürmek gibi çeşitli yöntemlerle artırabilirsiniz. Ayrıca, orijinal veriye dayalı yeni veriler oluşturabilirsiniz ([Sınıflandırma](../../4-Classification/1-Introduction/README.md) dersinde yaptığımız gibi). Veriyi temizleyebilir ve düzenleyebilirsiniz ([Web Uygulaması](../../3-Web-App/README.md) dersinden önceki gibi). Son olarak, eğitim tekniklerinize bağlı olarak veriyi rastgele karıştırmanız ve karıştırmanız gerekebilir.
✅ Verinizi topladıktan ve işledikten sonra, şeklinin hedeflediğiniz soruyu ele almanıza izin verip vermeyeceğini kontrol etmek için bir an durun. Verinin, belirli bir görevde iyi performans göstermeyeceğini [Kümeleme](../../5-Clustering/1-Visualize/README.md) derslerinde keşfettiğimiz gibi fark edebilirsiniz!
✅ Verinizi topladıktan ve işledikten sonra, şeklinin sorunuza cevap vermenize izin verip vermediğine bakmak için bir an durun. Verinin görevde iyi performans göstermeyebileceği gibi durumlarla [Kümeleme](../../5-Clustering/1-Visualize/README.md) derslerinde karşılaşıyoruz!
### Özellikler ve Hedef
Bir [özellik](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection), verinizin ölçülebilir bir özelliğidir. Çoğu veri setinde, 'tarih', 'boyut' veya 'renk' gibi sütun başlıkları olarak ifade edilir. Kodda genellikle `X` olarak temsil edilen özellik değişkeniniz, modeli eğitmek için kullanılacak giriş değişkenini temsil eder.
[Özellik](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection), verinizin ölçülebilir bir niteliğidir. Pek çok veri setinde bu, 'tarih', 'boyut' veya 'renk' gibi bir sütun başlığı olarak ifade edilir. Özellik değişkeniniz, genellikle kodda `X` ile gösterilir, bir modeli eğitmek için kullanılan giriş değişkenini temsil eder.
Bir hedef, tahmin etmeye çalıştığınız şeydir. Kodda genellikle `y` olarak temsil edilen hedef, verinizden sormaya çalıştığınız sorunun cevabını temsil eder: Aralık ayında hangi **renkteki** kabaklar en ucuz olacak? San Francisco'da hangi mahalleler en iyi gayrimenkul **fiyatına** sahip olacak? Hedef bazen etiket özelliği olarak da adlandırılır.
Hedef, tahmin etmeye çalıştığınız şeydir. Hedef, genellikle kodda `y` ile gösterilir, verinizden sormaya çalıştığınız sorunun cevabını temsil eder: Aralık ayında en ucuz balkabağı**rengi** ne olacak? San Francisco'da en iyi gayrimenkul **fiyatına** sahip mahalleler hangileri olacak? Bazen hedef bir etiket (label) özniteliği olarak da adlandırılır.
### Özellik Değişkeninizi Seçmek
### Özellik değişkeninizi seçmek
🎓 **Özellik Seçimi ve Özellik Çıkarımı** Model oluştururken hangi değişkeni seçeceğinizi nasıl bileceksiniz? Muhtemelen en iyi performans gösteren model için doğru değişkenleri seçmek üzere bir özellik seçimi veya özellik çıkarımı sürecinden geçeceksiniz. Ancak, bunlar aynı şey değildir: "Özellik çıkarımı, orijinal özelliklerin fonksiyonlarından yeni özellikler oluştururken, özellik seçimi özelliklerin bir alt kümesini döndürür." ([kaynak](https://wikipedia.org/wiki/Feature_selection))
🎓 **Özellik Seçimi ve Özellik Çıkarımı** Bir model kurarken hangi değişkeni seçeceğinizi nasıl biliyorsunuz? Muhtemelen en etkili modeli oluşturmak için doğru değişkenleri seçmek üzere bir özellik seçimi veya özellik çıkarımı sürecinden geçeceksiniz. Ancak bu ikisi aynı şey değildir: "Özellik çıkarımı, orijinal özelliklerin fonksiyonlarından yeni özellikler oluştururken, özellik seçimi özelliklerin bir alt kümesini döndürür." ([kaynak](https://wikipedia.org/wiki/Feature_selection))
### Verinizi Görselleştirin
### Verinizi görselleştirin
Bir veri bilimcinin araç setinin önemli bir yönü, Seaborn veya MatPlotLib gibi birkaç mükemmel kütüphaneyi kullanarak veriyi görselleştirme gücüdür. Verinizi görsel olarak temsil etmek, yararlanabileceğiniz gizli korelasyonları ortaya çıkarmanıza olanak sağlayabilir. Görselleştirmeleriniz ayrıca önyargı veya dengesiz veriyi ortaya çıkarmanıza yardımcı olabilir (örneğin [Sınıflandırma](../../4-Classification/2-Classifiers-1/README.md) dersinde keşfettiğimiz gibi).
Bir veri bilimcisinin araç setinin önemli bir yönü, Seaborn veya MatPlotLib gibi birkaç mükemmel kütüphane kullanarak veriyi görselleştirme gücüdür. Verinizi görsel olarak temsil etmek, kullanabileceğiniz gizli korelasyonları ortaya çıkarabilir. Görselleştirmeleriniz ayrıca önyargıyı veya dengesiz veriyi ortaya çıkarabilir (bunu [Sınıflandırma](../../4-Classification/2-Classifiers-1/README.md) dersinde keşfediyoruz).
### Veri Setinizi Bölün
### Veri setinizi bölün
Eğitimden önce, veri setinizi eşit olmayan boyutlarda iki veya daha fazla parçaya ayırmanız gerekir, ancak bu parçalar yine de veriyi iyi temsil etmelidir.
Eğitime başlamadan önce, veri setinizi eşit olmayan ancak veriyi iyi temsil eden iki veya daha fazla parçaya bölmeniz gerekir.
- **Eğitim**. Veri setinin bu kısmı, modelinizi eğitmek için modele uyarlanır. Bu set, orijinal veri setinin çoğunluğunu oluşturur.
- **Eğitim**. Veri setinin bu kısmı, modeli eğitmek için kullanılır. Bu set orijinal veri setinin çoğunluğunu oluşturur.
- **Test**. Test veri seti, genellikle orijinal veriden toplanan bağımsız bir veri grubudur ve oluşturulan modelin performansını doğrulamak için kullanılır.
- **Doğrulama**. Doğrulama seti, modelin hiperparametrelerini veya mimarisini iyileştirmek için kullandığınız daha küçük bağımsız bir örnek grubudur. Verinizin boyutuna ve sorduğunuz soruya bağlı olarak, bu üçüncü seti oluşturmanız gerekmeyebilir (örneğin [Zaman Serisi Tahmini](../../7-TimeSeries/1-Introduction/README.md) dersinde belirttiğimiz gibi).
- **Doğrulama**. Doğrulama seti, modeli iyileştirmek için modelin hiperparametrelerini veya mimarisini ayarlamak için kullanılan daha küçük bağımsız bir örnek grubudur. Verinizin boyutuna ve sorduğunuz soruya bağlı olarak bu üçüncü seti oluşturmanız gerekmeyebilir ([Zaman Serisi Tahmini](../../7-TimeSeries/1-Introduction/README.md) dersinde not ettiğimiz gibi).
## Model Oluşturma
## Model oluşturma
Eğitim verinizi kullanarak, amacınız çeşitli algoritmalar kullanarak verinizin istatistiksel bir temsilini oluşturmak, yani bir model oluşturmaktır. Modeli eğitmek, veriyi analiz etmesine, algıladığı desenler hakkında varsayımlar yapmasına, doğrulamasına ve kabul veya reddetmesine olanak tanır.
Eğitim verinizi kullanarak, modeli **eğitmek** için çeşitli algoritmalar kullanarak verinizin istatistiksel bir temsilini oluşturmayı hedeflersiniz. Bir modeli eğitmek, onu veriye maruz bırakır ve keşfettiği, doğruladığı ve kabul ya da reddettiği algılanan kalıplar hakkında varsayımlarda bulunmasını sağlar.
### Eğitim Yöntemini Belirleyin
### Bir eğitim yöntemi seçin
Sorunuza ve verinizin doğasına bağlı olarak, onu eğitmek için bir yöntem seçersiniz. Bu kursta kullandığımız [Scikit-learn belgelerini](https://scikit-learn.org/stable/user_guide.html) inceleyerek bir modeli eğitmek için birçok yöntemi keşfedebilirsiniz. Deneyiminize bağlı olarak, en iyi modeli oluşturmak için birkaç farklı yöntemi denemeniz gerekebilir. Veri bilimcilerin bir modeli performansını değerlendirmek için daha önce görülmemiş verilerle beslediği, doğruluk, önyargı ve diğer kaliteyi düşüren sorunları kontrol ettiği ve mevcut görev için en uygun eğitim yöntemini seçtiği bir süreçten geçmeniz muhtemeldir.
Sorunuza ve verinizin doğasına bağlı olarak, onu eğitmek için bir yöntem seçeceksiniz. Bu derste kullandığımız [Scikit-learn dokümantasyonu](https://scikit-learn.org/stable/user_guide.html)'nu adım adım inceleyerek bir modeli eğitmenin birçok yolunu keşfedebilirsiniz. Deneyiminize bağlı olarak, en iyi modeli oluşturmak için birkaç farklı yöntemi denemeniz gerekebilir. Veri bilimcilerin, modele hiç görmediği veriyi vererek performansını değerlendirdiği, doğruluğu, önyargıyı ve diğer kaliteyi düşüren sorunları kontrol ettiği ve görev için en uygun eğitim yöntemini seçtiği bir süreci muhtemelen yaşayacaksınız.
### Modeli Eğitin
### Modeli eğitin
Eğitim verinizle donanmış olarak, bir model oluşturmak için onu 'uydurmaya' hazırsınız. Birçok ML kütüphanesinde 'model.fit' kodunu göreceksiniz - bu, özellik değişkeninizi (genellikle 'X') ve hedef değişkeninizi (genellikle 'y') bir değer dizisi olarak gönderdiğiniz zamandır.
Eğitim verinizle hazırlanmış olarak, modeli oluşturmak için 'fit' işlemini gerçekleştirmeye hazırsınız. Pek çok ML kütüphanesinde 'model.fit' kodunu göreceksiniz - bu aşamada genellikle özellik değişkeninizi (`X`) ve hedef değişkeninizi (`y`) değerler dizisi olarak gönderirsiniz.
### Modeli Değerlendirin
### Modeli değerlendirin
Eğitim süreci tamamlandıktan sonra (büyük bir modeli eğitmek için birçok yineleme veya 'epoch' gerekebilir), modelin kalitesini test verilerini kullanarak performansını ölçerek değerlendirebilirsiniz. Bu veri, modelin daha önce analiz etmediği orijinal verinin bir alt kümesidir. Modelinizin kalitesi hakkında bir metrik tablosu yazdırabilirsiniz.
Eğitim süreci tamamlandıktan sonra (büyük bir modeli eğitmek için birçok yineleme veya 'epoch' gerekebilir), test verilerini kullanarak modelin kalitesini değerlendirebilirsiniz. Bu veriler, modelin daha önce analiz etmediği orijinal verinin bir alt kümesidir. Modelinizin kalitesi hakkında metriklerden oluşan bir tablo yazdırabilirsiniz.
🎓 **Model Uydurma**
🎓 **Model uyumu**
Makine öğrenimi bağlamında, model uydurma, modelin tanımadığı veriyi analiz etmeye çalışırken temel fonksiyonunun doğruluğunu ifade eder.
Makine öğrenimi bağlamında model uyumu, modelin bilinmeyen verileri analiz etmeye çalışırken altında yatan fonksiyonunun doğruluğunu ifade eder.
🎓 **Eksik Uydurma** ve **Aşırı Uydurma**, modelin kalitesini düşüren yaygın sorunlardır. Model ya yeterince iyi uydurulmaz ya da çok iyi uydurulur. Bu, modelin tahminlerini ya eğitim verisine çok sıkı ya da çok gevşek bir şekilde hizalamasına neden olur. Aşırı uydurulmuş bir model, verinin ayrıntılarını ve gürültüsünü çok iyi öğrendiği için eğitim verisini çok iyi tahmin eder. Eksik uydurulmuş bir model ise ne eğitim verisini ne de daha önce 'görmediği' veriyi doğru bir şekilde analiz edebilir.
🎓 **Eksik uyum** ve **aşırı uyum** yaygın sorunlardır ve modelin kalitesini düşürür; model ya yeterince iyi uymamış ya da aşırı iyi uymuş olur. Bu, modelin tahminlerini eğitim verisiyle ya çok sıkı ya da çok gevşek hizalanmış şekilde yapmasına neden olur. Aşırı uyumlu model, verinin detaylarını ve gürültüyü çok iyi öğrendiği için eğitim verisini çok iyi tahmin eder. Eksik uyumlu model ise ne eğitim verisini ne de daha önce 'görmediği' veriyi doğru analiz edebilir.
> Bilgi grafiği: [Jen Looper](https://twitter.com/jenlooper)
## Parametre Ayarı
## Parametre ayarlaması
İlk eğitiminiz tamamlandıktan sonra, modelin kalitesini gözlemleyin ve 'hiperparametrelerini' ayarlayarak iyileştirmeyi düşünün. Süreç hakkında daha fazla bilgi için [belgelere](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) göz atın.
İlk eğitiminiz tamamlandıktan sonra, modelin kalitesini gözlemleyin ve 'hiperparametrelerini' ayarlayarak geliştirmeyi düşünün. Sürecin daha fazlası için [dokümantasyona bakabilirsiniz](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Tahmin
Bu, tamamen yeni verileri kullanarak modelinizin doğruluğunu test edebileceğiniz andır. 'Uygulamalı' bir ML ortamında, modeli üretimde kullanmak için web varlıkları oluşturduğunuzda, bu süreç bir değişkeni ayarlamak ve değerlendirme veya çıkarım için modele göndermek üzere kullanıcı girdisi (örneğin bir düğme basışı) toplamayı içerebilir.
Bu, modelinizin doğruluğunu tamamen yeni verilerle test edebileceğiniz andır. Üretimde modeli kullanmak üzere web varlıkları oluşturduğunuz 'uygulamalı' ML ortamında, bu süreç modelin çıkarım veya değerlendirme için değişkeni ayarlayıp modele göndermek üzere (örneğin bir düğmeye basılması gibi) kullanıcı girdisi toplama içerebilir.
Bu derslerde, bir veri bilimcinin tüm hareketlerini ve daha fazlasını keşfederek, bir 'tam yığın' ML mühendisi olma yolculuğunuzda ilerlerken bu adımları hazırlama, oluşturma, test etme, değerlendirme ve tahmin yapma süreçlerini öğreneceksiniz.
Bu derslerde, bir veri bilimcisinin tüm jestlerini ve daha fazlasını — model hazırlamayı, oluşturmayı, test etmeyi, değerlendirmeyi ve tahmin yapmayı — öğrenerek 'full stack' ML mühendisi olma yolunda ilerleyeceksiniz.
---
## 🚀Meydan Okuma
Bir ML uygulayıcısının adımlarını yansıtan bir akış şeması çizin. Sürecin şu an neresinde olduğunuzu düşünüyorsunuz? Nerede zorluk yaşayacağınızı tahmin ediyorsunuz? Size kolay gelen nedir?
Bir ML uygulayıcısının adımlarını yansıtan bir akış şeması çizin. Şu anda sürecin hangi aşamasında olduğunuzu düşünüyorsunuz? Hangi aşamada zorlanacağınızı tahmin ediyorsunuz? Size kolay gelen şeyler neler?
## [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
Günlük işlerini tartışan veri bilimcilerle yapılan röportajları çevrimiçi arayın. İşte [bir tanesi](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Günlük işlerinden bahseden veri bilimcilerle yapılmış çevrimiçi röportajlar arayın. İşte [biri](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Ödev
[Bir veri bilimciyle röportaj yapın](assignment.md)
[Bir veri bilimci ile röportaj yapın](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ış yorumlamalardan sorumlu değiliz.
Bu belge, AI çeviri servisi [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hatalar veya yanlışlıklar içerebileceğinin farkında olunuz. Orijinal belge, kendi ana dilindeki haliyle yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanılmasıyla ortaya çıkabilecek yanlış anlamalar veya yanlış yorumlamalar nedeniyle sorumluluk kabul edilmeyecektir.
Bu derste, daha gelişmiş regresyon tekniklerini keşfetmeden önce kavramı anlamaya odaklanıyoruz.

> Infografik [Dasani Madipalli](https://twitter.com/dasani_decoded) tarafından
> ### [Bu ders R dilinde de mevcuttur!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
## [Ders Öncesi Quiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Bu ders R dilinde de mevcuttur!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Giriş
Şimdiye kadar, balkabağı fiyatlandırma veri setinden toplanan örnek verilerle regresyonun ne olduğu hakkında bilgi edindiniz. Ayrıca Matplotlib kullanarak bunu görselleştirdiniz.
Şimdiye kadar, bu ders boyunca kullanacağımız kabak fiyatlandırma veri kümesinden örnek veri ile regresyonun ne olduğunu keşfettiniz. Ayrıca bunu Matplotlib ile görselleştirdiniz.
Şimdi Makine Öğrenimi için regresyona daha derinlemesine dalmaya hazırsınız. Görselleştirme, veriyi anlamlandırmanıza olanak sağlarken, Makine Öğrenimi'nin gerçek gücü modellerin _eğitilmesinden_ gelir. Modeller geçmiş verilere göre eğitilir ve veri bağımlılıklarını otomatik olarak yakalar, böylece modelin daha önce görmediği yeni veriler için tahmin yapmanızı sağlar.
Artık makine öğrenmesi için regresyona daha derinlemesine dalmaya hazırsınız. Görselleştirme veri anlamanıza olanak sağlarken, Makine Öğrenmesinin gerçek gücü _modellerin eğitilmesi_ üzerinden gelir. Modeller, verilerdeki bağımlılıkları otomatik yakalamak için geçmiş veriler üzerinde eğitilir ve modele daha önce görmediği yeni veriler için sonuçlar tahmin etme olanağı tanır.
Bu derste, _temel doğrusal regresyon_ ve _polinomsal regresyon_ olmak üzere iki regresyon türünü ve bu tekniklerin altında yatan bazı matematikleri öğreneceksiniz. Bu modeller, farklı giriş verilerine bağlı olarak balkabağı fiyatlarını tahmin etmemize olanak sağlayacak.
Bu derste, _temel lineer regresyon_ ve _polinom regresyon_ olmak üzere iki regresyon türünü ve bu tekniklerin altında yatan matematiği öğreneceksiniz. Bu modeller, farklı giriş verilerine bağlı olarak kabak fiyatlarını tahmin etmemize olanak sağlayacak.
[](https://youtu.be/CRxFT8oTDMg "Yeni başlayanlar için ML - Doğrusal Regresyonu Anlamak")
[](https://youtu.be/CRxFT8oTDMg "Yeni başlayanlar için ML - Lineer Regresyonu Anlamak")
> 🎥 Doğrusal regresyon hakkında kısa bir video özeti için yukarıdaki resme tıklayın.
> 🎥 Lineer regresyonun kısa video genel bakışı için yukarıdaki görsele tıklayın.
> Bu müfredat boyunca, matematik bilgimizin minimum düzeyde olduğunu varsayıyoruz ve bu konuyu diğer alanlardan gelen öğrenciler için erişilebilir kılmaya çalışıyoruz. Bu yüzden anlaşılmayı kolaylaştırmak için notlar, 🧮 açıklamalar, diyagramlar ve diğer öğrenme araçlarına dikkat edin.
> Bu müfredat boyunca, matematik bilgisinin minimum seviyede olacağını varsayıyor ve diğer alanlardan gelen öğrenciler için erişilebilir hale getirmeyi amaçlıyoruz. Anlamaya yardımcı notlar, 🧮 çağrılar, diyagramlar ve diğer öğrenme araçlarına dikkat edin.
### Ön Koşul
Artık incelediğimiz balkabağı verisinin yapısına aşina olmalısınız. Bu dersin _notebook.ipynb_ dosyasında önceden yüklenmiş ve önceden temizlenmiş halde bulunmaktadır. Dosyada balkabağı fiyatı bushel başına yeni bir veri çerçevesinde gösterilmektedir. Bu not defterlerini Visual Studio Code'daki çekirdeklerde çalıştırabildiğinizden emin olun.
Artık incelediğimiz kabak verisinin yapısına aşina olmalısınız. Veriyi bu dersin _notebook.ipynb_ dosyasında önceden yüklenmiş ve temizlenmiş bulabilirsiniz. Dosyada kabak fiyatı, bushel başına yeni bir veri çerçevesinde gösterilmiştir. Bu not defterlerini Visual Studio Code'da çekirdeklerde çalıştırabildiğinizden emin olun.
### Hazırlık
Hatırlatma olarak, bu verileri sorular sormak için yüklüyorsunuz.
Hatırlatma olarak, bu veriyi yüklüyorsunuz ki ona sorular sorabilesiniz.
- Balkabaklarını satın almak için en iyi zaman ne zamandır?
- Minyatür balkabaklarından bir kutu için ne kadar fiyat bekleyebilirim?
- Onları yarım bushel sepetlerde mi yoksa 1 1/9 bushel kutularda mı almalıyım?
Veriye daha derinlemesine bakalım.
- Kabakları satın almak için en iyi zaman ne zamandır?
- Mini kabak kasası için hangi fiyatı bekleyebilirim?
- Bunları yarım bushel sepetlerde mi yoksa 1 1/9 bushel kutuda mı almalıyım?
Veri üzerinde kazmaya devam edelim.
Önceki derste, Pandas veri çerçevesi oluşturdunuz ve fiyatlandırmayı bushel bazında standartlaştırarak orijinal veri setinin bir kısmını doldurdunuz. Ancak bu şekilde sadece yaklaşık 400 veri noktası toplayabildiniz ve sadece sonbahar aylarına ait veriler oldu.
Önceki derste, Pandas veri çerçevesi oluşturdunuz ve fiyatlandırmayı bushel bazında standartlaştırarak orijinal veri kümesinin bir kısmı ile doldurdunuz. Ancak bu, sadece yaklaşık 400 veri noktası ve yalnızca sonbahar ayları için veri toplamanıza olanak sağladı.
Bu derse eşlik eden not defterinde önceden yüklenmiş veriye bir göz atın. Veri önceden yüklü ve ay verisini göstermek için ilk bir dağılım grafiği çizildi. Belki veriyi daha da temizleyerek verinin doğası hakkında biraz daha detay alabiliriz.
Bu dersin eşlik eden not defterinde önceden yüklenmiş veriye bir göz atın. Veri yüklü olarak geliyor ve ay verisini göstermek için ilk bir dağılım grafiği çiziliyor. Verinin doğası hakkında biraz daha ayrıntı öğrenmek için onu daha fazla temizleyebiliriz.
## Doğrusal regresyon çizgisi
## Bir lineer regresyon doğrusu
Ders 1'de öğrendiğiniz gibi, doğrusal regresyon egzersizinin amacı bir çizgi çizmek ve:
Ders 1'de öğrendiğiniz gibi, lineer regresyon egzersizinin amacı:
- **Değişken ilişkilerini göstermek**. Değişkenler arasındaki ilişkiyi göstermek
- **Tahmin yapmak**. Yeni bir veri noktasının o çizgiye göre nerede düşeceğini doğru şekilde tahmin etmek
- **Değişken ilişkilerini göstermek**. Değişkenler arasındaki ilişkiyi göstermek
- **Tahmin yapmak**. Yeni bir veri noktasının o çizgiye göre nerede olacağını doğru tahmin etmek
**En Küçük Kareler Regresyonu** genellikle bu tür bir çizgiyi çizer. "En Küçük Kareler" terimi modelimizdeki toplam hatayı minimize etmeyi ifade eder. Her veri noktası için gerçek nokta ile regresyon çizgisi arasındaki dikey mesafe (kalan) ölçülür.
**En Küçük Kareler Regresyonu** ile bu tür bir çizgi çizmek tipiktir. "En Küçük Kareler" terimi, modelimizdeki toplam hatanın en aza indirilmesi sürecini ifade eder. Veri noktasının her biri için gerçek nokta ile regresyon çizgisi arasındaki dikey mesafeyi (rezidü olarak adlandırılır) ölçeriz.
Bu mesafeleri kareye almamızın iki temel sebebi vardır:
Bu mesafeleri iki ana nedenle kare alırız:
1. **Büyüklük, Yönden Önde:** -5 hatasını +5 hatası ile aynı şekilde ele almak istiyoruz. Karekök alma işlemi tüm değerleri pozitif yapar.
1. **Yön yerine büyüklük:** -5 hata ile +5 hata aynı muameleyi görmeli. Kare alma tüm değerleri pozitif yapar.
2. **AykırıDeğerleri Cezalandırma:** Karekök alma büyük hatalara daha fazla ağırlık verir ve çizgiyi uzak noktalara daha yakın tutmaya zorlar.
2. **Aykırıdeğerleri cezalandırmak:** Kare alma, büyük hatalara daha fazla ağırlık verir, çizginin uzak noktaların yanında kalmasını zorlar.
Sonra bu kareleri toplarız. Amaç, toplam karenin en küçük olduğu çizgiyi bulmaktır — bu yüzden adı "En Küçük Kareler"dir.
Sonra bu kareli değerleri toplarız. Amacımız, bu toplamın en küçük olduğu (en düşük mümkün değer) çizgiyi bulmaktır — bu yüzden "En Küçük Kareler" denir.
> **🧮 Matematiği göster**
>
> En uygun çizgi (line of best fit) şu [denklemle ifade edilir](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> **🧮 Matematiği Göster**
>
> Bu çizgiye _en iyi uyum çizgisi_ adı verilir ve [bir denklemle](https://en.wikipedia.org/wiki/Simple_linear_regression) ifade edilir:
>
> ```
> Y = a + bX
> ```
>
> `X` 'açıklayıcı değişken'dir. `Y` 'bağımlı değişken'dir. Çizginin eğimi `b` ve `a`,`X = 0` iken `Y` değerini ifade eden y-kesişimidir.
> Öncelikle eğimi `b` hesaplayın. İnfografik [Jen Looper](https://twitter.com/jenlooper) tarafından
>
> Başka bir deyişle, balkabağı verimizin orijinal sorusu olan: "ay bazında bushel başına balkabağı fiyatını tahmin et" durumunda, `X` fiyatı ifade ederken, `Y` satış ayını temsil eder.
> Y değerini hesaplayın. Yaklaşık 4$ ödüyorsanız, Nisan olmalı! İnfografik [Jen Looper](https://twitter.com/jenlooper) tarafından
>
> Düzgün çizgiyi hesaplayan matematik, eğimi ve aynı zamanda `X = 0` iken `Y`'nin konumunu gösteren y-kesişimini içermektedir.
>
> Bu değerlerin hesaplama yöntemini [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) sitesinde görebilirsiniz. Ayrıca [bu En Küçük Kareler hesaplayıcısını](https://www.mathsisfun.com/data/least-squares-calculator.html) ziyaret ederek sayı değerlerinin çizgiye etkisini izleyebilirsiniz.
>
> `X`, 'açıklayıcı değişken'dir. `Y`, 'bağımlı değişken'dir. Çizginin eğimi `b` ve `a` ise y-kesişimidir;`X = 0` iken `Y` değerini ifade eder.
> Önce`b` eğimini hesaplayın. Infografik [Jen Looper](https://twitter.com/jenlooper) tarafından
>
> Başka bir deyişle ve kabak verimizin orijinal sorusuna atıfta bulunursak: "ay bazında bushel başına kabak fiyatını tahmin etme" durumunda, `X` fiyatı, `Y` ise satış ayını ifade eder.
> `Y` değerini hesaplayın. Yaklaşık 4 dolar ödüyorsanız, kesin Nisan ayıdır! Infografik [Jen Looper](https://twitter.com/jenlooper) tarafından
>
> Çizgiyi hesaplayan matematik, ayrıca kesişim noktasına bağlı olan eğimi veya `X=0` iken `Y`nin yerini gösterir.
>
> Bu değerlerin hesaplama yöntemini [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) sitesinde görebilirsiniz. Ayrıca sayısal değerlerin çizgi üzerindeki etkisini izlemek için [bu En Küçük Kareler hesaplayıcısını](https://www.mathsisfun.com/data/least-squares-calculator.html) ziyaret edin.
## Korelasyon
Bir diğer önemli terim de verilen X ve Y değişkenleri arasındaki **Korelasyon Katsayısıdır**. Bir dağılım grafiği kullanarak bu katsayıyı hızlıca görselleştirebilirsiniz. Veriler düzgün bir çizgi üzerinde ise yüksek korelasyon vardır, ama veriler X ve Y arasında rastgele dağılmışsa korelasyon düşüktür.
İyi bir doğrusal regresyon modeli, En Küçük Kareler Regresyon yöntemi ile çizilmiş regresyon çizgisi kullanarak yüksek (0'a değil, 1'e yakın) bir Korelasyon Katsayısına sahip olandır.
Anlaşılması gereken bir başka terim, verilen X ve Y değişkenleri arasındaki **Korelasyon Katsayısı**dır. Bir dağılım grafiği kullanarak bu katsayıyı hızlıca görselleştirebilirsiniz. Veri noktalarının düzgün bir çizgi etrafında dağılması yüksek korelasyon, noktaların her yere saçılması ise düşük korelasyonu gösterir.
✅ Bu derse eşlik eden not defterini çalıştırın ve Ay ile Fiyat arasındaki dağılım grafiğine bakın. Dağınık grafik yorumu ile balkabağı satışlarında Ay ile Fiyat arasında yüksek mi yoksa düşük mü bir korelasyon görüyorsunuz? Ay yerine *yılın günü* gibi daha ince bir ölçüm kullandığınızda değişir mi?
İyi bir lineer regresyon modeli, En Küçük Kareler Regresyon yöntemiyle oluşturulmuş ve regresyon çizgisi olan yüksek (0'a değil 1'e yakın) Korelasyon Katsayısına sahip olacaktır.
Aşağıdaki kodda, verinin temizlendiğini ve `new_pumpkins` adında aşağıdakine benzer bir veri çerçevesi elde edildiğini varsayacağız:
✅ Bu dersin eşlik eden not defterini çalıştırın ve Ay ile Fiyat arasındaki dağılım grafiğine bakın. Kabak satışları için Ay ile Fiyat arasındaki veriler, sizce dağılım grafiğinin görsel yorumuna göre yüksek mi yoksa düşük mü korelasyona sahip? Eğer `Month` yerine *yılın günü* gibi daha ince bir ölçüt kullanırsanız değişir mi?
ID | Ay | YılınGünü | Çeşit | Şehir | Paket | Düşük Fiyat | Yüksek Fiyat | Fiyat
Aşağıdaki kodda, veriyi temizlediğimizi ve aşağıdaki gibi `new_pumpkins` adlı bir veri çerçevesine sahip olduğumuzu varsayalım:
> Veriyi temizlemek için kullanılan kod [`notebook.ipynb`](notebook.ipynb) dosyasında mevcuttur. Önceki derste yapılan aynı temizleme adımları uygulanmıştır ve `DayOfYear` sütunu aşağıdaki ifade ile hesaplanmıştır:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
> Veriyi temizlemek için kullanılan kod [`notebook.ipynb`](notebook.ipynb) dosyasında mevcuttur. Önceki derste yapılan aynı temizleme işlemlerini yaptık ve `DayOfYear` sütununu aşağıdaki ifade ile hesapladık:
Doğrusal regresyonun matematiğini anladığınıza göre, hangi balkabağı paketinin en iyi fiyatı sağlayacağını tahmin etmek için bir Regresyon modeli oluşturalım. Tatil balkabağı tarlası için balkabağı alan biri, satın alımlarını optimize edebilmek adına bu bilgiye ihtiyaç duyabilir.
Şimdi lineer regresyonun matematiğini anladığınıza göre, hangi kabak paketinin en iyi fiyatı vereceğini tahmin etmeye çalışmak için bir Regresyon modeli oluşturalım. Tatil zamanı kabak sergisi için kabak satın alan biri, kabak paketlerini en iyi şekilde satın almak için bu bilgiyi isteyebilir.
## Korelasyon Arayışı
[](https://youtu.be/uoRq-lW2eQo "Yeni başlayanlar için ML - Korelasyon Arayışı: Doğrusal Regresyonun Anahtarı")
[](https://youtu.be/uoRq-lW2eQo "Yeni başlayanlar için ML - Korelasyon Arayışı: Lineer Regresyonun Anahtarı")
> 🎥 Korelasyon hakkında kısa bir video özeti için yukarıdaki resme tıklayın.
> 🎥 Korelasyonun kısa video özeti için yukarıdaki görsele tıklayın.
Önceki dersten muhtemelen farklı ayların ortalama fiyatının şöyle göründüğünü gördünüz:
Önceki dersten muhtemelen farklı aylar için ortalama fiyatların şöyle göründüğünü gördünüz:
<imgalt="Aylara göre ortalama fiyat" src="../../../../translated_images/tr/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="Aya göre ortalama fiyat" src="../../../../translated_images/tr/barchart.a833ea9194346d76.webp"width="50%"/>
Bu, bir miktar korelasyon olduğunu düşündürür ve `Ay` ile `Fiyat` veya `YılınGünü` ile `Fiyat` arasındaki ilişkiyi tahmin etmek için doğrusal regresyon modeli eğitebiliriz. Aşağıda sonuncusu gösteren bir dağılım grafiği bulunmaktadır:
Bu durum biraz korelasyon olması gerektiğini düşündürür ve `Month` ile `Price` arasında veya `DayOfYear` ile `Price` arasında ilişkiyi tahmin etmek için lineer regresyon modeli eğitmeyi deneyebiliriz. İşte ikincisini gösteren dağılım grafiği:
<imgalt="Yılın Günü ve Fiyat Dağılım Grafiği" src="../../../../translated_images/tr/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
Görüldüğü gibi korelasyon oldukça küçük, `Ay` için -0.15, `YılınGünü` için ise -0.17, fakat başka önemli bir ilişki olabilir. Fiyatların farklı balkabağı çeşitlerine göre kümelendiği görünüyor. Bu hipotezi doğrulamak için, her balkabağı kategorisini farklı renkte gösterelim. `scatter` fonksiyonuna bir `ax` parametresi vererek tüm noktaları aynı grafik üzerinde çizebiliriz:
Görünüşe göre korelasyon oldukça küçük, `Month` için -0.15 ve `DayOfYear` için -0.17, ancak başka önemli bir ilişki olabilir. Farklı kabak çeşitlerine karşılık gelen farklı fiyat kümeleri var gibi duruyor. Bu hipotezi doğrulamak için her kabak kategorisini farklı bir renkle çizelim. `scatter` çizim fonksiyonuna `ax` parametresi vererek tüm noktaları aynı grafikte gösterebiliriz:
```python
ax=None
@ -139,75 +140,75 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="Yılın Günü ve Fiyat Dağılım Grafiği" src="../../../../translated_images/tr/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="Pie kabaklarının fiyat ve gün dağılım grafiği" src="../../../../translated_images/tr/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
Şimdi `Price` ve `DayOfYear` arasındaki korelasyonu `corr` fonksiyonu ile hesaplayalım; yaklaşık `-0.27` alacağız — bu, tahmin modelleri eğitmenin mantıklı olduğunu gösteriyor.
`corr` fonksiyonu kullanarak `Price` ile `DayOfYear` arasındaki korelasyonu şimdi hesaplasak, yaklaşık `-0.27` alırız - bu da tahmine dayalı model eğitmenin mantıklı olduğunu gösterir.
> Doğrusal regresyon modeli eğitmeden önce verimizin temiz olduğundan emin olmak önemlidir. Doğrusal regresyon eksik değerlerle iyi çalışmaz, bu yüzden boş hücreleri temizlemek mantıklıdır:
> Lineer regresyon modeli eğitmeden önce, verimizin temiz olduğundan emin olmak önemlidir. Lineer regresyon eksik verilerle iyi çalışmaz, bu nedenle tüm boş hücrelerden kurtulmak mantıklıdır:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Başka bir yaklaşım, bu boş değerleri, karşılık gelen sütunun ortalama değerleriyle doldurmaktır.
Başka bir yöntem ise o boş değerleri ilgili sütunun ortalama değerleri ile doldurmaktır.
## Basit Doğrusal Regresyon
## Basit Lineer Regresyon
[](https://youtu.be/e4c_UP2fSjg "Yeni başlayanlar için ML - Scikit-learn kullanarak Doğrusal ve Polinomsal Regresyon")
[](https://youtu.be/e4c_UP2fSjg "Yeni başlayanlar için ML - Scikit-learn kullanarak Lineer ve Polinom Regresyon")
> 🎥 Doğrusal ve polinomsal regresyon hakkında kısa video özeti için yukarıdaki resme tıklayın.
> 🎥 Lineer ve polinom regresyonun kısa video genel bakışı için yukarıdaki görsele tıklayın.
Doğrusal Regresyon modelimizi eğitmek için **Scikit-learn** kütüphanesini kullanacağız.
Lineer Regresyon modelimizi eğitmek için **Scikit-learn** kütüphanesini kullanacağız.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Giriş değerlerini (özellikleri) ve beklenen çıktıyı (etiket) ayrı numpy dizileri olarak ayırarak başlıyoruz:
Girdi değerlerini (özellikler) ve beklenen çıktıyı (etiket) ayrı numpy dizilerine ayırarak başlıyoruz:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Dikkat edin, Linear Regression paketinin doğru anlayabilmesi için giriş verisine `reshape` uygulamak zorunda kaldık. Linear Regression, her satırı bir özellik vektörüne karşılık gelen 2D diziyi bekler. Bizim durumumuzda, sadece bir girdi olduğundan, N×1 şeklinde bir dizi gerekir, burada N veri boyutudur.
> Giriş verisini Linear Regression paketinin doğru anlaması için `reshape` işlemi yapmamız gerektiğine dikkat edin. Doğrusal Regresyon, girdi olarak her satırı bir özellik vektörü olan 2D bir dizi bekler. Bizim durumumuzda sadece bir girdi olduğundan, array boyutu N×1 (N veri seti büyüklüğü) olmalıdır.
Sonra modeli eğitim ve test verisi olarak bölmemiz gerekmektedir, böylece eğitim sonrası modelimizi doğrulayabiliriz:
Sonra veriyi eğitim ve test veri setlerine ayırmamız gerekir, böylece eğitim sonrası modelimizi doğrulayabiliriz:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Son olarak, gerçek Doğrusal Regresyon modelinin eğitilmesi sadece iki satır kod alır. `LinearRegression` nesnesini tanımlıyoruz ve `fit` metodu ile veriye uyduruyoruz:
Son olarak, Lineer Regresyon modelini gerçek anlamda eğitmek sadece iki satır kod alır. `LinearRegression` nesnesini tanımlarız ve `fit` metodu ile verimize uyarlarız:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`fit` işleminden sonra `LinearRegression` nesnesi regresyonun tüm katsayılarını içerir ve bunlara `.coef_` özelliği aracılığıyla erişilebilir. Bizim durumumuzda, yalnızca bir katsayı vardır ve bu yaklaşık `-0.017` civarında olmalıdır. Bu, fiyatların zamanla biraz düşme eğiliminde olduğunu gösterir, ancak çok fazla değil, günde yaklaşık 2 sent kadar. Regresyonun Y eksenini kestiği noktaya `lin_reg.intercept_` ile erişebiliriz - bizim örneğimizde bu yaklaşık `21` olacak ve yılın başındaki fiyatı gösterir.
`fit` işleminden sonra `LinearRegression` nesnesi regresyonun tüm katsayılarını içerir ve bunlara `.coef_` özelliği ile erişilebilir. Bizim örneğimizde sadece bir katsayı var ve bu değer yaklaşık `-0.017` civarında olmalı. Bu, fiyatların zamanla biraz düştüğünü, ancak çok fazla olmadığını, günde yaklaşık 2 sent kadar azaldığını gösterir. Regresyonun Y ekseni ile kesişim noktasına ise `lin_reg.intercept_` ile erişebiliriz - bizim durumumuzda bu değer yaklaşık `21` olacak ve yılın başındaki fiyatı gösterir.
Modelimizin ne kadar doğru olduğunu görmek için test veri seti üzerinde fiyatları tahmin edebilir ve ardından tahminlerimizin beklenen değerlere ne kadar yakın olduğunu ölçebiliriz. Bu, beklenen ve tahmin edilen değerler arasındaki tüm kare farkların ortalamasının karekökü olan kök ortalama kare hata (RMSE) metriği kullanılarak yapılabilir.
Modelimizin ne kadar doğru olduğunu görmek için test veri seti üzerinde fiyat tahminleri yapabiliriz ve ardından tahminlerin beklenen değerlerle ne kadar yakın olduğunu ölçebiliriz. Bu, beklenen ve tahmin edilen değerler arasındaki tüm kare farkların ortalamasının karekökü olan root mean square error (RMSE) metriğiyle yapılabilir.
Hatalarımız yaklaşık 2 puan civarında görünüyor, bu da yaklaşık %17. Çok iyi değil. Model kalitesinin diğer bir göstergesi **belirleme katsayısı**dır ve şöyle elde edilir:
Hata yaklaşık 2 puan civarında görünüyor, bu da yaklaşık %17. Çok iyi değil. Model kalitesinin bir diğer göstergesi ise **determination katsayısı**dır ve şöyle elde edilir:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Eğer değer 0 ise, model girdi verilerini dikkate almıyor demektir ve *en kötü lineer tahmin edici* gibi davranır, bu da sonuçların sadece ortalama değeridir. 1 değeri ise tüm beklenen çıktıları mükemmel tahmin edebileceğimiz anlamına gelir. Bizde katsayı yaklaşık 0.06 civarında, bu oldukça düşük.
Eğer değer 0 ise, model giriş verilerini hesaba katmaz ve *en kötü doğrusal tahminci* gibi davranır ki bu sadece sonucun ortalamasıdır. Değer 1 olursa, tüm beklenen çıktıları mükemmel şekilde tahmin edebiliriz. Bizim durumumuzda, katsayı yaklaşık 0.06 civarında, yani oldukça düşük.
Regresyonun nasıl çalıştığını daha iyi görmek için test verilerini regresyon çizgisiyle birlikte de çizebiliriz:
Test verilerini ve regresyon doğrusunu birlikte çizerek regresyonun nasıl çalıştığını daha iyi görebiliriz:
```python
plt.scatter(X_test,y_test)
@ -236,17 +236,17 @@ plt.plot(X_test,pred)
## Polinom Regresyonu
Doğrusal regresyonun bir başka türü Polinom Regresyonudur. Bazen değişkenler arasında doğrusal bir ilişki vardır - hacmi ne kadar büyükse balkabağının fiyatı o kadar yüksek olur - bazen bu ilişkiler düz bir çizgi ya da düzlem olarak çizilemez.
Lineer regresyonun diğer bir türü Polinom Regresyonudur. Bazen değişkenler arasında lineer bir ilişki olsa da - hacimce kabak ne kadar büyükse fiyat o kadar yüksek - bazen bu ilişkiler düzlem veya doğru olarak çizilemez.
✅ İşte Polinom Regresyonu kullanılabilecek [başka bazı örnekler](https://online.stat.psu.edu/stat501/lesson/9/9.8)
Date ve Price arasındaki ilişkiye bir kez daha bakın. Bu saçılım grafiği mutlaka bir doğruyla mı analiz edilmeli gibi görünüyor? Fiyatlar dalgalanamaz mı? Bu durumda polinom regresyonu deneyebilirsiniz.
Tarih ve Fiyat arasındaki ilişkiye tekrar bakalım. Bu saçılım grafiği mutlaka bir doğru ile mi analiz edilmeli? Fiyatlar dalgalanamaz mı? Bu durumda polinom regresyonu deneyebilirsiniz.
✅ Polinomlar bir veya daha fazla değişken ve katsayı içerebilen matematiksel ifadelerden oluşur.
✅ Polinomlar, bir veya daha fazla değişken ve katsayıdan oluşabilen matematiksel ifadelerdir.
Polinom regresyon, doğrusal olmayan verilere daha iyi uyması için eğri bir çizgi oluşturur. Bizim durumumuzda, giriş verisine karesel `DayOfYear` değişkenini dahil edersek, verimizi yıl içinde belirli bir noktada minimuma sahip parabolik bir eğriyle uyarlayabiliriz.
Polinom regresyon, doğrusal olmayan verilere daha iyi uyum sağlamak için eğri bir doğrusu oluşturur. Bizim durumumuzda, girdi verilerine karesel `DayOfYear` değişkenini eklersek, verilerimizi minimum noktasının yıl içinde belirli bir yerde olduğu parabolik bir eğriyle uydurabiliriz.
Scikit-learn, veri işleme adımlarını birleştirmek için faydalı bir [pipeline API'si](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) içerir. Bir **pipeline** bir dizi **estimator**dir. Bizim durumumuzda önce modele polinom özellikler ekleyen, ardından regresyon eğiten bir pipeline oluşturacağız:
Scikit-learn, veri işleme adımlarını birleştirmek için faydalı bir [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) içerir. Bir **pipeline**, birbirine bağlı**estimator** zinciridir. Bizim örneğimizde, önce modele polinom özellikler ekleyen sonra regresyonu eğiten bir pipeline oluşturacağız:
```python
from sklearn.preprocessing import PolynomialFeatures
`PolynomialFeatures(2)` kullanmak, giriş verisindeki tüm ikinci dereceden polinomları dahil edeceğimiz anlamına gelir. Bizim durumumuzda bu sadece `DayOfYear`<sup>2</sup> anlamına gelir, ancak örneğin iki değişken olan X ve Y için bu X<sup>2</sup>, XY ve Y<sup>2</sup> ekler. İsterseniz daha yüksek dereceli polinomlar da kullanabilirsiniz.
`PolynomialFeatures(2)` kullanımı, girdi verilerinden tüm ikinci dereceden polinomları dahil edeceğimiz anlamına gelir. Bizim örneğimizde sadece `DayOfYear`<sup>2</sup> olacak, ancak iki girdi değişkeni X ve Y için bu X<sup>2</sup>, XY ve Y<sup>2</sup> eklemek anlamına gelir. İsterseniz daha yüksek dereceli polinomlar da kullanabilirsiniz.
Pipeline nesneleri, orijinal `LinearRegression` nesnesi gibi kullanılabilir, yani pipeline'ı`fit` edebilir, ardından `predict` ile tahmin sonuçlarını alabiliriz:
Düzensiz test verileri üzerinde doğrudan çizim yapmak yerine, `np.linspace` ile düzgün bir giriş değeri aralığı oluşturarak düzgün bir yaklaşık eğri çizeriz (aksi halde zikzak çizgi oluşur):
Pipelinelar, orijinal `LinearRegression` nesnesi ile aynı şekilde kullanılabilir, yani pipeline üzerinde `fit` yapabilir ve sonra `predict` ile tahmin sonuçları alabilirsiniz. İşte test verileri ve yaklaşık eğriyi gösteren grafik:
Aşağıda test verilerini ve yaklaşık eğriyi gösteren grafik var:
Polinom Regresyon kullanarak MSE'yi biraz daha düşürebilir ve belirleme katsayısını biraz daha yükseltebiliriz, ama çok değil. Diğer özellikleri de hesaba katmamız gerekiyor!
Polinom Regresyon kullanarak biraz daha düşük RMSE ve daha yüksek determination elde etmek mümkün fakat çok büyük bir fark değil. Diğer özellikleri de dikkate almamız gerekiyor!
> Kabak fiyatlarının en düşük olduğu yerin Cadılar Bayramı civarı olduğunu görebilirsiniz. Bunu nasıl açıklarsınız?
> Minimum kabak fiyatlarının genellikle Cadılar Bayramı civarında gözlendiğini görebilirsiniz. Bunu nasıl açıklarsınız?
🎃 Tebrikler, kabak fiyatını tahmin etmeye yardımcı olabilecek bir model yarattınız. Muhtemelen aynı prosedürü tüm kabak çeşitleri için tekrarlayabilirsiniz, ama bu zahmetli olur. Şimdi modelimizde kabak çeşidini nasıl dikkate alacağımızı öğrenelim!
🎃 Tebrikler, turta kabakları fiyatını tahmin etmeye yardımcı olacak bir model oluşturdunuz. Muhtemelen tüm kabak türleri için aynı prosedürü tekrarlayabilirsiniz, ama bu zahmetli olur. Şimdi modelimize kabak çeşidini nasıl dahil edeceğimizi öğrenelim!
## Kategorik Özellikler
İdeal dünyada, farklı kabak çeşitlerinin fiyatlarını aynı modelle tahmin etmek isteriz. Ancak `Variety` sütunu, `Month` gibi sütunlardan biraz farklıdır çünkü sayısal olmayan değerler içerir. Bu tür sütunlara **kategorik** denir.
İdeal dünyada, farklı kabak çeşitlerinin fiyatlarını aynı modelle tahmin edebilmek isteriz. Ancak `Variety` sütunu, `Month` gibi sayısal sütunlardan biraz farklıdır çünkü sayısal olmayan değerler içerir. Bu tür sütunlara **kategorik** denir.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 Kategorik özelliklerin kullanımına kısa video özetini izlemek için yukarıdaki görsele tıklayın.
> 🎥 Kategorik özelliklerin kullanımı hakkında kısa video açıklaması için yukarıdaki görsele tıklayın.
Burada ortalama fiyatın çeşide nasıl bağlı olduğunu görebilirsiniz:
Burada ortalama fiyatın çeşide göre nasıl değiştiğini görebilirsiniz:
<imgalt="Average price by variety"src="../../../../translated_images/tr/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
Çeşidi dikkate almak için önce onu sayısal forma dönüştürmemiz veya **kodlamamız** gerekir. Bunu yapmanın birkaç yolu vardır:
Çeşidi hesaba katmak için önce onu sayısal forma dönüştürmeli veya **kodlamalıyız**. Bunu yapmanın birkaç yolu var:
* Basit **sayısal kodlama** farklı çeşitlerin bir tablosunu oluşturur ve ardından çeşit adını o tablodaki bir indeks ile değiştirir. Bu doğrusal regresyon için en iyi fikir değildir çünkü doğrusal regresyon indeksin gerçek sayısal değerini alır ve sonucu buna göre katsayı ile çarpar. Bizim durumumuzda, indeks numarası ile fiyat arasındaki ilişki açıkça doğrusal değildir, indekslerin belirli bir şekilde sıralandığını varsaysak bile.
* **One-hot kodlama** `Variety` sütununu dört farklı sütunla değiştirir, her biri bir çeşit içindir. Her sütun karşılık gelen satır o çeşide aitse `1`, değilse `0` içerir. Bu, doğrusal regresyonda dört katsayı olacağı anlamına gelir; her kabak çeşidi için biri, o çeşidin "başlangıç fiyatı" (veya "ek fiyat") sorumlusudur.
* Basit **sayısal kodlama**, farklı çeşitler tablosu oluşturur ve sonra o tablodaki indeksi çeşidin adıyla değiştirir. Ancak bu lineer regresyon için en iyi fikir değildir çünkü lineer regresyon indeksin gerçek sayısal değerini alır ve bazı katsayılarla çarpıp sonuca ekler. Bizim durumumuzda indeks numarası ile fiyat arasındaki ilişki açıkça doğrusal değildir, indeksler belli bir sıraya göre ayarlansa bile.
* **One-hot encoding**, `Variety` sütununu her çeşit için bir sütun olmak üzere 4 farklı sütunla değiştirir. Her sütun, karşılık gelen satır o çeşide ait ise `1`, değilse `0` içerir. Bu şekilde lineer regresyonda dört katsayı olur, her kabak çeşidi için "başlangıç fiyatı" (veya daha doğrusu o çeşide ait "ek fiyat") sorumludur.
Aşağıdaki kod kabak çeşidini one-hot kodlama ile nasıl yapabileceğimizi gösterir:
Aşağıdaki kod, çeşidi one-hot encode ile nasıl kodlayabileceğimizi gösteriyor:
One-hot kodlu çeşidi giriş olarak kullanarak doğrusal regresyon eğitmek için sadece `X` ve `y` verilerini doğru başlatmamız gerekir:
Lineer regresyonu one-hot encode edilmiş çeşit kullanarak eğitmek için `X` ve `y` verilerini doğru şekilde başlatmamız yeterlidir:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Kalan kod, yukarıda doğrusal regresyon eğitmek için kullandığımız ile aynıdır. Denerseniz, ortalama kare hata yaklaşık aynı kalır ama belirleme katsayısı çok daha yüksek olur (~%77). Daha doğru tahminler almak için, daha fazla kategorik özellik ile birlikte `Month` veya `DayOfYear` gibi sayısal özellikleri de dikkate alabiliriz. Tüm özellikleri birleştirmek için `join` kullanılabilir:
Kalan kod, yukarıda lineer regresyonu eğitmek için kullandığımızla aynı. Denersek, ortalama kare hatanın yaklaşık aynı olduğunu ama belirleme katsayısının (~77%) çok daha yüksek olduğunu göreceğiz. Daha doğru tahminler için daha fazla kategorik ve sayısal özellikleri, örneğin `Month` veya `DayOfYear`'i de dikkate alabiliriz. Tüm özellikleri tek büyük bir dizi haline getirmek için `join` kullanabiliriz:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -320,68 +342,68 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Burada ayrıca `City` ve `Package` türü de dikkate alınır, bu da MSE'yi 2.84 (%10) ve belirleme katsayısını 0.94 yapar!
Burada ayrıca `City` ve `Package` tipi de hesaba katılıyor ve bu sayede RMSE 2.84 (%10.5), belirleme 0.94 oluyor!
## Hepsini Bir Araya Getirmek
En iyi modeli oluşturmak için, yukarıdaki örnekteki birleşik (one-hot kodlu kategorik + sayısal) verileri Polinom Regresyon ile birlikte kullanabiliriz. İşte kolayınız için tam kod:
En iyi modeli oluşturmak için yukarıdaki örnekteki birleştirilmiş (one-hot encode edilmiş kategorik + sayısal) verileri Polinom Regresyon ile birlikte kullanabiliriz. İşte kolayca kullanmanız için tam kod:
```python
# eğitim verilerini ayarla
# eğitim verisini ayarla
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# eğitim-test bölünmesi yap
# eğitim-test bölümü yap
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
Bu, bize neredeyse %97 belirleme katsayısı ve MSE=2.23 (~%8 tahmin hatası) verecektir.
Bu, neredeyse %97 belirleme katsayısı ve RMSE=2.23 (%8 tahmin hatası) verecektir.
| Model | MSE | Belirleme |
| Model | RMSE | Belirleme |
|-------|-----|---------------|
| `DayOfYear`Doğrusal | 2.77 (17.2%) | 0.07 |
| `DayOfYear`Lineer | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polinom | 2.73 (17.0%) | 0.08 |
| `Variety`Doğrusal | 5.24 (19.7%) | 0.77 |
| Tüm özellikler Doğrusal | 2.84 (10.5%) | 0.94 |
| `Variety`Lineer | 5.24 (19.7%) | 0.77 |
| Tüm özellikler Lineer | 2.84 (10.5%) | 0.94 |
| Tüm özellikler Polinom | 2.23 (8.25%) | 0.97 |
🏆 Aferin! Bir derste dört regresyon modeli yarattınız ve model kalitesini %97’ye kadar yükselttiniz. Regresyonun son bölümünde kategorileri belirlemek için Lojistik Regresyondan bahsedeceğiz.
🏆 Aferin! Tek derste dört tane Regresyon modeli oluşturdunuz ve model kalitesini %97'ye çıkardınız. Regresyonun final bölümünde, kategorileri belirlemek için Lojistik Regresyon öğrenilecektir.
---
## 🚀Meydan Okuma
## 🚀Challenge
Bu not defterinde çeşitli değişkenlerle deney yaparak korelasyonun model doğruluğuna nasıl karşılık geldiğini görün.
Bu defterde farklı değişkenleri test edin ve korelasyonun model doğruluğuna etkisini görün.
## [Ders sonrası sınav](https://ff-quizzes.netlify.app/en/ml/)
## Tekrar & Kendi Kendine Çalışma
Bu derste Doğrusal Regresyonu öğrendik. Başka önemli regresyon türleri de vardır. Stepwise, Ridge, Lasso ve Elasticnet teknikleri hakkında okuyun. Daha fazla öğrenmek için iyi bir kurs [Stanford İstatistiksel Öğrenme kursu](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).
Bu derste Lineer Regresyondan bahsettik. Başka önemli Regresyon türleri de vardır. Stepwise, Ridge, Lasso ve Elasticnet tekniklerini okuyun. Daha fazla öğrenmek için iyi bir kaynak [Stanford İstatistiksel Öğrenme kursu](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Ödev
[Model Oluştur](assignment.md)
[Model Oluşturma](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Feragatnamesi**:
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 yerel dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu oluşabilecek herhangi bir yanlış anlama veya yanlış yorumdan sorumlu değiliz.
**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österilse de, otomatik çevirilerin hatalar veya yanlışlıklar içerebileceğini lütfen göz önünde bulundurun. Yetkili kaynak olarak orijinal belgenin kendi dilindeki versiyonu kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi tavsiye edilir. Bu çevirinin kullanımı sonucunda oluşabilecek yanlış anlamalar veya yorum hatalarından sorumlu değiliz.
"## Kabak Fiyatlandırması için Doğrusal ve Polinomial Regresyon - Ders 3\n",
"## Kabak Fiyatlandırması için Lineer ve Polinom Regresyon - Ders 3\n",
"\n",
"Gerekli kütüphaneleri ve veri setini yükleyin. Verileri aşağıdaki alt küme içeren bir veri çerçevesine dönüştürün:\n",
"Gerekli kütüphaneleri ve veri setini yükleyin. Veriyi aşağıdaki alt kümeyi içeren bir dataframe'e dönüştürün:\n",
"\n",
"- Sadece kile ile fiyatlandırılan kabakları alın\n",
"- Tarihi bir aya dönüştürün\n",
"- Fiyatı, yüksek ve düşük fiyatların ortalaması olarak hesaplayın\n",
"- Fiyatıkile miktarına göre fiyatlandırmayı yansıtacak şekilde dönüştürün\n"
"- Sadece bushel başına fiyatlandırılan kabakları alın\n",
"- Tarihi aya dönüştürün\n",
"- Fiyatı yüksek ve düşük fiyatların ortalaması olarak hesaplayın\n",
"- Fiyatıbushel miktarına göre yansıtacak şekilde dönüştürün\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Bir dağılım grafiği, elimizde yalnızca Ağustos'tan Aralık'a kadar olan ay verilerinin bulunduğunu hatırlatır. Muhtemelen doğrusal bir şekilde sonuçlar çıkarabilmek için daha fazla veriye ihtiyacımız var.\n"
"Bir dağılım grafiği, elimizde sadece Ağustos ile Aralık ayları arasına ait veri olduğunu hatırlatır. Doğrusal bir şekilde sonuç çıkarabilmek için muhtemelen daha fazla veriye ihtiyacımız var.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"İlişki olup olmadığına bakalım:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Görünüşe göre korelasyon oldukça küçük, ancak başka daha önemli bir ilişki var - çünkü yukarıdaki grafikteki fiyat noktaları birkaç belirgin küme oluşturuyor gibi görünüyor. Haydi farklı kabak çeşitlerini gösterecek bir grafik yapalım:\n"
"Görünüşe göre korelasyon oldukça küçük, ancak daha önemli başka bir ilişki var - çünkü yukarıdaki grafikte fiyat noktaları birkaç farklı kümeye sahip gibi görünüyor. Farklı kabak çeşitlerini gösterecek bir grafik yapalım:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Şimdilik, yalnızca bir çeşit - **turta tipi** üzerinde yoğunlaşalım.\n"
"Bazen özellikler ile sonuçlar arasındaki ilişki doğası gereği doğrusal olmayabilir. Örneğin, kabak fiyatları kış aylarında (aylar=1,2) yüksek olabilir, yaz aylarında (aylar=5-7) düşebilir ve ardından tekrar yükselebilir. Doğrusal regresyon bu ilişkiyi doğru bir şekilde bulamaz.\n",
"Bazen özellikler ile sonuçlar arasındaki ilişki doğası gereği doğrusal olmayabilir. Örneğin, kabak fiyatları kışın yüksek olabilir (aylar=1,2), ardından yaz boyunca (aylar=5-7) düşebilir ve sonra yine yükselir. Doğrusal regresyon bu ilişkiyi doğru bir şekilde bulamaz.\n",
"\n",
"Bu durumda, ek özellikler eklemeyi düşünebiliriz. Basit bir yöntem, giriş özelliklerinden polinomlar kullanmaktır, bu da **polinom regresyon** ile sonuçlanır. Scikit Learn'de, polinom özelliklerini otomatik olarak önceden hesaplamak için boru hatlarını kullanabiliriz:\n"
"Bu durumda, ek özellikler eklemeyi düşünebiliriz. Basit bir yöntem, giriş özelliklerinden polinomlar kullanmaktır; bu da **polinom regresyonu** ile sonuçlanır. Scikit Learn'de, polinom özelliklerini otomatik olarak önceden hesaplamak için pipeline’lar kullanabiliriz: \n"
"İdeal bir dünyada, farklı balkabağı çeşitleri için fiyatları aynı modelle tahmin edebilmek isteriz. Çeşidi hesaba katmak için, önce onu sayısal bir forma dönüştürmemiz, yani **kodlamamız** gerekir. Bunu yapmanın birkaç yolu vardır:\n",
"İdeal dünyada, aynı modeli kullanarak farklı kabak çeşitleri için fiyatları tahmin edebilmek isteriz. Çeşidi dikkate almak için önce onu sayısal forma dönüştürmemiz veya **kodlamamız** gerekir. Bunu yapmanın birkaç yolu vardır:\n",
"\n",
"* Basit sayısal kodlama, farklı çeşitlerin bir tablosunu oluşturur ve ardından çeşit adını bu tablodaki bir indeksle değiştirir. Bu, doğrusal regresyon için en iyi fikir değildir, çünkü doğrusal regresyon indeksin sayısal değerini dikkate alır ve bu sayısal değer muhtemelen fiyatla sayısal olarak ilişki kurmaz.\n",
"* Tekil kodlama (one-hot encoding), `Variety` sütununu 4 farklı sütunla değiştirir. Her sütun, ilgili satırın belirli bir çeşide ait olup olmadığını göstermek için 1 veya 0 içerir.\n",
"* Farklı çeşitlerin bir tablosunu oluşturacak basit sayısal kodlama ve ardından çeşit ismini o tablodaki bir indeksle değiştirme. Bu, lineer regresyon için en iyi fikir değildir, çünkü lineer regresyon indeksin sayısal değerini dikkate alır ve sayısal değer büyük olasılıkla fiyatla sayısal olarak korele olmaz.\n",
"* Tek-sıcak kodlama (one-hot encoding), bu `Variety` sütununu her biri bir çeşide ait olan 4 farklı sütunla değiştirir; her sütunda ilgili satır verilen çeşide ait ise 1, değilse 0 bulunur.\n",
"\n",
"Aşağıdaki kod, bir çeşidi nasıl tekil kodlayabileceğimizi gösteriyor:\n"
"Aşağıdaki kod, bir çeşidin tek-sıcak kodlanmasının nasıl yapılabileceğini göstermektedir:\n"
]
},
{
@ -940,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Çeşit Üzerinde Doğrusal Regresyon\n",
"### Çeşit Üzerinde Lineer Regresyon\n",
"\n",
"Şimdi yukarıdakiyle aynı kodu kullanacağız, ancak `DayOfYear` yerine giriş olarak tek-seçenekli kodlanmış çeşidimizi kullanacağız:\n"
"Şimdi yukarıdaki ile aynı kodu kullanacağız, ancak `DayOfYear` yerine girdimiz olarak tek-sıcak-kodlu çeşidimizi kullanacağız:\n"
]
},
{
@ -990,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Aynı şekilde diğer özellikleri kullanmayı deneyebilir ve bunları `Month` veya `DayOfYear` gibi sayısal özelliklerle birleştirebiliriz:\n"
"Aynı şekilde diğer özellikleri de deneyebilir ve bunları `Month` veya `DayOfYear` gibi sayısal özelliklerle birleştirebiliriz:\n"
]
},
{
@ -1021,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Polinom Regresyon\n",
"### Polinom Regresyonu\n",
"\n",
"Polinom regresyon, tekil sıcak kodlanmış kategorik özelliklerle de kullanılabilir. Polinom regresyonu eğitmek için kullanılan kod, yukarıda gördüğümüzle temelde aynı olacaktır.\n"
"Polinom regresyonu, tek-sıcak-kodlanmış kategorik özelliklerle de kullanılabilir. Polinom regresyonu eğitmek için kullanılacak kod temelde yukarıda gördüğümüzle aynı olacaktır.\n"
]
},
{
@ -1070,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Feragatname**: \nBu 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. Orijinal belgenin kendi dilindeki hali yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan herhangi bir yanlış anlama veya yanlış yorumlama durumunda sorumluluk kabul edilmez.\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 göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen göz önünde bulundurun. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucunda oluşabilecek yanlış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"