From 5bb8cd660529b0561c5ffd0ea484cd12f7516966 Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Sun, 26 Apr 2026 18:56:51 +0000 Subject: [PATCH] chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) --- translations/da/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 100 +++--- .../da/2-Regression/3-Linear/README.md | 255 ++++++++------- .../3-Linear/solution/notebook.ipynb | 67 ++-- translations/fi/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 108 ++++--- .../fi/2-Regression/3-Linear/README.md | 305 ++++++++++-------- .../3-Linear/solution/notebook.ipynb | 65 ++-- translations/no/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 94 +++--- .../no/2-Regression/3-Linear/README.md | 251 +++++++------- .../3-Linear/solution/notebook.ipynb | 67 ++-- 12 files changed, 725 insertions(+), 629 deletions(-) diff --git a/translations/da/.co-op-translator.json b/translations/da/.co-op-translator.json index e95d618c0..7518fd2bc 100644 --- a/translations/da/.co-op-translator.json +++ b/translations/da/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "da" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T00:27:18+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T18:53:49+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "da" }, @@ -90,8 +90,8 @@ "language_code": "da" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T19:57:56+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T18:53:22+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "da" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "da" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T18:51:31+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "da" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-04T23:29:27+00:00", diff --git a/translations/da/1-Introduction/4-techniques-of-ML/README.md b/translations/da/1-Introduction/4-techniques-of-ML/README.md index 0753b97a5..13a8459f8 100644 --- a/translations/da/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/da/1-Introduction/4-techniques-of-ML/README.md @@ -1,113 +1,113 @@ # Teknikker inden for maskinlæring -Processen med at opbygge, bruge og vedligeholde maskinlæringsmodeller og de data, de anvender, adskiller sig markant fra mange andre udviklingsarbejdsgange. I denne lektion vil vi afmystificere processen og skitsere de vigtigste teknikker, du skal kende. Du vil: +Processen med at bygge, bruge og vedligeholde maskinlæringsmodeller og de data, de bruger, er en meget anderledes proces end mange andre udviklingsarbejdsflows. I denne lektion vil vi afmystificere processen og skitsere de vigtigste teknikker, du skal kende. Du vil: -- Forstå de processer, der ligger til grund for maskinlæring på et overordnet niveau. +- Forstå processerne, der ligger til grund for maskinlæring på et overordnet niveau. - Udforske grundlæggende begreber som 'modeller', 'forudsigelser' og 'træningsdata'. -## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) +## [Quiz før forelæsning](https://ff-quizzes.netlify.app/en/ml/) -[![ML for begyndere - Teknikker inden for maskinlæring](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for begyndere - Teknikker inden for maskinlæring") +[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning") > 🎥 Klik på billedet ovenfor for en kort video, der gennemgår denne lektion. ## Introduktion -På et overordnet niveau består håndværket med at skabe maskinlæringsprocesser af en række trin: +På et højt niveau består håndværket ved oprettelse af maskinlæringsprocesser (ML) af en række trin: -1. **Definér spørgsmålet**. De fleste ML-processer starter med at stille et spørgsmål, der ikke kan besvares med et simpelt betinget program eller en regelbaseret motor. Disse spørgsmål drejer sig ofte om forudsigelser baseret på en samling data. -2. **Indsaml og forbered data**. For at kunne besvare dit spørgsmål har du brug for data. Kvaliteten og, nogle gange, mængden af dine data vil afgøre, hvor godt du kan besvare dit oprindelige spørgsmål. Visualisering af data er en vigtig del af denne fase. Denne fase inkluderer også at opdele dataene i en trænings- og testgruppe for at opbygge en model. -3. **Vælg en træningsmetode**. Afhængigt af dit spørgsmål og karakteren af dine data skal du vælge, hvordan du vil træne en model, så den bedst afspejler dine data og giver præcise forudsigelser. Dette er den del af din ML-proces, der kræver specifik ekspertise og ofte en betydelig mængde eksperimentering. -4. **Træn modellen**. Ved hjælp af dine træningsdata vil du bruge forskellige algoritmer til at træne en model til at genkende mønstre i dataene. Modellen kan anvende interne vægte, der kan justeres for at prioritere visse dele af dataene frem for andre for at opbygge en bedre model. -5. **Evaluer modellen**. Du bruger data, som modellen aldrig har set før (dine testdata) fra din indsamlede samling for at se, hvordan modellen klarer sig. -6. **Parameterjustering**. Baseret på modellens ydeevne kan du gentage processen med forskellige parametre eller variabler, der styrer adfærden af de algoritmer, der bruges til at træne modellen. -7. **Forudsig**. Brug nye input til at teste modellens nøjagtighed. +1. **Beslut dig for spørgsmålet**. De fleste ML-processer starter med at stille et spørgsmål, som ikke kan besvares af et simpelt betinget program eller en regelbaseret motor. Disse spørgsmål drejer sig ofte om forudsigelser baseret på en samling data. +2. **Indsaml og forbered data**. For at kunne besvare dit spørgsmål har du brug for data. Kvaliteten og nogle gange også mængden af dine data vil afgøre, hvor godt du kan besvare dit oprindelige spørgsmål. Visualisering af data er en vigtig del af denne fase. Denne fase inkluderer også opdeling af data i en trænings- og testgruppe til at bygge en model. +3. **Vælg en træningsmetode**. Afhængig af dit spørgsmål og karakteren af dine data skal du vælge, hvordan du vil træne en model for bedst at afspejle dine data og lave nøjagtige forudsigelser. Dette er den del af din ML-proces, der kræver specifik ekspertise og ofte en betydelig mængde eksperimenter. +4. **Træn modellen**. Med dine træningsdata bruger du forskellige algoritmer til at træne en model til at genkende mønstre i dataene. Modellen kan benytte interne vægte, som kan justeres for at favorisere visse dele af dataene frem for andre for at bygge en bedre model. +5. **Evaluér modellen**. Du bruger data, som modellen ikke har set før (dine testdata) fra dit samlede datasæt for at se, hvordan modellen præsterer. +6. **Parametertuning**. Baseret på modellens præstation kan du gentage processen ved at bruge forskellige parametre eller variable, som styrer algoritmernes adfærd, der træner modellen. +7. **Forudsig**. Brug nye input til at teste din modells nøjagtighed. -## Hvilket spørgsmål skal du stille? +## Hvilket spørgsmål man skal stille -Computere er særligt dygtige til at opdage skjulte mønstre i data. Denne evne er meget nyttig for forskere, der har spørgsmål om et givet område, som ikke let kan besvares ved at oprette en betingelsesbaseret regelmotor. Givet en aktuarmæssig opgave kan en dataforsker for eksempel konstruere håndlavede regler omkring dødeligheden for rygere vs. ikke-rygere. +Computere er særligt dygtige til at opdage skjulte mønstre i data. Denne egenskab er meget nyttig for forskere, som har spørgsmål om et givet domæne, som ikke let kan besvares ved at oprette en betingelsesbaseret regelsystem. Givet en aktuaropgave kan en dataforsker for eksempel konstruere håndlavede regler omkring dødeligheden for rygere kontra ikke-rygere. -Når mange andre variabler bringes ind i ligningen, kan en ML-model imidlertid vise sig at være mere effektiv til at forudsige fremtidige dødelighedsrater baseret på tidligere sundhedshistorik. Et mere muntert eksempel kunne være at lave vejrudsigter for april måned på et givet sted baseret på data, der inkluderer breddegrad, længdegrad, klimaforandringer, nærhed til havet, jetstrømmønstre og mere. +Når mange andre variable bringes ind i ligningen, kan en ML-model imidlertid vise sig mere effektiv til at forudsige fremtidige dødelighedsrater baseret på tidligere sygehistorik. Et mere positivt eksempel kan være at lave vejrudsigter for april måned på et givet sted baseret på data, der inkluderer breddegrad, længdegrad, klimaforandringer, nærhed til havet, jetstrømmenes mønstre og mere. -✅ Denne [præsentation](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om vejrmodeller giver et historisk perspektiv på brugen af ML i vejranalyse. +✅ Dette [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om vejrmæssige modeller giver et historisk perspektiv på brug af ML i vejr-analyse. -## Opgaver før opbygning +## Opgaver før modellering -Før du begynder at opbygge din model, er der flere opgaver, du skal udføre. For at teste dit spørgsmål og danne en hypotese baseret på modellens forudsigelser skal du identificere og konfigurere flere elementer. +Før du går i gang med at bygge din model, er der flere opgaver, du skal gennemføre. For at teste dit spørgsmål og danne en hypotese baseret på en modells forudsigelser, skal du identificere og konfigurere flere elementer. ### Data -For at kunne besvare dit spørgsmål med nogen form for sikkerhed har du brug for en god mængde data af den rette type. Der er to ting, du skal gøre på dette tidspunkt: +For at kunne besvare dit spørgsmål med en vis sikkerhed har du brug for en god mængde data af den rette type. Der er to ting, du skal gøre på dette tidspunkt: -- **Indsaml data**. Med tanke på den tidligere lektion om retfærdighed i dataanalyse skal du indsamle dine data med omhu. Vær opmærksom på kilderne til disse data, eventuelle iboende skævheder, de måtte have, og dokumentér deres oprindelse. -- **Forbered data**. Der er flere trin i dataforberedelsesprocessen. Du kan være nødt til at samle data og normalisere dem, hvis de kommer fra forskellige kilder. Du kan forbedre dataenes kvalitet og mængde gennem forskellige metoder, såsom at konvertere strenge til tal (som vi gør i [Clustering](../../5-Clustering/1-Visualize/README.md)). Du kan også generere nye data baseret på de oprindelige (som vi gør i [Classification](../../4-Classification/1-Introduction/README.md)). Du kan rense og redigere dataene (som vi gør før [Web App](../../3-Web-App/README.md)-lektionen). Endelig kan du også være nødt til at tilfældiggøre og blande dem, afhængigt af dine træningsteknikker. +- **Indsaml data**. Med tanke på den tidligere lektion om fairness i dataanalyse, skal du indsamle dine data med omhu. Vær opmærksom på kilderne til disse data, eventuelle iboende skævheder og dokumentér oprindelsen. +- **Forbered data**. Der er flere trin i dataforberedelsesprocessen. Du kan have behov for at samle data og normalisere dem, hvis de kommer fra forskellige kilder. Du kan forbedre datakvaliteten og -mængden gennem forskellige metoder som konvertering af tekststrenge til tal (som vi gør i [Clustering](../../5-Clustering/1-Visualize/README.md)). Du kan også generere nye data baseret på de originale (som vi gør i [Classification](../../4-Classification/1-Introduction/README.md)). Du kan rense og redigere dataene (som vi vil gøre før [Web App](../../3-Web-App/README.md)-lektionen). Endelig kan du også have behov for at tilfældiggøre og blande dataene, afhængigt af dine træningsteknikker. -✅ Efter at have indsamlet og behandlet dine data, tag et øjeblik til at se, om deres form vil tillade dig at adressere dit tilsigtede spørgsmål. Det kan være, at dataene ikke vil fungere godt i din givne opgave, som vi opdager i vores [Clustering](../../5-Clustering/1-Visualize/README.md)-lektioner! +✅ Efter at have indsamlet og behandlet dine data, tag et øjeblik til at se, om deres form vil gøre det muligt for dig at adressere dit tiltænkte spørgsmål. Det kan være, at dataene ikke klarer sig godt i din givne opgave, som vi opdager i vores [Clustering](../../5-Clustering/1-Visualize/README.md)-lektioner! ### Features og mål -En [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) er en målbar egenskab ved dine data. I mange datasæt udtrykkes det som en kolonneoverskrift som 'dato', 'størrelse' eller 'farve'. Din feature-variabel, normalt repræsenteret som `X` i kode, repræsenterer inputvariablen, der vil blive brugt til at træne modellen. +En [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) er en målbar egenskab ved dine data. I mange datasæt udtrykkes det som en kolonneoverskrift som 'dato', 'størrelse' eller 'farve'. Din feature-variabel, som oftest repræsenteres som `X` i kode, repræsenterer inputvariablen, der bruges til at træne en model. -Et mål er det, du forsøger at forudsige. Mål, normalt repræsenteret som `y` i kode, repræsenterer svaret på det spørgsmål, du forsøger at stille til dine data: i december, hvilken **farve** græskar vil være billigst? i San Francisco, hvilke kvarterer vil have de bedste ejendoms**priser**? Nogle gange omtales mål også som label-attribut. +Et mål er noget, du prøver at forudsige. Mål, som oftest repræsenteres som `y` i kode, repræsenterer svaret på det spørgsmål, du forsøger at stille til dine data: i december, hvilken **farve** græskar vil være billigst? i San Francisco, hvilke nabolag vil have den bedste ejendoms-**pris**? Nogle gange kaldes mål også for et label-attribut. ### Valg af din feature-variabel -🎓 **Feature Selection og Feature Extraction** Hvordan ved du, hvilken variabel du skal vælge, når du opbygger en model? Du vil sandsynligvis gennemgå en proces med feature selection eller feature extraction for at vælge de rigtige variabler til den mest præstationsdygtige model. De er dog ikke det samme: "Feature extraction skaber nye features fra funktioner af de oprindelige features, mens feature selection returnerer et undersæt af features." ([kilde](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Feature Selection og Feature Extraction** Hvordan ved du, hvilken variabel du skal vælge, når du bygger en model? Du går sandsynligvis igennem en proces med feature selection eller feature extraction for at vælge de rigtige variable til den mest præsterende model. Det er dog ikke det samme: "Feature extraction skaber nye features ud fra funktioner af de oprindelige features, mens feature selection returnerer et underudvalg af features." ([kilde](https://wikipedia.org/wiki/Feature_selection)) -### Visualiser dine data +### Visualisér dine data -En vigtig del af dataforskerens værktøjskasse er evnen til at visualisere data ved hjælp af flere fremragende biblioteker som Seaborn eller MatPlotLib. At repræsentere dine data visuelt kan give dig mulighed for at opdage skjulte korrelationer, som du kan udnytte. Dine visualiseringer kan også hjælpe dig med at opdage skævheder eller ubalancerede data (som vi opdager i [Classification](../../4-Classification/2-Classifiers-1/README.md)). +En vigtig del af dataforskerens værktøjskasse er evnen til at visualisere data ved hjælp af flere fremragende biblioteker som Seaborn eller MatPlotLib. At repræsentere dine data visuelt kan give dig mulighed for at opdage skjulte sammenhænge, som du kan udnytte. Dine visualiseringer kan også hjælpe dig med at opdage skævhed eller ubalancerede data (som vi opdager i [Classification](../../4-Classification/2-Classifiers-1/README.md)). -### Opdel dit datasæt +### Del dit datasæt -Før træning skal du opdele dit datasæt i to eller flere dele af ulige størrelse, der stadig repræsenterer dataene godt. +Inden træning skal du opdele dit datasæt i to eller flere dele af ulige størrelse, som stadig repræsenterer dataene godt. -- **Træning**. Denne del af datasættet bruges til at træne din model. Dette sæt udgør størstedelen af det oprindelige datasæt. -- **Test**. Et testdatasæt er en uafhængig gruppe af data, ofte hentet fra de oprindelige data, som du bruger til at bekræfte ydeevnen af den opbyggede model. -- **Validering**. Et valideringssæt er en mindre uafhængig gruppe af eksempler, som du bruger til at finjustere modellens hyperparametre eller arkitektur for at forbedre modellen. Afhængigt af størrelsen på dine data og det spørgsmål, du stiller, behøver du måske ikke at opbygge dette tredje sæt (som vi bemærker i [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). +- **Træning**. Denne del af datasættet bruges til at træne din model. Denne del udgør størstedelen af det oprindelige datasæt. +- **Test**. Et testdatasæt er en uafhængig gruppe af data, ofte udtaget fra det oprindelige datasæt, som du bruger til at bekræfte bygningens models præstation. +- **Validering**. Et valideringssæt er en mindre uafhængig gruppe af eksempler, som du bruger til at finjustere modellens hyperparametre eller arkitektur for at forbedre modellen. Afhængigt af størrelsen på dine data og spørgsmålet, du stiller, behøver du måske ikke bygge dette tredje sæt (som vi noterer i [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). -## Opbygning af en model +## Bygning af en model -Ved hjælp af dine træningsdata er dit mål at opbygge en model, eller en statistisk repræsentation af dine data, ved hjælp af forskellige algoritmer til at **træne** den. At træne en model udsætter den for data og giver den mulighed for at lave antagelser om opfattede mønstre, den opdager, validerer og accepterer eller afviser. +Ved hjælp af dine træningsdata er dit mål at bygge en model eller en statistisk repræsentation af dine data ved hjælp af forskellige algoritmer til at **træne** den. Træning af en model udsætter den for data og tillader den at lave antagelser om opfattede mønstre, den opdager, validerer og accepterer eller afviser. -### Vælg en træningsmetode +### Beslut dig for en træningsmetode -Afhængigt af dit spørgsmål og karakteren af dine data vil du vælge en metode til at træne dem. Ved at gennemgå [Scikit-learns dokumentation](https://scikit-learn.org/stable/user_guide.html) - som vi bruger i dette kursus - kan du udforske mange måder at træne en model på. Afhængigt af din erfaring kan du være nødt til at prøve flere forskellige metoder for at opbygge den bedste model. Du vil sandsynligvis gennemgå en proces, hvor dataforskere evaluerer modellens ydeevne ved at fodre den med usete data, kontrollere for nøjagtighed, skævheder og andre kvalitetsforringende problemer og vælge den mest passende træningsmetode til den aktuelle opgave. +Afhængigt af dit spørgsmål og karakteren af dine data vælger du en metode til at træne den. Hvis du går igennem [Scikit-learn's dokumentation](https://scikit-learn.org/stable/user_guide.html) - som vi bruger i dette kursus - kan du udforske mange måder at træne en model på. Afhængigt af din erfaring kan du være nødt til at prøve flere forskellige metoder for at bygge den bedste model. Du vil sandsynligvis gennemgå en proces, hvor dataforskere evaluerer en modells præstation ved at fodre den med uanset data, tjekke for nøjagtighed, bias og andre problemstillinger, der nedbryder kvalitet, og vælge den mest passende træningsmetode til den givne opgave. ### Træn en model -Med dine træningsdata er du klar til at 'fitte' dem for at skabe en model. Du vil bemærke, at i mange ML-biblioteker vil du finde koden 'model.fit' - det er på dette tidspunkt, du sender din feature-variabel som en række værdier (normalt 'X') og en målvariabel (normalt 'y'). +Bevæbnet med dine træningsdata er du klar til at 'fitte' den for at skabe en model. Du vil bemærke, at du i mange ML-biblioteker finder koden 'model.fit' - det er på dette tidspunkt, at du sender din feature-variabel som en værdiarray (normalt 'X') og en målvariabel (normalt 'y'). -### Evaluer modellen +### Evaluér modellen -Når træningsprocessen er afsluttet (det kan tage mange iterationer, eller 'epochs', at træne en stor model), vil du kunne evaluere modellens kvalitet ved at bruge testdata til at vurdere dens ydeevne. Disse data er et undersæt af de oprindelige data, som modellen ikke tidligere har analyseret. Du kan udskrive en tabel med metrics om modellens kvalitet. +Når træningsprocessen er færdig (det kan tage mange iterationer, eller 'epochs', at træne en stor model), vil du kunne evaluere modellens kvalitet ved at bruge testdata til at måle dens præstation. Disse data er en delmængde af de oprindelige data, som modellen ikke tidligere har analyseret. Du kan udskrive en tabel med metrikker om modellens kvalitet. 🎓 **Model fitting** -I maskinlæringskontekst refererer model fitting til modellens nøjagtighed i forhold til dens underliggende funktion, når den forsøger at analysere data, den ikke er bekendt med. +I forbindelse med maskinlæring refererer model fitting til nøjagtigheden af modellens underliggende funktion, mens den forsøger at analysere data, den ikke er bekendt med. -🎓 **Underfitting** og **overfitting** er almindelige problemer, der forringer modellens kvalitet, da modellen enten passer ikke godt nok eller for godt. Dette får modellen til at lave forudsigelser, der enten er for tæt på eller for løst forbundet med dens træningsdata. En overfit model forudsiger træningsdata for godt, fordi den har lært dataenes detaljer og støj for godt. En underfit model er ikke nøjagtig, da den hverken kan analysere sine træningsdata eller data, den endnu ikke har 'set', korrekt. +🎓 **Underfitting** og **overfitting** er almindelige problemer, der reducerer modellens kvalitet, fordi modellen enten passer ikke godt nok eller for godt. Det får modellen til at lave forudsigelser, som enten er for tæt forbundet med eller for løst forbundet med træningsdataene. En overfit model forudsiger træningsdata for godt, fordi den har lært detaljerne og støjen i dataene for godt. En underfit model er ikke præcis, da den hverken kan analysere sine træningsdata korrekt eller data, den ikke har 'set' endnu. -![overfitting model](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![overfitting model](../../../../translated_images/da/overfitting.1c132d92bfd93cb6.webp) > Infografik af [Jen Looper](https://twitter.com/jenlooper) -## Parameterjustering +## Parametertuning -Når din indledende træning er afsluttet, observer modellens kvalitet og overvej at forbedre den ved at justere dens 'hyperparametre'. Læs mere om processen [i dokumentationen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +Når din indledende træning er færdig, kan du se på modellens kvalitet og overveje at forbedre den ved at justere dens 'hyperparametre'. Læs mere om processen [i dokumentationen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). ## Forudsigelse -Dette er øjeblikket, hvor du kan bruge helt nye data til at teste modellens nøjagtighed. I en 'anvendt' ML-indstilling, hvor du opbygger webressourcer til at bruge modellen i produktion, kan denne proces involvere indsamling af brugerinput (et knaptryk, for eksempel) for at indstille en variabel og sende den til modellen for inferens eller evaluering. +Dette er øjeblikket, hvor du kan bruge helt nye data til at teste din modells nøjagtighed. I en 'anvendt' ML-sammenhæng, hvor du bygger webressourcer til at bruge modellen i produktion, kan denne proces involvere at indsamle brugerinput (for eksempel et tryk på en knap) for at sætte en variabel og sende den til modellen for inferens eller evaluering. -I disse lektioner vil du opdage, hvordan du bruger disse trin til at forberede, opbygge, teste, evaluere og forudsige - alle dataforskerens bevægelser og mere, mens du skrider frem i din rejse mod at blive en 'full stack' ML-ingeniør. +I disse lektioner vil du opdage, hvordan du bruger disse trin til at forberede, bygge, teste, evaluere og forudsige – alle gestusserne af en dataforsker og mere, efterhånden som du skrider frem i din rejse mod at blive en 'full stack' ML-ingeniør. --- ## 🚀Udfordring -Tegn et flowdiagram, der afspejler trinnene for en ML-praktiker. Hvor ser du dig selv lige nu i processen? Hvor forudser du, at du vil finde vanskeligheder? Hvad virker nemt for dig? +Tegn et flowdiagram, der afspejler trinnene for en ML-udøver. Hvor ser du dig selv lige nu i processen? Hvor forudser du, at du vil finde vanskeligheder? Hvad virker let for dig? -## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) ## Gennemgang & Selvstudie @@ -119,5 +119,7 @@ Søg online efter interviews med dataforskere, der diskuterer deres daglige arbe --- + **Ansvarsfraskrivelse**: -Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. + \ No newline at end of file diff --git a/translations/da/2-Regression/3-Linear/README.md b/translations/da/2-Regression/3-Linear/README.md index e57f4bde8..a1f6ea393 100644 --- a/translations/da/2-Regression/3-Linear/README.md +++ b/translations/da/2-Regression/3-Linear/README.md @@ -1,97 +1,97 @@ -# Byg en regressionsmodel ved brug af Scikit-learn: regression på fire måder +# Byg en regressionsmodel ved hjælp af Scikit-learn: regression på fire måder -## Begynder Note +## Begynder-note -Lineær regression bruges, når vi vil forudsige en **numerisk værdi** (for eksempel huspris, temperatur eller salg). -Den fungerer ved at finde en lige linje, der bedst repræsenterer forholdet mellem inputfunktioner og output. +Lineær regression bruges, når vi ønsker at forudsige en **numerisk værdi** (for eksempel huspris, temperatur eller salg). +Det fungerer ved at finde en ret linje, der bedst repræsenterer forholdet mellem input-funktioner og output. I denne lektion fokuserer vi på at forstå konceptet, før vi udforsker mere avancerede regressionsteknikker. ![Linear vs polynomial regression infographic](../../../../translated_images/da/linear-polynomial.5523c7cb6576ccab.webp) > Infografik af [Dasani Madipalli](https://twitter.com/dasani_decoded) ## [For-forelæsning quiz](https://ff-quizzes.netlify.app/en/ml/) -> ### [Denne lektion findes også i R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +> ### [Denne lektion findes også på R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### Introduktion -Indtil nu har du undersøgt, hvad regression er med prøve data indsamlet fra græskarprisdatasetet, som vi vil bruge igennem denne lektion. Du har også visualiseret det ved hjælp af Matplotlib. +Indtil nu har du udforsket, hvad regression er med eksempeldata fra græskarforsyningsdatasættet, som vi vil bruge gennem hele lektionen. Du har også visualiseret det ved hjælp af Matplotlib. -Nu er du klar til at dykke dybere ned i regression for ML. Mens visualisering giver dig mulighed for at forstå data, kommer den virkelige styrke ved Maskinlæring fra _at træne modeller_. Modeller trænes på historiske data for automatisk at fange dataafhængigheder, og de giver dig mulighed for at forudsige resultater for nye data, som modellen ikke har set før. +Nu er du klar til at dykke dybere ned i regression for ML. Mens visualisering gør det muligt at forstå data, kommer den reelle kraft i Maskinlæring fra _at træne modeller_. Modeller trænes på historiske data for automatisk at fange datadkan afhængigheder, og de gør det muligt at forudsige resultater for nye data, som modellen ikke har set før. -I denne lektion vil du lære mere om to typer regression: _basis lineær regression_ og _polynomiel regression_, sammen med noget af den matematik, der ligger til grund for disse teknikker. Disse modeller vil gøre det muligt for os at forudsige græskarpriser afhængigt af forskellige inputdata. +I denne lektion vil du lære mere om to typer regression: _grundlæggende lineær regression_ og _polynomiel regression_, sammen med noget af den matematik, der ligger til grund for disse teknikker. Disse modeller vil tillade os at forudsige græskarpriser afhængigt af forskellige inputdata. [![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression") > 🎥 Klik på billedet ovenfor for en kort videooversigt over lineær regression. -> Gennem hele dette pensum antager vi minimal kendskab til matematik og søger at gøre det tilgængeligt for studerende fra andre fagområder, så hold øje med noter, 🧮 opkald, diagrammer og andre læringsværktøjer for at hjælpe forståelsen. +> Gennem hele dette læseplan antager vi minimal matematisk viden og søger at gøre det tilgængeligt for studerende fra andre fagområder, så hold øje med noter, 🧮 fremhævelser, diagrammer og andre læringsværktøjer for at hjælpe med forståelsen. -### Forudsætning +### Forudsætninger -Du bør nu være fortrolig med strukturen af græskardataene, som vi undersøger. Du finder dem forudindlæst og renset i denne lektions _notebook.ipynb_-fil. I filen vises græskarprisen per bushel i en ny data frame. Sørg for, at du kan køre disse notebooks i kerner i Visual Studio Code. +Du bør nu være fortrolig med strukturen på græskardataene, som vi undersøger. Du kan finde dem forudindlæst og forudrenset i denne lektions _notebook.ipynb_-fil. I filen vises græskarprisen pr. bushel i en ny data frame. Sørg for, at du kan køre disse notebooks i kerner i Visual Studio Code. ### Forberedelse -Som en påmindelse, indlæser du disse data for at kunne stille spørgsmål til dem. +Som en påmindelse indlæser du disse data for at kunne stille spørgsmål til dem. -- Hvornår er det bedste tidspunkt at købe græskar? +- Hvornår er det bedste tidspunkt at købe græskar på? - Hvilken pris kan jeg forvente for en kasse miniaturegræskar? -- Skal jeg købe dem i halvbustkurve eller i 1 1/9 bushel kasser? +- Skal jeg købe dem i halvbussch kurve eller i 1 1/9 bushel-kasser? Lad os fortsætte med at grave i disse data. -I den forrige lektion oprettede du en Pandas data frame og fyldte den med en del af det oprindelige datasæt, standardiseret prisen pr. bushel. Ved at gøre det var du dog kun i stand til at samle omkring 400 datapunktoplysninger og kun for efterårsmånederne. +I den forrige lektion oprettede du en Pandas data frame og udfyldte den med en del af det oprindelige datasæt, hvor prisen blev standardiseret efter bushelen. Ved at gøre dette formåede du dog kun at indsamle omkring 400 datapunkter og kun for efterårsmånederne. -Tag et kig på dataene, som vi forudindlæste i denne lektions ledsagende notebook. Dataene er forindlæst, og et initialt spredningsdiagram er vist for månedsdata. Måske kan vi få lidt flere detaljer om dataenes natur ved at rense dem mere. +Se på de data, vi har forudindlæst i denne lektions ledsagende notebook. Dataene er forudindlæst, og et første scatterplot er tegnet for at vise månedernes data. Måske kan vi få lidt flere detaljer om datanaturen ved at rense det mere. ## En lineær regressionslinje -Som du lærte i Lektion 1, er målet med en lineær regressionsøvelse at kunne plotte en linje til at: +Som du lærte i Lektion 1, er målet med en lineær regressionsøvelse at kunne plotte en linje for at: -- **Vis variable relationer**. Vis forholdet mellem variable -- **Foretage forudsigelser**. Lav nøjagtige forudsigelser om, hvor et nyt datapunkt vil falde i forhold til den linje. +- **Vise variable forhold**. Vise forholdet mellem variable +- **Foretage forudsigelser**. Foretage præcise forudsigelser om, hvor et nyt datapunkt ville falde i forhold til linjen. -Det er typisk for **Mindste Kvadraters Regression** at tegne denne type linje. Udtrykket "Mindste Kvadraters" refererer til processen med at minimere den samlede fejl i vores model. For hvert datapunkt måler vi den lodrette afstand (kaldet residual) mellem det faktiske punkt og vores regressionslinje. +Det er typisk for **mindste kvadraters regression** at tegne denne type linje. Udtrykket "mindste kvadraters metode" henviser til processen med at minimere den samlede fejl i vores model. For hvert datapunkt måler vi den lodrette afstand (kaldet residual) mellem det faktiske punkt og vores regressionslinje. Vi kvadrerer disse afstande af to hovedårsager: -1. **Størrelse frem for retning:** Vi vil behandle en fejl på -5 på samme måde som en fejl på +5. Kvadrering gør alle værdier positive. +1. **Størrelse frem for retning:** Vi ønsker at behandle en fejl på -5 på samme måde som en fejl på +5. Kvadrering gør alle værdier positive. -2. **Straffe Udliggere:** Kvadrering giver større vægt til større fejl, hvilket tvinger linjen til at være tættere på punkter, der ligger langt væk. +2. **Straffe for outliers:** Kvadrering giver større vægt til større fejl og tvinger linjen til at holde sig tættere på punkter, der er langt væk. -Vi lægger så alle disse kvadrerede værdier sammen. Vores mål er at finde den specifikke linje, hvor dette endelige sum er mindst (den mindste mulige værdi)—deraf navnet "Mindste Kvadraters". +Derefter lægger vi alle disse kvadrerede værdier sammen. Vores mål er at finde den specifikke linje, hvor denne endelige sum er mindst (den mindste mulige værdi) — deraf navnet "mindste kvadraters metode". > **🧮 Vis mig matematikken** -> -> Denne linje, kaldet _line of best fit_, kan udtrykkes ved [et ligning](https://en.wikipedia.org/wiki/Simple_linear_regression): -> +> +> Denne linje, kaldet _den bedste fit-linje_, kan udtrykkes med [en ligning](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` > -> `X` er den 'forklarende variabel'. `Y` er den 'afhængige variabel'. Linjens hældning er `b` og `a` er y-aksens skæringspunkt, hvilket refererer til værdien af `Y`, når `X = 0`. +> `X` er den 'forklarende variabel'. `Y` er den 'afhængige variabel'. Linjens hældning er `b` og `a` er skæringspunktet med y-aksen, hvilket henviser til værdien af `Y`, når `X = 0`. > ->![beregn hældningen](../../../../translated_images/da/slope.f3c9d5910ddbfcf9.webp) +>![calculate the slope](../../../../translated_images/da/slope.f3c9d5910ddbfcf9.webp) > > Først beregnes hældningen `b`. Infografik af [Jen Looper](https://twitter.com/jenlooper) > -> Med andre ord, og med henvisning til vores græskar data oprindelige spørgsmål: "forudsig prisen på et græskar per bushel pr. måned", ville `X` referere til prisen og `Y` ville referere til salgs måneden. +> Med andre ord, og med henvisning til det oprindelige spørgsmål om vores græskardata: "forudsig prisen på et græskar pr. bushel efter måned", ville `X` referere til prisen og `Y` ville referere til salgs-måneden. > ->![fuldfør ligningen](../../../../translated_images/da/calculation.a209813050a1ddb1.webp) +>![complete the equation](../../../../translated_images/da/calculation.a209813050a1ddb1.webp) > > Beregn værdien af Y. Hvis du betaler omkring $4, må det være april! Infografik af [Jen Looper](https://twitter.com/jenlooper) > -> Den matematik, der beregner linjen, skal demonstrere linjens hældning, som også afhænger af skæringspunktet, eller hvor `Y` befinder sig, når `X = 0`. +> Den matematik, der beregner linjen, skal demonstrere linjens hældning, som også afhænger af skæringspunktet, altså hvor `Y` ligger, når `X = 0`. > -> Du kan iagttage metoden til beregning af disse værdier på webstedet [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Besøg også [denne Mindste Kvadraters regnemaskine](https://www.mathsisfun.com/data/least-squares-calculator.html) for at se, hvordan talværdier påvirker linjen. +> Du kan se metoden til beregning af disse værdier på webstedet [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Besøg også [denne mindste kvadraters lommeregner](https://www.mathsisfun.com/data/least-squares-calculator.html) for at se, hvordan tallene påvirker linjen. ## Korrelation -Endnu et begreb, der skal forstås, er **korrelationskoefficienten** mellem givne X og Y variable. Ved at bruge et spredningsdiagram kan du hurtigt visualisere denne koefficient. En plot med datapunkter, der er spredt i en pæn linje, har høj korrelation, men en plot med datapunkter spredt tilfældigt mellem X og Y har lav korrelation. +Et sidste udtryk at forstå er **korrelationskoefficienten** mellem givne X- og Y-variable. Ved hjælp af et scatterplot kan du hurtigt visualisere denne koefficient. Et plot med datapunkter spredt i en pæn linje har høj korrelation, men et plot med datapunkter spredt overalt mellem X og Y har lav korrelation. -En god lineær regressionsmodel vil være en, der har en høj (tættere på 1 end 0) korrelationskoefficient ved brug af Mindste Kvadraters Regression med en regressionslinje. +En god lineær regressionsmodel vil være en, der har en høj (tættere på 1 end 0) korrelationskoefficient ved anvendelse af mindste kvadraters metode med en regressionslinje. -✅ Kør notebook'en, der ledsager denne lektion, og se på spredningsdiagrammet fra måned til pris. Ser data, der forbinder måned og pris for græskar salg, ud til at have høj eller lav korrelation ifølge din visuelle fortolkning af spredningsdiagrammet? Ændrer det sig, hvis du bruger en mere finmasket måling i stedet for `Month`, fx *dag i året* (dvs. antal dage siden årets start)? +✅ Kør notebook’en, der følger med denne lektion, og se på scatterplottet fra måned til pris. Ser dataene, der forbinder måned til pris for græskar salg, ud til at have høj eller lav korrelation ifølge din visuelle fortolkning af scatterplottet? Ændres det, hvis du bruger mere finmasket mål i stedet for `Month`, f.eks. *dag i året* (dvs. antal dage siden årets begyndelse)? -I koden nedenfor vil vi antage, at vi har renset dataene og opnået en data frame kaldet `new_pumpkins`, der ligner følgende: +I nedenstående kode antager vi, at vi har renset dataene og opnået en data frame kaldet `new_pumpkins`, som ligner følgende: ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price ---|-------|-----------|---------|------|---------|-----------|------------|------- @@ -101,25 +101,25 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri 73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> Koden til at rense dataene findes i [`notebook.ipynb`](notebook.ipynb). Vi har foretaget de samme rensetrin som i den tidligere lektion og har beregnet kolonnen `DayOfYear` ved hjælp af følgende udtryk: +> Koden til at rense dataene findes i [`notebook.ipynb`](notebook.ipynb). Vi har udført de samme rensetrin som i den forrige lektion og har beregnet `DayOfYear`-kolonnen ved hjælp af følgende udtryk: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -Nu hvor du har en forståelse af matematikken bag lineær regression, lad os oprette en regressionsmodel for at se, om vi kan forudsige, hvilken pakke af græskar der vil have de bedste græskarpriser. Nogen, der køber græskar til en feriegræskarmark, vil måske bruge disse oplysninger til at optimere deres køb af græskarpakker til marken. +Nu hvor du har en forståelse for matematikken bag lineær regression, lad os oprette en regressionsmodel for at se, om vi kan forudsige, hvilken pakke med græskar der vil have de bedste græskarpriser. En person, der køber græskar til en halloween-græskarfest, vil måske have disse oplysninger for at kunne optimere deres køb af græskarpakker til festen. -## Leder efter korrelation +## Søger efter korrelation [![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression") > 🎥 Klik på billedet ovenfor for en kort videooversigt over korrelation. -Fra den forrige lektion har du sandsynligvis set, at gennemsnitsprisen for forskellige måneder ser sådan ud: +Fra forrige lektion har du sandsynligvis set, at gennemsnitsprisen for forskellige måneder ser sådan ud: Average price by month -Dette antyder, at der bør være en vis korrelation, og vi kan prøve at træne en lineær regressionsmodel for at forudsige forholdet mellem `Month` og `Price`, eller mellem `DayOfYear` og `Price`. Her er spredningsdiagrammet, der viser det sidste forhold: +Dette antyder, at der burde være en form for korrelation, og vi kan prøve at træne en lineær regressionsmodel til at forudsige forholdet mellem `Month` og `Price` eller mellem `DayOfYear` og `Price`. Her er scatterplottet, der viser sidstnævnte forhold: Scatter plot of Price vs. Day of Year @@ -130,7 +130,7 @@ print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -Det ser ud til, at korrelationen er ret lille, -0,15 for `Month` og -0,17 for `DayOfMonth`, men der kunne være en anden vigtig sammenhæng. Det ser ud til, at der er forskellige klynger af priser, der svarer til forskellige græskartyper. For at bekræfte denne hypotese, lad os plotte hver græskarkategori med en forskellig farve. Ved at sende en `ax` parameter til `scatter` plotfunktionen kan vi plotte alle punkter i det samme diagram: +Det ser ud til, at korrelationen er temmelig lille, -0.15 med `Month` og -0.17 med `DayOfYear`, men der kan være en anden vigtig sammenhæng. Det ser ud til, at der er forskellige klynger af priser, der svarer til forskellige slags græskar. For at bekræfte denne hypotese lader vi hvert græskar-kategori plotte med en forskellig farve. Ved at give en `ax` parameter til `scatter` plotting-funktionen kan vi plotte alle punkter på samme diagram: ```python ax=None @@ -142,7 +142,7 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): Scatter plot of Price vs. Day of Year -Vores undersøgelse antyder, at sort har mere effekt på den samlede pris end den faktiske salgsdato. Vi kan se dette med et søjlediagram: +Vores undersøgelse antyder, at sorten har mere indflydelse på den samlede pris end den faktiske salgsdato. Vi kan se dette med et søjlediagram: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') @@ -150,7 +150,7 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') Bar graph of price vs variety -Lad os for øjeblikket fokusere kun på en græskar sort, 'pie type', og se hvilken effekt datoen har på prisen: +Lad os i øjeblikket fokusere kun på en græskartype, 'pie type', og se, hvilken effekt datoen har på prisen: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] @@ -158,24 +158,24 @@ pie_pumpkins.plot.scatter('DayOfYear','Price') ``` Scatter plot of Price vs. Day of Year -Hvis vi nu beregner korrelationen mellem `Price` og `DayOfYear` ved hjælp af `corr` funktionen, får vi noget i retning af `-0.27` - hvilket betyder, at træning af en forudsigelsesmodel giver mening. +Hvis vi nu beregner korrelationen mellem `Price` og `DayOfYear` ved hjælp af `corr` funktionen, får vi noget i stil med `-0.27` - hvilket betyder, at det giver mening at træne en prædiktiv model. -> Før du træner en lineær regressionsmodel, er det vigtigt at sikre, at vores data er rene. Lineær regression fungerer ikke godt med manglende værdier, derfor giver det mening at fjerne alle tomme celler: +> Før vi træner en lineær regressionsmodel, er det vigtigt at sikre, at vores data er rene. Lineær regression fungerer ikke godt med manglende værdier, så det giver mening at fjerne alle tomme celler: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -En anden tilgang ville være at udfylde disse tomme værdier med gennemsnitsværdier fra den tilsvarende kolonne. +En anden tilgang kunne være at udfylde disse tomme værdier med gennemsnitsværdier fra den tilsvarende kolonne. -## Simple Lineær Regression +## Enkel lineær regression [![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn") > 🎥 Klik på billedet ovenfor for en kort videooversigt over lineær og polynomiel regression. -For at træne vores Lineær Regressionsmodel vil vi bruge **Scikit-learn** biblioteket. +For at træne vores lineære regressionsmodel bruger vi **Scikit-learn**-biblioteket. ```python from sklearn.linear_model import LinearRegression @@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` -Vi starter med at adskille inputværdierne (funktioner) og det forventede output (etiket) i separate numpy-arrays: +Vi starter med at adskille inputværdier (features) og den forventede output (label) i separate numpy-arrays: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Bemærk, at vi var nødt til at udføre `reshape` på inputdataene, for at Linear Regression-pakken kunne forstå det korrekt. Lineær Regression forventer et 2D-array som input, hvor hver række i arrayet svarer til en vektor af inputfunktioner. I vores tilfælde, hvor vi kun har én input - har vi brug for et array med form N×1, hvor N er datasætstørrelsen. +> Bemærk, at vi var nødt til at udføre `reshape` på inputdataene, for at Linear Regression-pakken kunne forstå dem korrekt. Lineær regression forventer et 2D-array som input, hvor hver række i arrayet svarer til en vektor af inputfunktioner. I vores tilfælde, da vi kun har én input, har vi brug for et array med formen N×1, hvor N er datamængdens størrelse. -Dernæst skal vi opdele dataene i trænings- og testdatasæt, så vi kan validere vores model efter træning: +Derefter skal vi opdele dataene i trænings- og testdatasæt, så vi kan validere vores model efter træning: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -Endelig tager træningen af den faktiske Lineær Regression-model kun to kode linjer. Vi definerer `LinearRegression`-objektet og tilpasser det til vores data ved brug af `fit` metoden: +Endelig tager selve træningen af den lineære regressionsmodel kun to kodelinjer. Vi definerer `LinearRegression`-objektet og tilpasser det til vores data ved hjælp af `fit`-metoden: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -`LinearRegression`-objektet efter at være blevet `fit`-tet indeholder alle regressionskoefficienterne, som kan tilgås via `.coef_`-egenskaben. I vores tilfælde er der kun én koefficient, som skulle være omkring `-0.017`. Det betyder, at priserne ser ud til at falde en smule med tiden, men ikke meget, cirka 2 cent per dag. Vi kan også tilgå skæringspunktet med Y-aksen via `lin_reg.intercept_` - det vil være omkring `21` i vores tilfælde, hvilket indikerer prisen i begyndelsen af året. +`LinearRegression`-objektet efter at have `fit`-tet indeholder alle koefficienterne for regressionen, som kan tilgås via `.coef_`-egenskaben. I vores tilfælde er der kun én koefficient, som burde være omkring `-0.017`. Det betyder, at priserne ser ud til at falde lidt med tiden, men ikke for meget, omkring 2 cent om dagen. Vi kan også tilgå skæringspunktet for regressionen med Y-aksen ved hjælp af `lin_reg.intercept_` - det vil være omkring `21` i vores tilfælde, hvilket indikerer prisen i begyndelsen af året. -For at se, hvor præcis vores model er, kan vi forudsige priser på et testdatasæt, og derefter måle, hvor tæt vores forudsigelser er på de forventede værdier. Dette kan gøres ved hjælp af root mean square error (RMSE) metrikken, som er kvadratroden af gennemsnittet af alle kvadrerede forskelle mellem forventet og forudsagt værdi. +For at se hvor præcis vores model er, kan vi forudsige priser på et testdatasæt, og derefter måle hvor tæt vores forudsigelser er på de forventede værdier. Dette kan gøres ved hjælp af root mean square error (RMSE) metrikken, som er kvadratrodstegnet af gennemsnittet af alle kvadrerede forskelle mellem forventet og forudsagt værdi. ```python pred = lin_reg.predict(X_test) @@ -215,38 +215,37 @@ pred = lin_reg.predict(X_test) rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` - -Vores fejl ser ud til at være omkring 2 point, hvilket er ca. 17%. Ikke særlig godt. En anden indikator for modellens kvalitet er **determinationskoefficienten**, som kan opnås sådan her: + +Vores fejl ser ud til at være omkring 2 point, hvilket svarer til ~17%. Ikke så godt. En anden indikator for modellens kvalitet er **determinationskoefficienten**, som kan opnås sådan her: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` - -Hvis værdien er 0, betyder det, at modellen ikke tager inputdata i betragtning og fungerer som den *værste lineære forudsigelse*, som blot er middelværdien af resultatet. Værdien 1 betyder, at vi kan forudsige alle forventede outputs perfekt. I vores tilfælde er koefficienten omkring 0.06, hvilket er ret lavt. +Hvis værdien er 0, betyder det, at modellen ikke tager inputdata i betragtning, og fungerer som den *værste lineære forudsigelse*, som simpelthen er gennemsnitsværdien af resultatet. Værdien 1 betyder, at vi kan forudsige alle forventede output perfekt. I vores tilfælde er koefficienten omkring 0.06, hvilket er ret lavt. -Vi kan også plotte testdataene sammen med regressionslinjen for bedre at se, hvordan regressionen fungerer i vores tilfælde: +Vi kan også plotte testdata sammen med regressionslinjen for bedre at se, hvordan regressionen fungerer i vores tilfælde: ```python plt.scatter(X_test,y_test) plt.plot(X_test,pred) ``` - -Linear regression -## Polynomial Regression +Lineær regression + +## Polynomiel Regression -En anden type lineær regression er polynomial regression. Mens der nogle gange er et lineært forhold mellem variabler – jo større græskar i volumen, jo højere pris – kan disse forhold nogle gange ikke plottes som et plan eller en ret linje. +En anden type af Lineær Regression er Polynomiel Regression. Mens der nogle gange er et lineært forhold mellem variable – jo større græskar i volumen, desto højere pris – kan disse forhold nogle gange ikke vises som et plan eller en lige linje. -✅ Her er [nogle flere eksempler](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data, som kunne bruge polynomial regression. +✅ Her er [flere eksempler](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data, der kunne bruge Polynomiel Regression. -Tag et kig på forholdet mellem Dato og Pris. Ser dette scatterplot ud som om, det nødvendigvis skal analyseres med en lige linje? Kan priserne ikke svinge? I dette tilfælde kan du prøve polynomial regression. +Tag et nyt kig på forholdet mellem Dato og Pris. Virker denne spredningsgraf som om den nødvendigvis skal analyseres med en lige linje? Kan priser ikke svinge? I dette tilfælde kan du prøve polynomiel regression. -✅ Polynomier er matematiske udtryk, som kan bestå af en eller flere variable og koefficienter. +✅ Polynomier er matematiske udtryk, der kan bestå af en eller flere variable og koefficienter. -Polynomial regression laver en buet linje for bedre at passe til ikke-lineære data. I vores tilfælde, hvis vi inkluderer en kvadreret `DayOfYear`-variabel i inputdata, burde vi kunne tilpasse vores data med en parabolsk kurve, som vil have et minimum på et bestemt tidspunkt i løbet af året. +Polynomiel regression skaber en buet linje for bedre at passe ikke-lineære data. I vores tilfælde, hvis vi inkluderer en kvadreret `DayOfYear`-variabel i inputdataene, burde vi kunne tilpasse vores data med en parabolsk kurve, som vil have et minimum på et bestemt tidspunkt i løbet af året. -Scikit-learn inkluderer et nyttigt [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) til at kombinere forskellige trin i databehandling. En **pipeline** er en kæde af **estimators**. I vores tilfælde vil vi oprette en pipeline, der først tilføjer polynomial features til vores model og derefter træner regressionen: +Scikit-learn inkluderer en nyttig [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) til at kombinere forskellige trin i databehandling. En **pipeline** er en kæde af **estimators**. I vores tilfælde vil vi lave en pipeline, som først tilføjer polynomielle funktioner til vores model, og derefter træner regressionen: ```python from sklearn.preprocessing import PolynomialFeatures @@ -256,61 +255,83 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` - -At bruge `PolynomialFeatures(2)` betyder, at vi vil inkludere alle andengrads polynomier fra inputdata. I vores tilfælde betyder det blot `DayOfYear`2, men givet to inputvariable X og Y, vil dette tilføje X2, XY og Y2. Vi kan også bruge polynomier af højere grad, hvis vi ønsker det. -Pipelines kan bruges på samme måde som det originale `LinearRegression` objekt, dvs. vi kan `fit` pipelinen og derefter bruge `predict` til at få forudsigelserne. Her er grafen, der viser testdata og tilpasningskurven: +At bruge `PolynomialFeatures(2)` betyder, at vi vil inkludere alle andet-gradspolynomier fra inputdataene. I vores tilfælde betyder det bare `DayOfYear`2, men givet to inputvariabler X og Y, vil dette tilføje X2, XY og Y2. Vi kan også bruge højere gradspolynomier, hvis vi vil. -Polynomial regression +Pipelines kan bruges på samme måde som det oprindelige `LinearRegression`-objekt, dvs. vi kan `fit` pipelinen, og derefter bruge `predict` til at få forudsigelsesresultaterne: -Ved at bruge polynomial regression kan vi opnå en lidt lavere MSE og højere determinationskoefficient, men ikke signifikant. Vi skal tage andre features i betragtning! +```python +pred = pipeline.predict(X_test) -> Du kan se, at de laveste priser på græskar observeres omkring Halloween. Hvordan kan du forklare det? +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` -🎃 Tillykke, du har netop skabt en model, der kan hjælpe med at forudsige prisen på dessertgræskar. Du kan sandsynligvis gentage samme procedure for alle græskar-typer, men det ville være besværligt. Lad os nu lære, hvordan vi tager græskartype i betragtning i vores model! +For at plotte den glatte tilnærmelseskurve bruger vi `np.linspace` til at skabe et ensartet interval af inputværdier, i stedet for at plotte direkte på de uordnede testdata (som ville producere en zigzag-linje): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` + +Her er grafen, der viser testdata samt tilnærmelseskurven: + +Polynomiel regression + +Ved at bruge Polynomiel Regression kan vi få lidt lavere RMSE og højere determinationskoefficient, men ikke dramatisk. Vi skal tage andre features i betragtning! + +> Du kan se, at de minimale græskarspriser observeres omkring Halloween. Hvordan kan du forklare det? + +🎃 Tillykke, du har netop lavet en model, som kan hjælpe med at forudsige prisen på tærtegræskar. Du kan sikkert gentage samme procedure for alle græskartyper, men det ville være træls. Lad os nu lære, hvordan man tager græskarvarieteter i betragtning i vores model! ## Kategoriske Features -I den ideelle verden ønsker vi at kunne forudsige priser for forskellige græskarsorter med samme model. Dog er kolonnen `Variety` lidt anderledes end kolonner som `Month`, fordi den indeholder ikke-numeriske værdier. Sådanne kolonner kaldes **kategoriske**. +I en ideel verden vil vi kunne forudsige priser for forskellige græskarvarianter ved hjælp af den samme model. `Variety`-kolonnen er dog lidt anderledes end kolonner som `Month`, fordi den indeholder ikke-numeriske værdier. Sådanne kolonner kaldes **kategoriske**. -[![ML for begyndere - Kategoriske Feature Forudsigelser med Lineær Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for begyndere - Kategoriske Feature Forudsigelser med Lineær Regression") +[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") -> 🎥 Klik på billedet ovenfor for en kort videooversigt om brug af kategoriske features. +> 🎥 Klik på billedet ovenfor for en kort videooversigt over brug af kategoriske features. -Her kan du se, hvordan gennemsnitsprisen afhænger af sort: +Her kan du se, hvordan gennemsnitsprisen afhænger af varianten: -Average price by variety +Gennemsnitspris efter variant -For at tage sort i betragtning skal vi først konvertere den til numerisk form eller **kode** den. Der er flere måder at gøre det på: +For at tage variant i betragtning skal vi først konvertere den til numerisk form, eller **kode** den. Der er flere måder, vi kan gøre det på: -* Simpel **numerisk kodning** bygger en tabel over forskellige sorter og erstatter så sortens navn med et indeks i denne tabel. Dette er ikke den bedste idé for lineær regression, fordi lineær regression tager den faktiske numeriske værdi af indekset og lægger det til resultatet vægtet med en koefficient. I vores tilfælde er forholdet mellem indeksnummer og pris klart ikke-lineært, selv hvis vi sørger for, at indeksene er ordnet på en bestemt måde. -* **One-hot encoding** erstatter `Variety`-kolonnen med 4 forskellige kolonner, én for hver sort. Hver kolonne indeholder `1`, hvis den tilsvarende række er af den pågældende sort, og `0` ellers. Det betyder, at der vil være fire koefficienter i den lineære regression, én for hver græskartype, som er ansvarlige for "startpris" (eller rettere "ekstra pris") for netop den sort. +* Simpel **numerisk kodning** vil bygge en tabel over forskellige varianter og derefter erstatte variantnavnet med et indeks i den tabel. Dette er ikke den bedste idé for lineær regression, fordi lineær regression tager den faktiske numeriske værdi af indekset og lægger den til resultatet, multipliceret med en koefficient. I vores tilfælde er forholdet mellem indeksnummer og pris tydeligt ikke-lineært, selv hvis vi sørger for, at indekserne er ordnet på en bestemt måde. +* **One-hot encoding** vil erstatte `Variety`-kolonnen med 4 forskellige kolonner, en for hver variant. Hver kolonne vil indeholde `1`, hvis den tilsvarende række er af den givne variant, og `0` ellers. Det betyder, at der vil være fire koefficienter i lineær regression, en for hver græskarvariant, som er ansvarlig for "startpris" (eller rettere "ekstra pris") for netop den variant. -Koden nedenfor viser, hvordan vi kan one-hot kode en sort: +Koden nedenfor viser, hvordan vi kan one-hot kode en variant: ```python pd.get_dummies(new_pumpkins['Variety']) ``` - - ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE -----|-----------|-----------|--------------------------|---------- -70 | 0 | 0 | 0 | 1 -71 | 0 | 0 | 0 | 1 -... | ... | ... | ... | ... -1738 | 0 | 1 | 0 | 0 -1739 | 0 | 1 | 0 | 0 -1740 | 0 | 1 | 0 | 0 -1741 | 0 | 1 | 0 | 0 + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -For at træne lineær regression med one-hot kodet sort som input behøver vi bare at initialisere `X` og `y` korrekt: +For at træne lineær regression ved brug af one-hot kodet variant som input skal vi blot initialisere `X` og `y` data korrekt: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` - -Resten af koden er den samme som den, vi brugte ovenfor til at træne Lineær Regression. Hvis du prøver det, vil du se, at mean squared error er cirka den samme, men vi får en meget højere determinationskoefficient (~77%). For at få endnu mere præcise forudsigelser kan vi tage flere kategoriske features samt numeriske features som `Month` eller `DayOfYear` i betragtning. For at få en stor samlet feature-array kan vi bruge `join`: + +Resten af koden er den samme som vi brugte tidligere for at træne Lineær Regression. Hvis du prøver det, vil du se, at mean squared error er cirka den samme, men vi får en meget højere determinationskoefficient (~77%). For at få endnu mere præcise forudsigelser kan vi tage flere kategoriske features i betragtning samt numeriske features som `Month` eller `DayOfYear`. For at få en stor samlet feature-array kan vi bruge `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -319,15 +340,15 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] ``` - -Her tager vi også højde for `City` og `Package` type, hvilket giver os MSE 2.84 (10%) og determinationskoefficient 0.94! -## Sæt det hele sammen +Her tager vi også `City` og `Package` type i betragtning, hvilket giver os RMSE 2.84 (10.5%) og determination 0.94! + +## Samlet model -For at lave den bedste model kan vi bruge kombinerede (one-hot kodede kategoriske + numeriske) data fra ovenstående eksempel sammen med polynomial regression. Her er det komplette kodeeksempel for din bekvemmelighed: +For at lave den bedste model kan vi bruge kombinerede (one-hot kodede kategoriske + numeriske) data fra ovenstående eksempel sammen med Polynomiel Regression. Her er den komplette kode for nemheds skyld: ```python -# opret træningsdata +# opsæt træningsdata X = pd.get_dummies(new_pumpkins['Variety']) \ .join(new_pumpkins['Month']) \ .join(pd.get_dummies(new_pumpkins['City'])) \ @@ -344,17 +365,17 @@ pipeline.fit(X_train,y_train) # forudsig resultater for testdata pred = pipeline.predict(X_test) -# beregn MSE og bestemmelse -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# beregn RMSE og bestemmelse +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` - -Dette burde give os den bedste determinationskoefficient på næsten 97%, og MSE=2.23 (~8% fejl i forudsigelse). -| Model | MSE | Determination | +Dette burde give os den bedste determinationskoefficient på næsten 97% og RMSE=2.23 (~8% fejl i forudsigelsen). + +| Model | RMSE | Determination | |-------|-----|---------------| | `DayOfYear` Lineær | 2.77 (17.2%) | 0.07 | | `DayOfYear` Polynomiel | 2.73 (17.0%) | 0.08 | @@ -362,26 +383,26 @@ Dette burde give os den bedste determinationskoefficient på næsten 97%, og MSE | Alle features Lineær | 2.84 (10.5%) | 0.94 | | Alle features Polynomiel | 2.23 (8.25%) | 0.97 | -🏆 Godt gået! Du har lavet fire regressionsmodeller i én lektion og forbedret modelkvaliteten til 97%. I den sidste del om regression vil du lære om logistisk regression til at bestemme kategorier. +🏆 Godt klaret! Du har skabt fire regressionsmodeller på én lektion og forbedret modellens kvalitet til 97%. I det afsluttende afsnit om Regression vil du lære om Logistisk Regression til kategoribestemmelse. --- ## 🚀Udfordring Test flere forskellige variable i denne notesbog for at se, hvordan korrelation svarer til modelnøjagtighed. -## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) -## Review & Selvlæring +## Opsummering og Selvstudium -I denne lektion lærte vi om lineær regression. Der findes andre vigtige typer regression. Læs om Stepwise, Ridge, Lasso og Elasticnet teknikker. Et godt kursus at studere for at lære mere er [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +I denne lektion lærte vi om Lineær Regression. Der findes andre vigtige typer af Regression. Læs om Stepwise, Ridge, Lasso og Elasticnet teknikker. Et godt kursus at studere for at lære mere er [Stanford Statistical Learning kurset](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) -## Opgave +## Opgave -[Byg en model](assignment.md) +[Byg en Model](assignment.md) --- -**Ansvarsfraskrivelse**: -Dette dokument er oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales en professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. +**Ansvarsfraskrivelse**: +Dette dokument er oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi stræber efter nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/3-Linear/solution/notebook.ipynb b/translations/da/2-Regression/3-Linear/solution/notebook.ipynb index 7cda636c2..1be0bbf92 100644 --- a/translations/da/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/da/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Lineær og Polynomisk Regression for Græskarpriser - Lektion 3\n", + "## Lineær og polynomiel regression for græskarpriser - Lektion 3\n", "\n", - "Indlæs de nødvendige biblioteker og datasættet. Konverter dataene til en dataframe, der indeholder et udsnit af dataene:\n", + "Indlæs de nødvendige biblioteker og datasæt. Konverter dataene til en dataframe, der indeholder et delmængde af dataene:\n", "\n", - "- Vælg kun græskar, der er prissat pr. tønde\n", + "- Få kun græskar prissat efter bushels\n", "- Konverter datoen til en måned\n", - "- Beregn prisen som gennemsnittet af højeste og laveste priser\n", - "- Konverter prisen, så den afspejler prissætningen pr. tøndemængde\n" + "- Beregn prisen som et gennemsnit af høj og lav pris\n", + "- Konverter prisen, så den afspejler prissætningen efter bushel-mængde\n" ] }, { @@ -377,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Et spredningsdiagram minder os om, at vi kun har månedsdata fra august til december. Vi har sandsynligvis brug for flere data for at kunne drage konklusioner på en lineær måde.\n" + "Et scatterplot minder os om, at vi kun har månedsdata fra august til december. Vi har sandsynligvis brug for mere data for at kunne drage konklusioner på en lineær måde.\n" ] }, { @@ -447,7 +447,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Lad os se, om der er sammenhæng:\n" + ] }, { "cell_type": "code", @@ -472,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Det ser ud til, at korrelationen er ret lille, men der er en anden vigtigere sammenhæng - fordi prisniveauerne i plottet ovenfor ser ud til at have flere tydelige klynger. Lad os lave et plot, der viser forskellige græskarsorter:\n" + "Det ser ud til, at korrelationen er ret lille, men der er en anden, mere vigtig sammenhæng - fordi prisniveauerne i ovenstående plot synes at have flere forskellige klynger. Lad os lave et plot, der viser forskellige græskarvarianter:\n" ] }, { @@ -535,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "For nu, lad os kun koncentrere os om en type - **tærte type**.\n" + ] }, { "cell_type": "code", @@ -582,7 +586,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Lineær regression\n", + "### Lineær Regression\n", "\n", "Vi vil bruge Scikit Learn til at træne en lineær regressionsmodel:\n" ] @@ -662,7 +666,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Hældningen af linjen kan bestemmes ud fra lineære regressionskoefficienter:\n" + "Hældningen af linjen kan bestemmes ud fra koefficienterne i den lineære regression:\n" ] }, { @@ -718,11 +722,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Polynomiel Regression\n", + "### Polynomiel regression\n", "\n", - "Nogle gange er forholdet mellem funktioner og resultater iboende ikke-lineært. For eksempel kan græskarpriser være høje om vinteren (måneder=1,2), derefter falde om sommeren (måneder=5-7) og derefter stige igen. Lineær regression er ikke i stand til at fange dette forhold præcist.\n", + "Nogle gange er forholdet mellem features og resultaterne iboende ikke-lineært. For eksempel kan prisen på græskar være høj om vinteren (måneder=1,2), derefter falde hen over sommeren (måneder=5-7) og så stige igen. Lineær regression kan ikke finde dette forhold præcist.\n", "\n", - "I dette tilfælde kan vi overveje at tilføje ekstra funktioner. En simpel måde er at bruge polynomier fra inputfunktionerne, hvilket vil resultere i **polynomiel regression**. I Scikit Learn kan vi automatisk forudberegne polynomielle funktioner ved hjælp af pipelines:\n" + "I dette tilfælde kan vi overveje at tilføje ekstra features. En simpel måde er at bruge polynomier fra input features, hvilket vil resultere i **polynomiel regression**. I Scikit Learn kan vi automatisk forhåndsberegne polynomielle features ved hjælp af pipelines:\n" ] }, { @@ -777,22 +781,25 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Kodning af sorter\n", + "### Encoding varianter\n", "\n", - "I en ideel verden ønsker vi at kunne forudsige priser for forskellige græskarsorter ved hjælp af den samme model. For at tage sorten i betragtning skal vi først konvertere den til numerisk form, eller **kode**. Der er flere måder, vi kan gøre det på:\n", + "I den ideelle verden vil vi kunne forudsige priser for forskellige græskarvarianter ved hjælp af den samme model. For at tage højde for variant skal vi først konvertere den til numerisk form, eller **encode**. Der er flere måder, vi kan gøre det på:\n", "\n", - "* Simpel numerisk kodning, der opretter en tabel over forskellige sorter og derefter erstatter sortsnavnet med et indeks i den tabel. Dette er ikke den bedste idé til lineær regression, fordi lineær regression tager den numeriske værdi af indekset i betragtning, og den numeriske værdi sandsynligvis ikke korrelerer numerisk med prisen.\n", - "* One-hot kodning, som erstatter `Variety`-kolonnen med 4 forskellige kolonner, én for hver sort, der indeholder 1, hvis den tilsvarende række er af den givne sort, og 0 ellers.\n", + "* Simple numeriske kodninger, som opbygger en tabel over forskellige varianter, og derefter erstatter variantnavnet med en indeks i denne tabel. Dette er ikke den bedste idé for lineær regression, fordi lineær regression tager den numeriske værdi af indekset i betragtning, og denne numeriske værdi korrelerer sandsynligvis ikke numerisk med prisen.\n", + "* One-hot encoding, som erstatter `Variety`-kolonnen med 4 forskellige kolonner, en for hver variant, der indeholder 1, hvis den tilsvarende række er af den givne variant, og 0 ellers.\n", "\n", - "Koden nedenfor viser, hvordan vi kan one-hot kode en sort:\n" + "Koden nedenfor viser, hvordan vi kan one-hot encode en variant:\n" ] }, { @@ -940,9 +947,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Lineær regression på sort\n", + "### Lineær regression på sorten\n", "\n", - "Vi vil nu bruge den samme kode som ovenfor, men i stedet for `DayOfYear` vil vi bruge vores one-hot-encoded sort som input:\n" + "Vi vil nu bruge den samme kode som ovenfor, men i stedet for `DayOfYear` vil vi bruge vores one-hot-encodede sort som input:\n" ] }, { @@ -1021,9 +1028,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Polynomiel Regression\n", + "### Polynomiel regression\n", "\n", - "Polynomiel regression kan også bruges med kategoriske funktioner, der er one-hot-enkodede. Koden til at træne polynomiel regression vil grundlæggende være den samme, som vi har set ovenfor.\n" + "Polynomiel regression kan også bruges med kategoriske funktioner, der er one-hot-enkodede. Koden til at træne polynomiel regression ville i det væsentlige være den samme, som vi har set ovenfor.\n" ] }, { @@ -1070,7 +1077,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Ansvarsfraskrivelse**: \nDette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse.\n" + "---\n\n\n**Ansvarsfraskrivelse**: \nDette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritiske oplysninger anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.\n\n" ] } ], @@ -1100,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-04T06:19:26+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "da" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/translations/fi/.co-op-translator.json b/translations/fi/.co-op-translator.json index dd7336e7f..50d255984 100644 --- a/translations/fi/.co-op-translator.json +++ b/translations/fi/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "fi" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T00:28:39+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T18:56:41+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "fi" }, @@ -90,8 +90,8 @@ "language_code": "fi" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T20:09:14+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T18:56:14+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "fi" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "fi" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T18:52:30+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "fi" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-04T23:33:10+00:00", diff --git a/translations/fi/1-Introduction/4-techniques-of-ML/README.md b/translations/fi/1-Introduction/4-techniques-of-ML/README.md index 7ac9b61f1..ba3328233 100644 --- a/translations/fi/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/fi/1-Introduction/4-techniques-of-ML/README.md @@ -1,117 +1,117 @@ -# Koneoppimisen tekniikat +# Koneoppimisen menetelmät -Koneoppimismallien ja niiden käyttämän datan rakentaminen, käyttäminen ja ylläpito eroaa merkittävästi monista muista kehitysprosesseista. Tässä oppitunnissa selvitämme prosessin ja hahmotamme tärkeimmät tekniikat, jotka sinun tulee hallita. Opit: +Koneoppimismallien rakentaminen, käyttäminen ja ylläpito sekä niiden käyttämän datan hallinta ovat hyvin erilaisia prosesseja moniin muihin kehitystyön työnkulkuihin verrattuna. Tässä oppitunnissa avaamme tätä prosessia ja esittelemme tärkeimmät tekniikat, jotka sinun tarvitsee tietää. Sinä: -- Ymmärtämään koneoppimisen taustalla olevat prosessit yleisellä tasolla. -- Tutustumaan peruskäsitteisiin, kuten "mallit", "ennusteet" ja "opetusdata". +- Ymmärrät koneoppimisen prosessien perusteet yleisellä tasolla. +- Tutustut peruskäsitteisiin, kuten 'mallit', 'ennusteet' ja 'koulutusdata'. -## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) +## [Ennakkotehtäväquiz](https://ff-quizzes.netlify.app/en/ml/) [![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning") -> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi, jossa käydään läpi tämän oppitunnin sisältöä. +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen videon, joka käy tämän oppitunnin läpi. ## Johdanto -Koneoppimisen (ML) prosessien luominen koostuu useista vaiheista: +Yleisellä tasolla koneoppimisprosessin rakentaminen koostuu useista vaiheista: -1. **Määrittele kysymys**. Useimmat ML-prosessit alkavat kysymyksestä, johon ei voida vastata yksinkertaisella ehdollisella ohjelmalla tai sääntöpohjaisella moottorilla. Nämä kysymykset liittyvät usein ennusteisiin, jotka perustuvat datakokoelmaan. -2. **Kerää ja valmistele data**. Kysymykseen vastaaminen vaatii dataa. Datan laatu ja joskus myös määrä määrittävät, kuinka hyvin voit vastata alkuperäiseen kysymykseesi. Datan visualisointi on tärkeä osa tätä vaihetta. Tämä vaihe sisältää myös datan jakamisen opetus- ja testiryhmiin mallin rakentamista varten. -3. **Valitse opetusmenetelmä**. Kysymyksesi ja datasi luonteen perusteella sinun tulee valita, miten haluat opettaa mallia, jotta se parhaiten heijastaisi dataasi ja tekisi tarkkoja ennusteita. Tämä ML-prosessin osa vaatii erityistä asiantuntemusta ja usein huomattavan määrän kokeilua. -4. **Opeta malli**. Käyttämällä opetusdataa käytät erilaisia algoritmeja opettaaksesi mallin tunnistamaan datan kuvioita. Malli voi hyödyntää sisäisiä painotuksia, joita voidaan säätää korostamaan tiettyjä datan osia paremman mallin rakentamiseksi. -5. **Arvioi malli**. Käytä aiemmin näkemätöntä dataa (testidatasi) arvioidaksesi, kuinka hyvin malli toimii. -6. **Parametrien säätö**. Mallin suorituskyvyn perusteella voit tehdä prosessin uudelleen käyttämällä erilaisia parametreja tai muuttujia, jotka ohjaavat mallin opetusalgoritmien toimintaa. +1. **Päättää kysymys**. Useimmat ML-prosessit alkavat kysymyksellä, johon ei voida vastata yksinkertaisella ehtolausepohjaisella ohjelmalla tai sääntöpohjaisella moottorilla. Nämä kysymykset liittyvät usein ennusteisiin, jotka perustuvat tietoaineistoon. +2. **Kerää ja valmistele data**. Vastataksesi kysymykseen tarvitset dataa. Datan laatu ja joskus myös määrä määrää, kuinka hyvin pystyt vastaamaan alkuperäiseen kysymykseesi. Datan visualisointi on tärkeä osa tätä vaihetta. Tähän vaiheeseen kuuluu myös datan jakaminen koulutus- ja testiryhmiin mallin rakentamista varten. +3. **Valitse koulutusmenetelmä**. Kysymyksesi ja datasi luonteen mukaan sinun täytyy valita, miten koulutat mallin parhaiten heijastamaan dataasi ja tekemään tarkkoja ennusteita. Tämä osa ML-prosessia vaatii erityisosaamista ja usein runsaasti kokeiluja. +4. **Kouluta malli**. Käyttämällä koulutusdataa sovellat erilaisia algoritmeja mallin opettamiseen, jotta malli oppii tunnistamaan datan kaavat. Malli voi hyödyntää sisäisiä painoja, joita säädetään, jotta tietyt datan osat saavat suuremman painoarvon, mikä auttaa rakentamaan parempaa mallia. +5. **Arvioi malli**. Käytät koskaan aiemmin näkemätöntä dataa (testidataa) arvioidaksesi mallisi suorituskykyä. +6. **Parametrien viritys**. Mallin suorituskyvyn perusteella voit toistaa prosessin erilaisilla parametreilla eli muuttujilla, jotka ohjaavat käytettyjen algoritmien toimintaa mallin kouluttamisessa. 7. **Ennusta**. Käytä uusia syötteitä testataksesi mallisi tarkkuutta. -## Mitä kysymystä kysyä +## Mitä kysymystä esittää -Tietokoneet ovat erityisen taitavia löytämään piilotettuja kuvioita datasta. Tämä ominaisuus on erittäin hyödyllinen tutkijoille, joilla on kysymyksiä tietystä aihealueesta, joihin ei voida helposti vastata luomalla ehdollisuuspohjainen sääntömoottori. Esimerkiksi vakuutusmatemaattisessa tehtävässä data-analyytikko voisi rakentaa käsintehtyjä sääntöjä tupakoitsijoiden ja ei-tupakoitsijoiden kuolleisuudesta. +Tietokoneet osaavat erityisen hyvin löytää piilotettuja kaavoja datasta. Tämä on erittäin hyödyllistä tutkijoille, joilla on tiettyyn aihealueeseen liittyviä kysymyksiä, joihin ei voida helposti vastata ehdollisesti toimivan sääntöpohjaisen moottorin avulla. Esimerkiksi vakuutustyössä data-analyytikko voisi rakentaa käsin laadittuja sääntöjä tupakoitsijoiden ja ei-tupakoitsijoiden kuolleisuudesta. -Kun mukaan tuodaan monia muita muuttujia, ML-malli voi kuitenkin osoittautua tehokkaammaksi ennustamaan tulevia kuolleisuuslukuja aiemman terveystiedon perusteella. Iloisempi esimerkki voisi olla sääennusteiden tekeminen huhtikuulle tietyssä paikassa datan perusteella, joka sisältää leveys- ja pituusasteet, ilmastonmuutoksen, etäisyyden merestä, suihkuvirtauksen kuviot ja paljon muuta. +Kun monia muuttujia tuodaan mukaan, koneoppimismalli voi osoittautua tehokkaammaksi ennustamaan tulevia kuolleisuuslukuja aiemman terveystiedon perusteella. Iloisempi esimerkki voisi olla säätiedotusten tekeminen huhtikuulle tietyssä paikassa käyttäen dataa, joka sisältää leveys- ja pituusasteet, ilmastonmuutoksen vaikutukset, meren läheisyyden, suihkuvirtausten kuviot ja muuta. -✅ Tämä [esitysmateriaali](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) säämalleista tarjoaa historiallisen näkökulman ML:n käytöstä sääanalyysissä. +✅ Tämä [esitys](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) säämallien käytöstä tarjoaa historiallisen näkökulman koneoppimisen hyödyntämiseen sääanalyysissä. -## Ennen mallin rakentamista +## Ennen mallin rakentamista tehtävät tehtävät -Ennen kuin aloitat mallin rakentamisen, sinun tulee suorittaa useita tehtäviä. Testataksesi kysymystäsi ja muodostaaksesi hypoteesin mallin ennusteiden perusteella, sinun tulee tunnistaa ja määrittää useita elementtejä. +Ennen mallin rakentamista on suoritettava useita tehtäviä. Kysymyksen testaamiseksi ja hypoteesin muodostamiseksi mallin ennusteiden perusteella sinun täytyy tunnistaa ja määrittää useita elementtejä. ### Data -Jotta voit vastata kysymykseesi minkäänlaisella varmuudella, tarvitset riittävän määrän oikeanlaista dataa. Tässä vaiheessa sinun tulee tehdä kaksi asiaa: +Vastataksesi kysymykseesi millään varmuudella tarvitset riittävästi oikeanlaista dataa. Tässä vaiheessa sinun tulee tehdä kaksi asiaa: -- **Kerää data**. Muista aiemman oppitunnin oikeudenmukaisuudesta data-analyysissä, kerää datasi huolellisesti. Ole tietoinen datan lähteistä, mahdollisista sisäisistä ennakkoluuloista ja dokumentoi sen alkuperä. -- **Valmistele data**. Datavalmisteluprosessissa on useita vaiheita. Saatat joutua yhdistämään dataa ja normalisoimaan sen, jos se tulee eri lähteistä. Voit parantaa datan laatua ja määrää eri menetelmillä, kuten muuntamalla merkkijonoja numeroiksi (kuten teemme [Klusteroinnissa](../../5-Clustering/1-Visualize/README.md)). Voit myös luoda uutta dataa alkuperäisen datan perusteella (kuten teemme [Luokittelussa](../../4-Classification/1-Introduction/README.md)). Voit puhdistaa ja muokata dataa (kuten teemme ennen [Web-sovellus](../../3-Web-App/README.md) -oppituntia). Lopuksi saatat joutua myös satunnaistamaan ja sekoittamaan dataa riippuen opetusmenetelmistäsi. +- **Kerää dataa**. Muista edellisessä oppitunnissa käsitelty oikeudenmukaisuus datan analyysissa, ja kerää data huolellisesti. Ole tietoinen datan lähteistä, mahdollisista vääristymistä ja dokumentoi sen alkuperä. +- **Valmistele data**. Datan valmistelussa on useita vaiheita. Saatat joutua yhdistämään dataa ja normalisoimaan sitä, jos se tulee eri lähteistä. Voit parantaa datan laatua ja määrää muun muassa muuntamalla merkkijonot numeroiksi (kuten teemme [Klusteroinnissa](../../5-Clustering/1-Visualize/README.md)). Voit myös generoida uutta dataa alkuperäisen pohjalta (kuten teemme [Luokittelussa](../../4-Classification/1-Introduction/README.md)). Voit siivota ja muokata dataa (kuten teemme ennen [Verkkosovellus](../../3-Web-App/README.md) -oppituntia). Lopuksi voit myös joutua satunnaistamaan ja sekoittamaan dataa koulutusmenetelmistä riippuen. -✅ Kun olet kerännyt ja käsitellyt datasi, ota hetki aikaa tarkistaaksesi, voiko sen muoto auttaa sinua vastaamaan aiottuun kysymykseesi. Saattaa olla, että data ei suoriudu hyvin annetussa tehtävässä, kuten huomaamme [Klusterointi](../../5-Clustering/1-Visualize/README.md) -oppitunneilla! +✅ Kun olet kerännyt ja käsitellyt datasi, tarkista, mahdollistaako sen muoto vastaamaan tarkoitettua kysymystä. Käytettävän datan sopimattomuus voi aiheuttaa heikkoa suorituskykyä, kuten huomaamme [Klusterointivaiheessa](../../5-Clustering/1-Visualize/README.md)! -### Ominaisuudet ja kohde +### Ominaisuudet ja tavoite -[Ominaisuus](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) on mitattavissa oleva datan ominaisuus. Monissa datasetissä se ilmaistaan sarakeotsikkona, kuten "päivämäärä", "koko" tai "väri". Ominaisuusmuuttuja, jota yleensä edustaa `X` koodissa, edustaa syötemuuttujaa, jota käytetään mallin opettamiseen. +[Ominaisuus](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) on mitattavissa oleva datan ominaisuus. Usein se esiintyy sarakeotsikkona, kuten 'päivämäärä', 'koko' tai 'väri'. Ominaisuusmuuttuja, yleensä koodissa merkitty `X`:llä, edustaa sisääntulomuuttujaa, jota käytetään mallin kouluttamiseen. -Kohde on asia, jota yrität ennustaa. Kohde, jota yleensä edustaa `y` koodissa, edustaa vastausta kysymykseen, jonka yrität esittää datallesi: joulukuussa, minkä **väriset** kurpitsat ovat halvimpia? San Franciscossa, mitkä naapurustot tarjoavat parhaat kiinteistöjen **hinnat**? Joskus kohdetta kutsutaan myös nimikeattribuutiksi. +Tavoite on se asia, jota yrität ennustaa. Tavoite, yleensä koodissa `y`:llä, on vastaus kysymykseen, jonka esität datallesi: joulukuussa, minkä **värisiä** kurpitsoja on halvimpia? San Franciscossa, mitkä kaupunginosat tarjoavat parhaat kiinteistöjen **hinnat**? Tavoitetta kutsutaan joskus myös nimilabeliksi (label attribute). ### Ominaisuusmuuttujan valinta -🎓 **Ominaisuusvalinta ja ominaisuuksien uuttaminen** Miten tiedät, minkä muuttujan valitset mallia rakentaessasi? Käyt läpi todennäköisesti prosessin, jossa valitset oikeat muuttujat parhaiten toimivaan malliin joko ominaisuusvalinnan tai ominaisuuksien uuttamisen avulla. Ne eivät kuitenkaan ole sama asia: "Ominaisuuksien uuttaminen luo uusia ominaisuuksia alkuperäisten ominaisuuksien funktioista, kun taas ominaisuusvalinta palauttaa alkuperäisten ominaisuuksien alijoukon." ([lähde](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Ominaisuuksien valinta ja ominaisuuksien erottelu** Miten tiedät, minkä muuttujan valitset mallia rakentaessasi? Todennäköisesti käyt läpi ominaisuuksien valinta- tai erotteluprosessin valitaksesi sopivimmat muuttujat parhaan mallin rakentamiseksi. Ne eivät kuitenkaan ole sama asia: "Ominaisuuksien erottelu luo uusia ominaisuuksia alkuperäisten ominaisuuksien funktioista, kun taas ominaisuuksien valinta palauttaa osajoukon ominaisuuksista." ([lähde](https://wikipedia.org/wiki/Feature_selection)) ### Visualisoi datasi -Data-analyytikon työkalupakin tärkeä osa on kyky visualisoida dataa useiden erinomaisen kirjastojen, kuten Seabornin tai MatPlotLibin, avulla. Datan visuaalinen esittäminen voi auttaa sinua paljastamaan piilotettuja korrelaatioita, joita voit hyödyntää. Visualisoinnit voivat myös auttaa sinua havaitsemaan ennakkoluuloja tai epätasapainoista dataa (kuten huomaamme [Luokittelu](../../4-Classification/2-Classifiers-1/README.md) -oppitunneilla). +Tärkeä osa data-analyytikon työkalupakkia on kyky visualisoida dataa erilaisten erinomaisen hyvien kirjastojen, kuten Seabornin tai MatPlotLibin, avulla. Datan visuaalinen esitys voi antaa mahdollisuuden paljastaa piileviä riippuvuuksia, joita voit hyödyntää. Visualisointi voi myös auttaa sinua havaitsemaan harhaa tai epätasapainoista dataa (kuten huomaamme [Luokittelussa](../../4-Classification/2-Classifiers-1/README.md)). -### Jaa datasetti +### Jaa datasi osiin -Ennen opettamista sinun tulee jakaa datasetti kahteen tai useampaan erikokoiseen osaan, jotka edustavat dataa hyvin. +Ennen mallin kouluttamista sinun on jaettava datasi kahteen tai useampaan epätasaiseen osaan, jotka kuitenkin edustavat dataa hyvin. -- **Opetus**. Tämä osa datasetistä sovitetaan malliin sen opettamiseksi. Tämä osuus muodostaa suurimman osan alkuperäisestä datasetistä. -- **Testaus**. Testidatasetti on itsenäinen dataryhmä, joka usein kerätään alkuperäisestä datasta ja jota käytetään rakennetun mallin suorituskyvyn vahvistamiseen. -- **Validointi**. Validointijoukko on pienempi itsenäinen esimerkkiryhmä, jota käytetään mallin hyperparametrien tai rakenteen säätämiseen mallin parantamiseksi. Datasi koosta ja kysymyksestäsi riippuen et välttämättä tarvitse tätä kolmatta joukkoa (kuten huomaamme [Aikasarjojen ennustaminen](../../7-TimeSeries/1-Introduction/README.md) -oppitunneilla). +- **Koulutus**. Tämä osa data-aineistosta sovitetaan malliin sen kouluttamiseksi. Tämä joukko muodostaa suurimman osan alkuperäisestä datasta. +- **Testaus**. Testidatasetti on itsenäinen dataryhmä, usein kerätty alkuperäisestä datasta, jota käytetään mallin suorituskyvyn varmistamiseen. +- **Validointi**. Validointijoukko on pienempi riippumaton esimerkkiryhmä, jota käytetään mallin hyperparametrien eli arkkitehtuurin hienosäätöön parantamaan mallin suorituskykyä. Datasi koosta ja kysymystesi luonteesta riippuen tätä kolmatta joukkoa ei välttämättä tarvita (kuten mainitsemme [Aikasarjojen ennusteissa](../../7-TimeSeries/1-Introduction/README.md)). ## Mallin rakentaminen -Käyttämällä opetusdataasi tavoitteesi on rakentaa malli, eli tilastollinen esitys datastasi, käyttämällä erilaisia algoritmeja sen **opettamiseksi**. Mallin opettaminen altistaa sen datalle ja antaa sen tehdä oletuksia havaitsemistaan kuvioista, validoida ja hyväksyä tai hylätä ne. +Käyttäen koulutusdataa tavoitteesi on rakentaa malli tai tilastollinen esitys datastasi eri algoritmeja hyödyntäen mallin **kouluttamiseksi**. Mallin kouluttaminen altistaa sen datalle ja antaa sille mahdollisuuden tehdä oletuksia havaitsemistaan kuviosta, joita se validoi ja joko hyväksyy tai hylkää. -### Valitse opetusmenetelmä +### Valitse koulutusmenetelmä -Kysymyksesi ja datasi luonteen perusteella valitset menetelmän sen opettamiseksi. Käymällä läpi [Scikit-learnin dokumentaatiota](https://scikit-learn.org/stable/user_guide.html) - jota käytämme tässä kurssissa - voit tutkia monia tapoja opettaa mallia. Kokemuksesi perusteella saatat joutua kokeilemaan useita eri menetelmiä parhaan mallin rakentamiseksi. Todennäköisesti käyt läpi prosessin, jossa data-analyytikot arvioivat mallin suorituskykyä syöttämällä sille aiemmin näkemätöntä dataa, tarkistamalla tarkkuutta, ennakkoluuloja ja muita laatua heikentäviä ongelmia ja valitsemalla tehtävään sopivimman opetusmenetelmän. +Kysymyksesi ja datasi luonteen mukaan valitset koulutusmenetelmän. Käymällä läpi [Scikit-learnin dokumentaatiota](https://scikit-learn.org/stable/user_guide.html) — jota käytämme tässä kurssissa — voit tutkia monia tapoja kouluttaa mallia. Kokemuksestasi riippuen sinun täytyy ehkä kokeilla useita eri menetelmiä parhaan mallin rakentamiseksi. Todennäköisesti käyt läpi prosessin, jossa data-analyytikot arvioivat mallin suorituskykyä syöttämällä sinne näkemätöntä dataa, tarkistamalla tarkkuuden, harhan ja muut suorituskykyä heikentävät tekijät sekä valitsevat tehtävään sopivimman koulutusmenetelmän. -### Opeta malli +### Kouluta malli -Kun sinulla on opetusdata, olet valmis "sovittamaan" sen mallin luomiseksi. Huomaat, että monissa ML-kirjastoissa löytyy koodi "model.fit" - tässä vaiheessa syötät ominaisuusmuuttujasi taulukkomuodossa (yleensä "X") ja kohdemuuttujasi (yleensä "y"). +Koulutusdata allasi olet valmis 'sovittamaan' eli fittaamaan sen malliin. Useissa koneoppimiskirjastoissa näet koodin 'model.fit' — tässä vaiheessa syötät ominaisuusmuuttujan arvovektorina (yleensä 'X') ja tavoitemuuttujan (yleensä 'y'). ### Arvioi malli -Kun opetusprosessi on valmis (suuren mallin opettaminen voi vaatia useita iteraatioita tai "epookkeja"), voit arvioida mallin laatua käyttämällä testidataa sen suorituskyvyn mittaamiseen. Tämä data on osa alkuperäisestä datasta, jota malli ei ole aiemmin analysoinut. Voit tulostaa taulukon mallin laadun mittareista. +Kun koulutus on valmis (suuren mallin koulutus voi vaatia monta iterointia eli 'aikakautta'), voit arvioida mallin laatua käyttämällä testidataa sen suorituskyvyn mittaamiseen. Tämä data on alkuperäisen joukon osa, jota malli ei ole aiemmin analysoinut. Voit tulostaa taulukon mallin laadun mittareista. -🎓 **Mallin sovittaminen** +🎓 **Mallin sovitus** -Koneoppimisen kontekstissa mallin sovittaminen viittaa mallin taustalla olevan funktion tarkkuuteen, kun se yrittää analysoida dataa, jota se ei tunne. +Koneoppimisen yhteydessä mallin sovitus tarkoittaa mallin toiminnan tarkkuutta analysoida dataa, jota se ei ole aiemmin nähnyt. -🎓 **Alioppiminen** ja **ylioppiminen** ovat yleisiä ongelmia, jotka heikentävät mallin laatua, kun malli sovittuu joko liian huonosti tai liian hyvin. Tämä aiheuttaa sen, että malli tekee ennusteita joko liian tiukasti tai liian löyhästi suhteessa opetusdataansa. Ylioppinut malli ennustaa opetusdataa liian hyvin, koska se on oppinut datan yksityiskohdat ja kohinan liian hyvin. Alioppinut malli ei ole tarkka, koska se ei pysty analysoimaan tarkasti opetusdataansa eikä dataa, jota se ei ole vielä "nähnyt". +🎓 **Ali- ja ylisovitus** ovat yleisiä ongelmia, jotka heikentävät mallin laatua, kun malli sovitetaan joko liian löyhästi tai liian tarkasti. Tämä saa mallin tekemään ennusteita, jotka muistuttavat liikaa tai liian vähän koulutusdataa. Ylisovittanut malli ennustaa koulutusdataa liian tarkasti, koska se on oppinut datan yksityiskohdat ja kohinan liiankin hyvin. Alisovittanut malli ei ole tarkka, sillä se ei pysty analysoimaan oikein koulutusdataa eikä myöskään aiemmin näkemätöntä dataa. -![ylioppiminen malli](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![overfitting model](../../../../translated_images/fi/overfitting.1c132d92bfd93cb6.webp) > Infografiikka: [Jen Looper](https://twitter.com/jenlooper) -## Parametrien säätö +## Parametrien viritys -Kun alkuperäinen opetus on valmis, tarkkaile mallin laatua ja harkitse sen parantamista säätämällä sen "hyperparametreja". Lue lisää prosessista [dokumentaatiosta](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +Kun alkuperäinen koulutusprosessi on valmis, tarkkaile mallin laatua ja harkitse sen parantamista säätämällä 'hyperparametreja'. Lue lisää prosessista [dokumentaatiosta](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). -## Ennustaminen +## Ennustus -Tämä on hetki, jolloin voit käyttää täysin uutta dataa testataksesi mallisi tarkkuutta. Sovelletussa ML-ympäristössä, jossa rakennat verkkosovelluksia mallin käyttöön tuotannossa, tämä prosessi voi sisältää käyttäjän syötteen keräämisen (esimerkiksi painikkeen painallus) muuttujan asettamiseksi ja sen lähettämiseksi mallille inferenssiä tai arviointia varten. +Tässä vaiheessa voit käyttää täysin uutta dataa testataksesi mallisi tarkkuutta. Käytännön koneoppimisen ympäristössä, jossa rakennat verkkosovelluksia mallin käyttämiseksi tuotannossa, tähän voi kuulua käyttäjän syötteen (esimerkiksi napin painallus) vastaanottaminen, sen muuttamiseen muuttujaksi ja mallin käyttämiseen päättelyyn eli arviointiin. -Näissä oppitunneissa opit käyttämään näitä vaiheita datan valmisteluun, mallin rakentamiseen, testaamiseen, arviointiin ja ennustamiseen - kaikki data-analyytikon eleet ja enemmän, kun etenet matkallasi kohti "full stack" ML-insinööriksi. +Näissä oppitunneissa opit käyttämään näitä vaiheita datan valmisteluun, mallin rakentamiseen, testaamiseen, arviointiin ja ennustamiseen — kaikki data-analyytikon keskeiset toimet, ja vielä enemmän, kun etenet kohti 'full stack' koneoppimisinsinöörin roolia. --- ## 🚀Haaste -Piirrä vuokaavio, joka kuvaa ML-asiantuntijan työvaiheet. Missä näet itsesi tällä hetkellä prosessissa? Missä ennustat kohtaavasi vaikeuksia? Mikä vaikuttaa sinulle helpolta? +Piirrä vuokaavio, jossa esität koneoppimisen toimijan vaiheet. Missä vaiheessa prosessia olet nyt? Missä ennakoit vaikeuksia? Mikä tuntuu sinusta helpolta? -## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) +## [Loppukoe](https://ff-quizzes.netlify.app/en/ml/) -## Kertaus ja itseopiskelu +## Kertaus & Itsenäinen opiskelu -Etsi verkosta haastatteluja data-analyytikoista, jotka keskustelevat päivittäisestä työstään. Tässä on [yksi](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +Etsi verkosta haastatteluja data-analyytikoista, jotka kertovat päivittäisestä työstään. Tässä on [yksi](https://www.youtube.com/watch?v=Z3IjgbbCEfs). ## Tehtävä @@ -119,5 +119,7 @@ Etsi verkosta haastatteluja data-analyytikoista, jotka keskustelevat päivittäi --- + **Vastuuvapauslauseke**: -Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta huomioithan, että automatisoidut käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäiskielellä tulisi pitää ensisijaisena lähteenä. Tärkeissä tiedoissa suositellaan ammattimaista ihmiskäännöstä. Emme ota vastuuta tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai tulkinnoista. + \ No newline at end of file diff --git a/translations/fi/2-Regression/3-Linear/README.md b/translations/fi/2-Regression/3-Linear/README.md index 918d91ceb..6d01bb6d7 100644 --- a/translations/fi/2-Regression/3-Linear/README.md +++ b/translations/fi/2-Regression/3-Linear/README.md @@ -1,137 +1,137 @@ -# Rakennetaan regressiomalli Scikit-learnillä: regressio neljällä tavalla +# Rakennetaan regressiomalli Scikit-learnillä: neljä regressiotapaa ## Aloittelijan huomautus -Lineaarista regressiota käytetään, kun haluamme ennustaa **numeraalista arvoa** (esimerkiksi talon hinta, lämpötila tai myynti). -Se toimii etsimällä suoran viivan, joka parhaiten kuvaa syöteominaisuuksien ja tuloksen välistä suhdetta. +Lineaarista regressiota käytetään, kun haluamme ennustaa **numeerista arvoa** (esimerkiksi talon hinta, lämpötila tai myynti). +Se toimii löytämällä suoran linjan, joka parhaiten kuvaa syöteominaisuuksien ja tuloksen välistä suhdetta. -Tässä oppitunnissa keskitymme käsitteen ymmärtämiseen ennen kuin tutustumme edistyneempiin regressiomenetelmiin. -![Linear vs polynomial regression infographic](../../../../translated_images/fi/linear-polynomial.5523c7cb6576ccab.webp) -> Infografiikka tekijältä [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Esiluento-testi](https://ff-quizzes.netlify.app/en/ml/) +Tässä oppitunnissa keskitymme käsitteen ymmärtämiseen ennen edistyneempien regressiotekniikoiden tutkimista. +![Lineaarinen vs polynominen regressio infografiikka](../../../../translated_images/fi/linear-polynomial.5523c7cb6576ccab.webp) +> Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Esiluentokysely](https://ff-quizzes.netlify.app/en/ml/) -> ### [Tämä oppitunti saatavilla R:llä!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### Johdanto +> ### [Tämä oppitunti on saatavilla myös R-kielellä!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Johdanto -Tähän mennessä olet tutustunut regressioon esimerkkidatan avulla, joka on kerätty kurpitsahintojen aineistosta, jota käytämme koko tämän oppitunnin ajan. Olet myös visualisoinut sen käyttäen Matplotlibia. +Tähän mennessä olet tutustunut siihen, mitä regressio tarkoittaa kurpitsahintojen otosaineiston avulla, jota käytämme läpi tämän oppitunnin. Olet myös visualisoinut sitä Matplotlibilla. -Nyt olet valmis sukeltamaan syvemmälle koneoppimisen regressioon. Vaikka visualisointi auttaa sinua hahmottamaan dataa, koneoppimisen todellinen voima tulee _mallien harjoittamisesta_. Mallit koulutetaan historiallisella datalla kaappaamaan automaattisesti datan riippuvuuksia, ja niiden avulla voit ennustaa tuloksia uudelle datalle, jota malli ei ole aiemmin nähnyt. +Nyt olet valmis sukeltamaan syvemmälle koneoppimisen regressioon. Vaikka visualisointi auttaa ymmärtämään dataa, koneoppimisen todellinen voima tulee _mallien kouluttamisesta_. Mallit koulutetaan historiallisella datalla automaattisesti kaappaamaan datariippuvuuksia, ja ne antavat sinun ennustaa tuloksia uudelle datalle, jota malli ei ole nähnyt aiemmin. -Tässä oppitunnissa opit lisää kahdesta regressiotyypistä: _perus lineaarisesta regressiosta_ ja _polynomiregressiosta_, sekä joistakin näiden tekniikoiden taustalla olevista matematiikoista. Näillä malleilla voimme ennustaa kurpitsahintoja eri lähtötietojen perusteella. +Tässä oppitunnissa opit lisää kahdesta regressiotyypistä: _peruslineaarisesta regressiosta_ ja _polynomiregressiosta_, sekä joitakin näiden tekniikoiden taustalla olevia matematiikkaan liittyviä asioita. Nämä mallit mahdollistavat kurpitsahintojen ennustamisen eri syötedatan perusteella. [![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression") -> 🎥 Klikkaa yllä olevaa kuvaa katsomaan lyhyt videoyhteenveto lineaarisesta regressiosta. +> 🎥 Klikkaa yllä olevaa kuvaa katsellaksesi lyhyen videon lineaarisesta regressiosta. -> Koko tämän opetussuunnitelman aikana oletamme vähäisen matematiikan osaamisen ja pyrimme tekemään sisällöstä saavutettavaa muilta aloilta tuleville opiskelijoille, joten pidä silmällä huomautuksia, 🧮 merkintöjä, kaavioita ja muita oppimistyökaluja, jotka auttavat ymmärtämisessä. +> Koko tämän opetussuunnitelman ajan oletamme matemaattisen osaamisen olevan perustasoa, ja pyrimme tekemään aiheesta helposti lähestyttävän opiskelijoille eri aloilta, joten pidä silmällä huomautuksia, 🧮 laskelmakohtia, kaavioita ja muita oppimistyökaluja ymmärtämisen tueksi. -### Esivaatimukset +### Esitiedot -Sinun tulisi nyt olla tuttu kurpitsadatan rakenteen kanssa, jota tarkastelemme. Sen löydät valmiiksi ladattuna ja siistittynä tämän oppitunnin _notebook.ipynb_-tiedostosta. Tiedostossa kurpitsan hinta näytetään per hehtolitran (bushel) uutena dataframenä. Varmista, että voit ajaa näitä muistikirjoja Visual Studio Code -ympäristössä. +Sinun tulisi nyt olla perehtynyt tässä tarkasteltavan kurpitsadatan rakenteeseen. Se on valmiiksi ladattu ja esipuhdistettu tämän oppitunnin _notebook.ipynb_-tiedostossa. Tiedostossa kurpitsan hinta näytetään tynnyriltä uudessa aineistokehikossa. Varmista, että voit ajaa näitä muistikirjoja Visual Studio Codessa. -### Valmistelu +### Valmistelut -Muistutuksena, lataat tätä dataa, jotta voit esittää sille kysymyksiä. +Muistutuksena: lataat tämän datan voidaksesi esittää sille kysymyksiä. -- Milloin on paras aika ostaa kurpitsoja? -- Minkä hinnan voin odottaa pikkukurpitsalaatikosta? -- Kannattaako ostaa ne puolen hehtolitran koreissa vai 1 1/9 hehtolitran laatikossa? +- Milloin on paras aika ostaa kurpitsoja? +- Millaisen hinnan voin odottaa pienempien kurpitsojen myyntierästä? +- Kannattaako ne ostaa puolikkaan tynnyrin koreissa vai 1 1/9 tynnyrin laatikossa? Jatketaan tämän datan tutkimista. -Edellisessä oppitunnissa loit Pandas-dataframen ja täytit sen osalla alkuperäisestä aineistosta, vakioimalla hinnat hehtolitran mukaan. Tällä tavoin onnistuimme keräämään noin 400 datapistettä ja vain syksyn kuukausilta. +Edellisessä oppitunnissa loit Pandas-aineistokehyksen ja täytit sen osalla alkuperäistä aineistoa, jolla hinnat vakioitiin tynnyrin mukaan. Näin kuitenkin sait kerättyä vain noin 400 tietopistettä, ja vain syksyn kuukausilta. -Katso data, jonka olemme ladanneet valmiiksi tämän oppitunnin mukanaolevaan muistikirjaan. Data on esiladattu ja ensimmäinen hajontakaavio piirretty kuukausidatan näyttämiseksi. Ehkä voimme saada hieman tarkempaa tietoa datan luonteesta puhdistamalla sitä vielä lisää. +Katso läpi tämän oppitunnin mukana tulevan muistikirjan ladattu data. Data on ladattu esiin, ja pohjakuva hajontakaaviosta näyttää kuukausidatan. Ehkä voimme saada lisätietoa datan luonteesta puhdistamalla sitä lisää. -## Lineaarisen regression suora +## Lineaarinen regressioviiva -Kuten opit oppitunnissa 1, lineaarisen regression harjoituksen tavoite on pystyä piirtämään suora, joka: +Kuten opit Oppitunnissa 1, lineaarisen regressioharjoituksen tavoite on pystyä piirtämään viiva, jolla voi: -- **Näyttää muuttujien väliset suhteet:** Havainnollistaa muuttujien välisen yhteyden -- **Tekee ennusteita:** Tekee tarkkoja ennusteita siitä, mihin uusi datapiste sijoittuu verrattuna tähän viivaan. +- **Näyttää muuttujien väliset suhteet**. Esittää muuttujien suhde. +- **Tehdä ennusteita**. Tehdä tarkkoja ennusteita, mihin uusi tietopiste sijoittuu suhteessa tuohon viivaan. -On tavallista käyttää **vähimmän neliösumman regressiota** (Least-Squares Regression) tällaisten suorien piirtämiseen. Termi "vähimmän neliösumman" viittaa prosessiin, jossa minimoidaan mallimme kokonaisvirhe. Jokaiselle datapisteelle mittaamme pystysuoran etäisyyden (jota kutsutaan jäännökseksi) todellisen pisteen ja regressiosuoran välillä. +Yleensä **Vähimmän neliösumman regressiossa** piirretään juuri tällainen viiva. Termi "vähimmän neliösumma" tarkoittaa sitä, että pyritään minimoimaan mallin kokonaisvirhe. Jokaiselle datapisteelle mitataan pystysuora etäisyys (jota kutsutaan residuaaliksi) varsinaisen pisteen ja regressioviivan välillä. -Neliöimme nämä etäisyydet kahdesta pääsyystä: +Nämä etäisyydet korotetaan toiseen potenssiin kahdesta syystä: -1. **Suuruus, ei suunta:** Haluamme kohdata virheen -5 samalla tavalla kuin virheen +5. Neliöiminen muuttaa kaikki arvot positiivisiksi. +1. **Suuruus verrattuna suuntaan:** Haluamme käsitellä virheen -5 samankaltaisena kuin virheen +5. Neliöinti tekee kaikki arvot positiivisiksi. -2. **Poikkeamien rankaisu:** Neliöinti antaa suuremman painon suuremmille virheille, pakottaen viivan pysymään lähempänä kauempana olevia pisteitä. +2. **Poikkeamien rankaiseminen:** Neliöinti antaa suurempaa painoarvoa isommille virheille, pakottaen viivan pysymään lähempänä kaukana olevia pisteitä. -Lisäämme sitten kaikki nämä neliöt yhteen. Tavoitteemme on löytää juuri se viiva, jossa tämä loppusumma on mahdollisimman pieni – tästä nimi "vähimmän neliösumman" regressio. +Sitten lasketaan kaikkien näiden neliöityjen lukujen summa. Tavoitteena on löytää juuri sellainen viiva, jolla tämä summa on pienin mahdollinen – siitä termi "vähimmän neliösumman" johdettu nimi. -> **🧮 Näytä matematiikka** -> -> Tätä viivaa, jota kutsutaan _sopivaksi suoraksi_, voidaan ilmaista [kaavalla](https://en.wikipedia.org/wiki/Simple_linear_regression): -> +> **🧮 Näytä minulle matematiikka** +> +> Tämä viiva, jota kutsutaan _paras sovitusviiva_, voidaan ilmaista [kaavalla](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` -> -> `X` on selittävä muuttuja. `Y` on selitettävä muuttuja. Viivan kulmakerroin on `b` ja `a` on y-leikkauspiste, joka tarkoittaa arvoa `Y`, kun `X = 0`. -> ->![laske kulmakerroin](../../../../translated_images/fi/slope.f3c9d5910ddbfcf9.webp) -> -> Laske ensin kulmakerroin `b`. Infografiikka tekijältä [Jen Looper](https://twitter.com/jenlooper) -> -> Toisin sanoen ja viitaten kurpitsadatan alkuperäiseen kysymykseen: "ennustetaan kurpitsan hinta per hehtolitran myyntikuukauden mukaan", `X` viittaa aikaan (kuukauteen) ja `Y` hintaan. -> ->![täydennä kaava](../../../../translated_images/fi/calculation.a209813050a1ddb1.webp) -> -> Laske Y:n arvo. Jos maksat noin 4 dollaria, sen täytyy olla huhtikuu! Infografiikka tekijältä [Jen Looper](https://twitter.com/jenlooper) -> -> Laskelmassa viivan kulman täytyy myös ottaa huomioon leikkauspiste, eli missä `Y` sijaitsee, kun `X = 0`. -> -> Voit tutustua laskentamenetelmään arvonlaskennasta [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) -sivustolla. Käy myös [vähimmän neliösumman laskurilla](https://www.mathsisfun.com/data/least-squares-calculator.html) nähdäksesi, miten numeroarvot vaikuttavat viivaan. +> +> `X` on 'selittävä muuttuja'. `Y` on 'riippuva muuttuja'. Viivan kulmakerroin on `b` ja `a` on y-leikkaus, joka tarkoittaa `Y`-arvoa, kun `X = 0`. +> +>![kulmakertoimen laskeminen](../../../../translated_images/fi/slope.f3c9d5910ddbfcf9.webp) +> +> Ensiksi lasketaan kulmakerroin `b`. Infografiikka: [Jen Looper](https://twitter.com/jenlooper) +> +> Toisin sanoen, viitaten kurpitsadatan alkuperäiseen kysymykseen: "ennustetaan kurpitsan hinta tynnyriltä kuukauden mukaan", `X` tarkoittaisi hintaa ja `Y` myyntikuukautta. +> +>![kaavan täydentäminen](../../../../translated_images/fi/calculation.a209813050a1ddb1.webp) +> +> Lasketaan `Y` arvo. Jos maksat noin 4 dollaria, silloin on huhtikuu! Infografiikka: [Jen Looper](https://twitter.com/jenlooper) +> +> Viivan laskemiseen liittyvä matematiikka osoittaa viivan kulman, joka riippuu myös leikkauspisteestä eli missä kohtaa `Y` sijaitsee, kun `X = 0`. +> +> Voit tarkastella näiden arvojen laskentatapaa sivustolla [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Katso myös [tämä vähimmän neliösumman laskuri](https://www.mathsisfun.com/data/least-squares-calculator.html) nähdäksesi, miten lukujen arvot vaikuttavat viivaan. ## Korrelaatio -Yksi termi, jonka ymmärtäminen on tärkeää, on **korrelaatiokerroin** annetuille X- ja Y-muuttujille. Hajontakaaviolla voit nopeasti havainnollistaa tämän kertoimen. Jos pisteet ovat kauniissa rivissä, korrelaatio on korkea, mutta jos pisteet ovat hajallaan kaikkialla X:n ja Y:n välillä, korrelaatio on matala. +Yksi tärkeä termi on vielä ymmärtää: **Korrelaatiokerroin** annettujen X- ja Y-muuttujien välillä. Hajontakaaviolla (scatterplot) voi nopeasti havainnoida tätä kerrointa. Kaavio, jossa datapisteet sijoittuvat siististi yhdelle linjalle, on korkea korrelaatio, kun taas pisteet ovat hajallaan X:n ja Y:n välillä, korrelaatio on matala. -Hyvä lineaarinen regressiomalli on sellainen, jonka korrelaatiokerroin on korkea (lähellä 1 eikä 0) vähimmän neliösumman regressiomallissa. +Hyvä lineaarinen regressiomalli on sellainen, jolla on korkea (lähempänä kuin 0:aa olevan 1:n suuruinen) korrelaatiokerroin vähimmän neliösumman regressiomenetelmällä piirrettynä. -✅ Aja tämän oppitunnin mukana tuleva muistikirja ja tutki 'Kuukausi – Hinta' -hajontakaaviota. Vaikuttaako kurpitsan myyntimäärän kuukausien ja hintojen data korkean vai matalan korrelaation omaavalta, visuaalisen tulkintasi perusteella? Muuttuuko tämä, jos käytät hienojakoisempaa mittaria kuin `Kuukausi`, esim. *vuoden päivä* (eli päivien määrä vuodenvaihteesta lähtien)? +✅ Aja oppituntiin liittyvä muistikirja ja tarkastele kuukausi-hinta hajontakaaviota. Vaikuttaako kurpitsamyynnin kuukausin ja hinnan data korreloivan tiiviisti vai heikosti sen mukaan, miten visualisoit hajontakaavion? Muuttuuko se, jos käytät hienojakoisempaa mittaria kuin `Month`, esim. *vuoden päivää* (päivien määrää vuoden alusta)? -Alla olevassa koodissa oletamme, että data on puhdistettu ja saatu data frame nimeltä `new_pumpkins`, joka on samanlainen kuin seuraava: +Alla oletamme, että olemme puhdistaneet datan ja saaneet `new_pumpkins`-aineistokehyksen, joka on lähellä seuraavaa: -ID | Kuukausi | PäiväVuodessa | Lajike | Kaupunki | Pakkaus | Alhainen hinta | Korkea hinta | Hinta ----|----------|---------------|--------|----------|---------|----------------|--------------|-------- -70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 hehtolitran laatikot | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 hehtolitran laatikot | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 hehtolitran laatikot | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 hehtolitran laatikot | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 hehtolitran laatikot | 15.0 | 15.0 | 13.636364 +ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price +---|-------|-----------|---------|------|---------|-----------|------------|-------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> Koodin datan puhdistamiseen löydät [`notebook.ipynb`](notebook.ipynb)-tiedostosta. Olemme tehneet samat puhdistusvaiheet kuin edellisessä oppitunnissa ja laskeneet `DayOfYear`-sarakkeen seuraavan lausekkeen avulla: +> Data on puhdistettu ja se löytyy [`notebook.ipynb`](notebook.ipynb)-tiedostosta. Olemme suorittaneet samat puhdistustoimet kuin edellisessä oppitunnissa, ja laskeneet `DayOfYear`-sarakkeen seuraavalla lausekkeella: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` + +Nyt kun ymmärrät lineaarisen regression taustalla olevan matematiikan, luodaan regressiomalli nähdäksesi, voimmeko ennustaa, millainen kurpitsapakkaus antaa parhaat kurpitsahinnat. Joku, joka ostaa kurpitsoja juhlapyhän koristeeksi, haluaisi tietää tämän optimoidakseen ostoksensa. -Koska sinulla on nyt käsitys lineaarisen regression taustalla olevasta matematiikasta, luodaan regressiomalli nähdäksesi, voimmeko ennustaa, mikä kurpitsapakkaus tarjoaa parhaat kurpitsanhinnat. Joulun kurpitsatilaisuutta varten ostava saattaa haluta tämän tiedon optimoidakseen ostoksensa. - -## Korrelatorin etsiminen +## Korrelaation etsiminen [![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression") -> 🎥 Klikkaa yllä olevaa kuvaa katsomaan lyhyt videoyhteenveto korrelaatiosta. +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi korrelaatiosta. -Viimeisestä oppitunnista olet varmaankin nähnyt, että eri kuukausien hintojen keskiarvot näyttävät tältä: +Edellisessä oppitunnissa olet varmaankin nähnyt, että eri kuukausien keskimääräinen hinta näyttää tältä: -Average price by month +Kuukausittainen keskihinta -Tämä viittaa siihen, että jonkinlainen korrelaatio on olemassa, ja voimme yrittää kouluttaa lineaarisen regressiomallin ennustamaan suhdetta `Kuukausi` ja `Hinta` tai `PäiväVuodessa` ja `Hinta` välillä. Tässä on hajontakaavio, joka näyttää jälkimmäisen suhteen: +Tämä viittaa siihen, että korrelaatiota pitäisi löytyä, ja voimme kokeilla lineaarisen regression mallia ennustamaan suhdetta `Month` ja `Price` välillä tai `DayOfYear` ja `Price` välillä. Tässä on hajontakaavio, joka näyttää jälkimmäisen suhteen: -Scatter plot of Price vs. Day of Year +Hajontakaavio: hinta vs. vuoden päivä -Katsotaan, onko korrelaatiota `corr`-funktion avulla: +Tutkitaan korrelaatiota `corr`-funktiolla: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` - -Näyttää siltä, että korrelaatio on melko pieni, -0.15 kuukauden mukaan ja -0.17 päivän mukaan, mutta voi olla jokin toinen tärkeä suhde. Näyttää siltä, että hinnat muodostavat eri klustereita eri kurpitsalajien mukaan. Vahvistaaksemme tämän hypoteesin piirretään jokainen kurpitsakategoria omalla värillään. Antamalla `ax`-parametri `scatter`-piirtotoiminnolle voimme piirtää kaikki pisteet samaan kuvaajaan: + +Näyttää siltä, että korrelaatio on melko pieni, noin -0.15 kuukausittain ja -0.17 vuoden päivä -sarakkeen mukaan, mutta saattaa olla toinen tärkeä suhde. Näyttää siltä, että eri kurpitsalajikkeiden hinnat muodostavat erilaisia klustereita. Vahvistaaksesi tämän, piirretään kukin kurpitsaluokka eri värillä. Kun annamme `ax`-parametrin `scatter`-funktiolle, voimme piirtää kaikki pisteet samaan kuvaajaan: ```python ax=None @@ -140,41 +140,41 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): df = new_pumpkins[new_pumpkins['Variety']==var] ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` + +Hajontakaavio: hinta vs. vuoden päivä, värikoodattu lajikkeen mukaan -Scatter plot of Price vs. Day of Year - -Tutkimuksemme viittaa siihen, että lajike vaikuttaa enemmän hintaan kuin myyntipäivämäärä. Näin näkyy myös palkkikaaviosta: +Tutkimuksemme viittaa siihen, että lajike vaikuttaa kokonaishintaan enemmän kuin todellinen myyntipäivä. Näemme tämän myös palkkikaaviolla: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` + +Palkkikaavio: hinta lajikkeen mukaan -Bar graph of price vs variety - -Keskitymme tällä hetkellä vain yhteen kurpitsalajikkeeseen, 'pie type' -lajikkeeseen, ja katsotaan, mitä vaikutusta päivämäärällä on hintaan: +Keskitytään hetkeksi vain yhteen kurpitsalajikkeeseen, piirakkatyyppeihin, ja katsotaan, miten myyntipäivä vaikuttaa hintaan: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -Scatter plot of Price vs. Day of Year +Hajontakaavio: hinta vs. vuoden päivä piirakkalajike -Jos nyt lasket korrelaation `Hinnan` ja `PäiväVuodessa`-arvon välillä `corr`-funktiolla, saat jotain -0.27:n tienoilla – mikä tarkoittaa, että ennustemallin kouluttaminen on järkevää. +Jos nyt lasketaan korrelaatio `Price` ja `DayOfYear` välillä käyttäen `corr`-funktiota, saamme noin `-0.27` – mikä tarkoittaa, että ennustavan mallin kouluttaminen on perusteltua. -> Ennen lineaarisen regressiomallin kouluttamista on tärkeää varmistaa, että data on puhdasta. Lineaarinen regressio ei toimi hyvin puuttuvien arvojen kanssa, joten on järkevää poistaa kaikki tyhjät solut: +> Ennen lineaarisen regressiomallin kouluttamista on tärkeää varmistaa, että datamme on puhdasta. Lineaarinen regressio ei toimi hyvin puuttuvien arvojen kanssa, joten on järkevää poistaa kaikki tyhjät solut: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` - -Toinen lähestymistapa olisi täyttää tyhjät arvot vastaavan sarakkeen keskiarvolla. + +Toinen tapa voisi olla täyttää nämä tyhjät arvot sarakkeen keskiarvolla. ## Yksinkertainen lineaarinen regressio [![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn") -> 🎥 Klikkaa yllä olevaa kuvaa katsomaan lyhyt videoyhteenveto lineaarisesta ja polynomiregressiosta. +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi lineaarisesta ja polynomiregressiosta. Kouluttaaksemme lineaarisen regressiomallimme käytämme **Scikit-learn**-kirjastoa. @@ -183,32 +183,32 @@ from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` - -Aloitamme erottelemalla syötearvot (ominaisuudet) ja odotetun tuloksen (label) omiin numpy-taulukoihinsa: + +Aloitamme erottamalla syötearvot (ominaisuudet) ja odotetun tuloksen (tunniste) erillisiin numpy-taulukoihin: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` + +> Huomaa, että meidän oli tehtävä `reshape` syötedatalle, jotta Linear Regression -paketti ymmärtäisi sen oikein. Lineaarinen regressio odottaa 2-ulotteista taulukkoa syötteenä, jossa jokainen rivin alkio vastaa syöteominaisuuksien vektoria. Meidän tapauksessamme, koska syötteitä on vain yksi, tarvitsemme N×1-ulotteisen taulukon, missä N on datasetin koko. -> Huomaa, että jouduimme tekemään `reshape`-muunnoksen syötteisiin, jotta Linear Regression -paketti ymmärtää ne oikein. Lineaarinen regressio odottaa 2-ulotteista taulukkoa syötteeksi, jossa jokainen taulukon rivi vastaa ominaisuusvektoria. Meillä on vain yksi syöte, joten tarvitaan N×1-muotoinen taulukko, missä N on datan koko. - -Seuraavaksi jaamme datan koulutus- ja testidatasettiin, jotta voimme validoida mallimme koulutuksen jälkeen: +Seuraavaksi meidän tulee jakaa data opetus- ja testiaineistoihin, jotta voimme validoida mallin kouluttamisen jälkeen: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` - -Lopuksi lineaarisen regressiomallin kouluttaminen tapahtuu kahdella koodirivillä. Määrittelemme `LinearRegression`-olion ja sovitamme sen dataan `fit`-metodilla: + +Lopuksi varsinainen lineaarisen regression kouluttaminen vaatii vain kaksi koodiriviä. Määrittelemme `LinearRegression`-objektin ja koulutamme sen datalla `fit`-metodilla: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -LinearRegression-objekti fitauksen jälkeen sisältää kaikki regressiokertoimet, joihin pääsee käsiksi .coef_-ominaisuuden kautta. Meidän tapauksessamme on vain yksi kerroin, jonka tulisi olla noin -0,017. Tämä tarkoittaa, että hinnat näyttävät laskevan hieman ajan myötä, mutta ei paljoa, noin 2 senttiä päivässä. Pääsemme käsiksi myös regressiokäyrän leikkauspisteeseen Y-akselin kanssa käyttämällä lin_reg.intercept_ -ominaisuutta - se on meidän tapauksessamme noin 21, mikä ilmaisee hinnan vuoden alussa. +`LinearRegression`-olio `fit`-metodin suorittamisen jälkeen sisältää kaikki regressiokertoimet, joihin pääsee käsiksi `.coef_`-ominaisuudella. Tapauksessamme on vain yksi kerroin, jonka pitäisi olla noin `-0.017`. Tämä tarkoittaa, että hinnat näyttävät laskevan hieman ajan myötä, mutta eivät liian paljon, noin 2 senttiä päivässä. Voimme myös päästä käsiksi regressiolinjan leikkauspisteeseen Y-akselin kanssa käyttämällä `lin_reg.intercept_`-arvoa – se on tapauksessamme noin `21`, mikä osoittaa hinnan vuoden alussa. -Nähdäksemme, kuinka tarkka mallimme on, voimme ennustaa testidatan hinnat ja mitata sitten, kuinka lähellä ennusteemme ovat odotettuja arvoja. Tämä voidaan tehdä käyttäen neliöllisen keskiarvon neliöjuurivirhettä (RMSE), joka on kaikkien odotetun ja ennustetun arvon neliöllisten erotusten keskiarvon neliöjuuri. +Näyttääksemme, kuinka tarkka mallimme on, voimme ennustaa hintoja testidatalla ja mitata sitten, kuinka lähellä ennusteemme ovat odotettuja arvoja. Tämä voidaan tehdä juurikin neliöllisten virheiden keskiarvon neliöjuuren (RMSE) avulla, joka on kaikkien odotettujen ja ennustettujen arvojen neliöllisten erojen keskiarvon neliöjuuri. ```python pred = lin_reg.predict(X_test) @@ -216,15 +216,16 @@ pred = lin_reg.predict(X_test) rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` - Virheemme näyttää olevan noin 2 pistettä, eli ~17%. Ei kovin hyvä. Toinen mallin laadun mittari on **määrityskerroin**, joka voidaan saada näin: + +Virheemme näyttää olevan noin 2 pistettä, mikä on ~17%. Ei kovin hyvä. Toinen mallin laadun mittari on **määrityskerroin**, jonka saamme näin: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -Jos arvo on 0, se tarkoittaa, että malli ei huomioi syötteitä ja toimii *huonoimpana lineaarisena ennustajana*, joka on yksinkertaisesti tuloksen keskiarvo. Arvo 1 tarkoittaa, että pystymme täydellisesti ennustamaan kaikki odotetut arvot. Meillä kerroin on noin 0,06, mikä on melko alhainen. +Jos arvo on 0, se tarkoittaa, että malli ei ota syötedataa huomioon ja toimii *huonona lineaarisena ennustajana*, joka on yksinkertaisesti tuloksen keskiarvo. Arvo 1 tarkoittaa, että voimme täydellisesti ennustaa kaikki odotetut tulokset. Tapauksessamme kerroin on noin 0.06, mikä on melko matala. -Voimme myös piirtää testidatan ja regressiokäyrän samaan kuvaajaan, jotta näemme paremmin, miten regressio toimii tapauksessamme: +Voimme myös piirtää testidatan yhdessä regressioviivan kanssa nähdäksesi paremmin, miten regressio toimii tapauksessamme: ```python plt.scatter(X_test,y_test) @@ -235,17 +236,17 @@ plt.plot(X_test,pred) ## Polynominen regressio -Toinen lineaarisen regression tyyppi on polynominen regressio. Vaikka joskus muuttujien välillä on lineaarinen suhde - mitä suurempi kurpitsa tilavuudeltaan, sitä korkeampi hinta - joskus näitä suhteita ei voi esittää tasona tai suorana viivana. +Toinen lineaarisen regression muoto on polynominen regressio. Vaikka joskus muuttujien välillä on lineaarinen suhde – mitä suurempi kurpitsa tilavuudeltaan, sitä korkeampi hinta – joskus nämä suhteet eivät ole suoraan tasossa tai suoralla viivalla esitettävissä. -✅ Tässä on [joitakin lisää esimerkkejä](https://online.stat.psu.edu/stat501/lesson/9/9.8) aineistosta, johon polynominen regressio sopii +✅ Tässä on [jotakin lisää esimerkkejä](https://online.stat.psu.edu/stat501/lesson/9/9.8) datasta, jossa polynomista regressiota voisi käyttää. -Katso uudelleen suhdetta Päivämäärän ja Hinnan välillä. Näyttääkö tämä hajontakuvio siltä, että se pitäisi välttämättä analysoida suoralla viivalla? Eikö hinnat voi vaihdella? Tässä tapauksessa voit kokeilla polynomista regressiota. +Katso vielä uudestaan suhdetta Päivämäärä ja Hinta. Näyttääkö tämä hajontakaavio siltä, että se pitäisi välttämättä analysoida suoralla viivalla? Eikö hinta voi vaihdella? Tässä tapauksessa voit kokeilla polynomista regressiota. -✅ Polynomit ovat matemaattisia lausekkeita, jotka voivat sisältää yhden tai useamman muuttujan ja kertoimen +✅ Polynomit ovat matemaattisia lausekkeita, jotka voivat sisältää yhden tai useamman muuttujan ja kertoimen. -Polynominen regressio luo käyrän, joka istuu paremmin epälineaariseen dataan. Meidän tapauksessamme, jos lisäämme syötteisiin itseisarvoltaan neliöidyn DayOfYear-muuttujan, pystymme sovittamaan dataa parabolisella käyrällä, jolla on minimi tietyssä vuoden kohdassa. +Polynominen regressio luo kaarevan viivan sopimaan paremmin ei-lineaariseen dataan. Tapauksessamme, jos lisätään syötteeksi neliöity `DayOfYear`-muuttuja, voimme sovittaa datan paraabelikäyrällä, jolla on minimi tietyn vuodenhetken kohdalla. -Scikit-learn sisältää hyödyllisen [pipeline API:n](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) eri datankäsittelyvaiheiden yhdistämistä varten. **Pipeline** on ketju **estimaattoreita**. Meidän tapauksessamme luomme pipelineketjun, joka ensin lisää polynomiset piirteet malliin, ja sen jälkeen opettaa regression: +Scikit-learn sisältää hyödyllisen [pipeline-rajapinnan](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) erilaisten datankäsittelyvaiheiden yhdistämiseksi. **Pipeline** on ketju **estimaattoreita**. Tapauksessamme luomme pipeline:n, joka ensin lisää polynomiset piirteet malliin ja sen jälkeen opettaa regression: ```python from sklearn.preprocessing import PolynomialFeatures @@ -255,36 +256,59 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` - Käyttäen PolynomialFeatures(2) tarkoittaa, että otamme mukaan kaikki toisen asteen polynomit syötteestä. Meidän tapauksessamme se tarkoittaa vain DayOfYear2, mutta jos on kaksi syötemuuttujaa X ja Y, tämä lisää X2, XY ja Y2. Voimme myös käyttää korkeampiasteisia polynomeja, jos haluamme. -Pipelinetä voi käyttää samoin kuin alkuperäistä LinearRegression-objektia, eli voimme fitata pipelinen ja sitten predictata saadaksemme ennusteita. Tässä kuvaaja, jossa testidata ja likimääräinen käyrä: +Käyttäminen `PolynomialFeatures(2)` tarkoittaa, että otamme mukaan kaikki toisen asteen polynomit syötedatasta. Meidän tapauksessamme se tarkoittaa vain `DayOfYear`2, mutta jos olisi kaksi syötemuuttujaa X ja Y, se lisäisi termit X2, XY ja Y2. Voimme myös käyttää korkeampia asteen polynomeja, jos haluamme. + +Pipelineja voidaan käyttää samalla tavalla kuin alkuperäistä `LinearRegression`-oliota, eli voimme `fit`-kutsua pipelineen ja käyttää sitten `predict` ennusteiden saamiseksi: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Piirtääksemme sujuvan likimääräiskäyrän käytämme `np.linspace`-funktiota luomaan tasaisesti jakautuneen syötealueen, sen sijaan että piirrämme suoraan järjestämättömälle testidatalle (joka tuottaisi siksak-viivan): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` + +Tässä on kuvaaja, jossa näkyy testidata ja likimääräiskäyrä: Polynomial regression -Polynomista regressiota käyttäen saamme hieman pienemmän MSE:n ja korkeamman määrityskertoimen, mutta ei merkittävästi. Tarvitsemme mukaan muita piirteitä! +Polynomista regressiota käyttämällä saamme hieman alhaisemman RMSE:n ja korkeamman määrityskertoimen, mutta ei merkittävästi. Meidän on otettava huomioon myös muita piirteitä! -> Näet, että kurpitsan pienimmät hinnat ovat havaittavissa jossakin Halloweenin tienoilla. Miten selität tämän? +> Voit nähdä, että kurpitsojen hinnat ovat alhaisimmillaan jossain Halloweeniin aikaan. Miten selität tämän? -🎃 Onneksi olkoon, olet juuri luonut mallin, joka voi auttaa ennustamaan piirakkakurpitsojen hintaa. Voit todennäköisesti toistaa saman menetelmän kaikille kurpistyyppilajikkeille, mutta se olisi työlästä. Opitaan nyt, miten kurpislajike otetaan mallissa huomioon! +🎃 Onneksi olkoon, juuri loit mallin, joka voi auttaa ennustamaan kurpitsapiirakan hintoja. Voit luultavasti toistaa saman prosessin kaikille kurpistyyppien lajikkeille, mutta se olisi työlästä. Opitaan nyt, miten otamme kurpitsalajikkeet mukaan malliin! -## Kategorialliset piirteet +## Kategoriset piirteet -Ihanteellisessa maailmassa haluamme pystyä ennustamaan eri kurpislajikkeiden hinnat samalla mallilla. Kuitenkin Variety-sarake on hieman erilainen kuin esimerkiksi Month, koska se sisältää ei-numeerisia arvoja. Tällaisia sarakkeita kutsutaan **kategoriallisiksi**. +Ihanteellisessa maailmassa haluamme pystyä ennustamaan hintoja eri kurpitsalajikkeille samalla mallilla. Kuitenkin `Variety`-sarake poikkeaa hieman esimerkiksi `Month`-sarakkeesta, koska se sisältää ei-numeerisia arvoja. Tällaisia sarakkeita kutsutaan **kategorisiksi**. -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") +[![ML aloittelijoille - Kategoristen piirteiden ennusteet lineaarisella regressiolla](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML aloittelijoille - Kategoristen piirteiden ennusteet lineaarisella regressiolla") -> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen videon kategoriapiirteiden käytöstä. +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen opetusvideon kategoristen piirteiden käytöstä. -Tässä voit nähdä, miten keskihinta riippuu lajikkeesta: +Tässä näkyy, miten keskihinta riippuu kurpitsalajikkeesta: Average price by variety -Ottaksemme lajikkeen huomioon, meidän tulee ensin muuntaa se numeeriseksi eli **enkoodata**. On useita tapoja tehdä tämä: +Ottamaan lajikkeet huomioon meidän täytyy ensin muuntaa ne numeeriseen muotoon eli **enkoodata**. On olemassa useita tapoja tehdä se: -* Yksinkertainen **numeraalinen enkoodaus** rakentaa taulukon eri lajikkeista ja korvaa lajikenimen taulukon indeksillä. Tämä ei ole paras idea lineaarisessa regressiossa, koska lineaarinen regressio ottaa indeksin numeerisen arvon ja lisää sen tulokseen kertoimen kanssa kerrottuna. Meidän tapauksessamme suhde indeksiluvun ja hinnan välillä on selvästi epälineaarinen, vaikka indeksit järjestettäisiin tietyllä tavalla. -* **One-hot-enkoodaus** korvaa Variety-sarakkeen neljällä eri sarakkeella, yksi kullekin lajikkeelle. Jokainen sarake sisältää arvon 1 jos rivi kuuluu kyseiseen lajikkeeseen, ja muuten 0. Tämä tarkoittaa, että lineaarisessa regressiossa on neljä kerrointa, yksi kullekin kurpislajikkeelle, jotka vastaavat "aloitushintaa" (tai pikemminkin "lisähintaa") kyseiselle lajikkeelle. +* Yksinkertainen **numeerinen enkoodaus** luo taulukon eri lajikkeista ja korvaa lajikenimen indeksillä taulukossa. Tämä ei ole paras ratkaisu lineaariselle regressiolle, koska lineaarinen regressio käyttää indeksin numeerista arvoa ja lisää sen tulokseen kerrottuna jollakin kertoimella. Tapauksessamme indeksin numeron ja hinnan suhde ei ole lineaarinen, vaikka indeksit olisi järjestetty jollain tavalla. +* **One-hot-enkoodaus** korvaa `Variety`-sarakkeen neljällä eri sarakkeella, yksi kullekin lajikkeelle. Kukin sarake sisältää `1` jos rivi on kyseistä lajiketta, ja `0` muuten. Tämä tarkoittaa, että lineaarisessa regressiossa on neljä kerrointa, yksi kullekin kurpitsalajikkeelle, jotka vastaavat "aloitushintaa" (tai oikeammin "lisähintaa") kyseiselle lajikkeelle. -Alla on koodi, jolla voimme one-hot enkoodata lajikkeen: +Alla oleva koodi näyttää, miten lajikkeen voi one-hot-enkoodata: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -301,13 +325,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -Kouluttaaksemme lineaarisen regression käyttäen one-hot enkoodattua lajiketta syötteenä, meidän tarvitsee vain alustaa X ja y -data oikein: +Lineaarisen regression kouluttamiseksi one-hot-enkoodatulla lajikkeella syötteenä, meidän tarvitsee vain laittaa `X` ja `y` oikein: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` - Loput koodista on sama kuin mitä käytimme aiemmin LinearRegressionin opettamiseen. Jos kokeilet, näet, että keskimääräinen neliövirhe on suunnilleen sama, mutta saamme paljon korkeamman määrityskertoimen (~77%). Saadaksemme vieläkin tarkempia ennusteita voimme ottaa huomioon enemmän kategoriallisia piirteitä sekä numeerisia piirteitä, kuten Month tai DayOfYear. Saadaksemme yhden suuren piirteiden taulukon, voimme käyttää join-metodia: + +Muuten koodi on sama kuin yllä käyttämämme lineaarisen regression opettamiseen. Kun kokeilet tätä, huomaat, että neliöllinen virhe on noin sama, mutta määrityskerroin kohoaa noin 77 %:iin. Vielä tarkempia ennusteita varten voimme ottaa huomioon useampia kategorisia piirteitä sekä numeerisia piirteitä, kuten `Month` tai `DayOfYear`. Saadaksemme yhden suuren piirrejoukon voimme käyttää `join`-metodia: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -316,21 +341,22 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] ``` - Tässä otamme lisäksi huomioon Cityn ja Package-tyypin, jolloin MSE on 2,84 (10%) ja määrityskerroin 0,94! -## Yhdistetään kaikki +Tässä otamme myös huomioon `City` ja `Package`-tyypin, mikä antaa RMSE-arvoksi 2.84 (10.5%) ja määrityskertoimeksi 0.94! + +## Kaiken yhdistäminen -Tehdäksemme parhaan mallin voimme käyttää yhdistettyä (one-hot enkoodattu kategoriallinen + numeerinen) dataa yllä olevasta esimerkistä yhdessä polynomisen regression kanssa. Tässä on koko koodi käyttöösi: +Parhaan mallin tekemiseksi voimme käyttää yhdistettyä (one-hot-enkoodattua kategorista + numeerista) dataa yllä olevasta esimerkistä yhdessä polynomisen regression kanssa. Tässä on valmiiksi koottu koodi: ```python -# aseta harjoitusdata +# aseta koulutusdata 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'] -# tee harjoitus-testaus-jako +# tee koulutus- ja testijakauma X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # asenna ja kouluta putkisto @@ -340,43 +366,44 @@ pipeline.fit(X_train,y_train) # ennusta tulokset testidatalle pred = pipeline.predict(X_test) -# laske MSE ja selitysaste -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# laske RMSE ja selitysaste +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` - Tämä antaa meille parhaan määrityskertoimen lähes 97 %, ja MSE=2,23 (~8 % ennustvirhe). -| Malli | MSE | Määrityskerroin | -|-------|-----|---------------| +Tämän pitäisi antaa meille paras määrityskerroin lähes 97% ja RMSE-arvo 2.23 (~8% ennustetarkkuus). + +| Malli | RMSE | Määritys | +|-------|-----|---------| | `DayOfYear` Lineaarinen | 2.77 (17.2%) | 0.07 | | `DayOfYear` Polynominen | 2.73 (17.0%) | 0.08 | | `Variety` Lineaarinen | 5.24 (19.7%) | 0.77 | | Kaikki piirteet Lineaarinen | 2.84 (10.5%) | 0.94 | | Kaikki piirteet Polynominen | 2.23 (8.25%) | 0.97 | -🏆 Hienoa työtä! Loit neljä regressiomallia yhdessä oppitunnissa ja paransit mallin laatua 97 %:iin. Regressio-osan lopussa opit logistisesta regressiosta luokitusten määrittämiseksi. +🏆 Hienoa työtä! Loit neljä regressiomallia yhdessä oppitunnissa ja paransit mallin laatua 97 %:iin. Regressio-opin lopussa opit logistisesta regressiosta, jolla voidaan luokitella kategoriat. --- ## 🚀Haaste -Testaa tässä muistikirjassa useampaa eri muuttujaa nähdäksesi, miten korrelaatio vastaa mallin tarkkuutta. +Testaa tässä muistikirjassa useita eri muuttujia nähdäksesi, miten korrelaatio vaikuttaa mallin tarkkuuteen. -## [Luentotentin jälkeinen tietovisa](https://ff-quizzes.netlify.app/en/ml/) +## [Luentokerran testi](https://ff-quizzes.netlify.app/en/ml/) -## Kertaus & Itsestä opiskelua +## Kertaus ja itsenäinen opiskelu -Tässä oppitunnissa opimme lineaarisesta regression mallinnuksesta. On olemassa myös muita tärkeitä regressiotyyppejä. Lue Stepwise-, Ridge-, Lasso- ja Elasticnet-teknikoista. Hyvä kurssi syventymiseen on [Stanfordin statistiikan oppimisjakso](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +Tässä oppitunnissa opimme lineaarisesta regressiosta. On myös muita tärkeitä regressiotyyppejä. Lue stepwise-, ridge-, lasso- ja elasticnet-menetelmistä. Hyvä kurssi oppimiseen on [Stanfordin tilastollisen oppimisen kurssi](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). ## Tehtävä -[Rakenna malli](assignment.md) +[Laadi malli](assignment.md) --- **Vastuuvapauslauseke**: -Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, ole ystävällinen ja huomioi, että automatisoiduissa käännöksissä saattaa esiintyä virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen omalla kielellä tulee pitää ensisijaisena lähteenä. Tärkeiden tietojen osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa mahdollisista väärinymmärryksistä tai virhetulkingoista, jotka johtuvat tämän käännöksen käytöstä. +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta ole hyvä ja huomioi, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä pidetään virallisena lähteenä. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tästä käännöksestä johtuvista väärinkäsityksistä tai virhetulkinnoista. \ No newline at end of file diff --git a/translations/fi/2-Regression/3-Linear/solution/notebook.ipynb b/translations/fi/2-Regression/3-Linear/solution/notebook.ipynb index ff0ea1916..8a91445f3 100644 --- a/translations/fi/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/fi/2-Regression/3-Linear/solution/notebook.ipynb @@ -6,12 +6,12 @@ "source": [ "## Lineaarinen ja polynominen regressio kurpitsan hinnoitteluun - Oppitunti 3\n", "\n", - "Lataa tarvittavat kirjastot ja datasetti. Muunna data tietokehykseksi, joka sisältää osajoukon datasta:\n", + "Lataa tarvittavat kirjastot ja aineisto. Muunna data dataframeksi, joka sisältää alijoukon aineistosta:\n", "\n", - "- Valitse vain kurpitsat, jotka on hinnoiteltu tynnyreittäin\n", + "- Hae vain kurpitsat, joiden hinta on määritelty bussiilia kohden\n", "- Muunna päivämäärä kuukaudeksi\n", - "- Laske hinta korkeiden ja matalien hintojen keskiarvona\n", - "- Muunna hinta vastaamaan tynnyrimääräistä hinnoittelua\n" + "- Laske hinta keskiarvona korkeimmasta ja matalimmasta hinnasta\n", + "- Muunna hinta vastaamaan hinnoittelua bussiilimäärän perusteella\n" ] }, { @@ -377,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Hajontakaavio muistuttaa meitä siitä, että meillä on kuukausitietoja vain elokuusta joulukuuhun. Tarvitsemme luultavasti enemmän tietoja voidaksemme tehdä johtopäätöksiä lineaarisesti.\n" + "Hajontakaavio muistuttaa meitä siitä, että meillä on kuukausitietoja vain elokuusta joulukuuhun. Tarvitsemme todennäköisesti lisää tietoja, jotta voimme tehdä johtopäätöksiä lineaarisessa muodossa.\n" ] }, { @@ -447,7 +447,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Katsotaanpa, onko korrelaatiota:\n" + ] }, { "cell_type": "code", @@ -472,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Näyttää siltä, että korrelaatio on melko pieni, mutta jokin muu tärkeämpi yhteys on olemassa - koska yllä olevan kuvaajan hintapisteet näyttävät muodostavan useita erillisiä klustereita. Tehdään kuvaaja, joka näyttää eri kurpitsalajikkeet:\n" + "Näyttää siltä, että korrelaatio on melko pieni, mutta on olemassa jokin muu tärkeämpi suhde - koska yllä olevassa kuvassa hintapisteillä näyttää olevan useita eri klustereita. Tehdään kuvaaja, joka näyttää eri kurpitsalajikkeet:\n" ] }, { @@ -535,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Toistaiseksi keskitytään vain yhteen lajikkeeseen - **piirakkatyyppi**.\n" + ] }, { "cell_type": "code", @@ -584,7 +588,7 @@ "source": [ "### Lineaarinen regressio\n", "\n", - "Käytämme Scikit Learn -kirjastoa lineaarisen regressiomallin kouluttamiseen:\n" + "Käytämme Scikit Learnia lineaarisen regressiomallin kouluttamiseen:\n" ] }, { @@ -662,7 +666,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Suoran kulmakerroin voidaan määrittää lineaarisen regressioyhtälön kertoimista:\n" + "Suoran kaltevuus voidaan määrittää lineaarisen regression kertoimista:\n" ] }, { @@ -718,11 +722,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Polynomisregressio\n", + "### Polynomiregressio\n", "\n", - "Joskus piirteiden ja tulosten välinen suhde on luonteeltaan epälineaarinen. Esimerkiksi kurpitsan hinnat voivat olla korkeita talvella (kuukaudet=1,2), sitten laskea kesällä (kuukaudet=5-7) ja nousta jälleen. Lineaarinen regressio ei pysty mallintamaan tätä suhdetta tarkasti.\n", + "Joskus ominaisuuksien ja tulosten välinen suhde on olennaisesti epälineaarinen. Esimerkiksi kurpitsojen hinnat voivat olla korkeita talvella (kuukaudet=1,2), laskea kesällä (kuukaudet=5-7) ja nousta taas uudelleen. Lineaarinen regressio ei pysty löytämään tätä suhdetta tarkasti.\n", "\n", - "Tässä tapauksessa voimme harkita lisäpiirteiden lisäämistä. Yksinkertainen tapa on käyttää polynomeja syötepiirteistä, mikä johtaa **polynomisregressioon**. Scikit Learnissa voimme automaattisesti esilaskentaa polynomipiirteet käyttämällä putkistoja:\n" + "Tässä tapauksessa voimme harkita lisäominaisuuksien lisäämistä. Yksinkertainen tapa on käyttää polynomeja syöteominaisuuksista, mikä johtaa **polynomiregressioon**. Scikit Learnissa voimme automaattisesti esilaskentaa polynomiset ominaisuudet putkistoilla: \n" ] }, { @@ -777,22 +781,25 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Koodausvaihtoehdot\n", + "### Koodauksen muunnelmat\n", "\n", - "Ihanteellisessa maailmassa haluamme pystyä ennustamaan eri kurpitsalajikkeiden hintoja käyttämällä samaa mallia. Jotta voimme ottaa lajikkeen huomioon, meidän täytyy ensin muuntaa se numeeriseen muotoon eli **koodata**. Tähän on useita tapoja:\n", + "Ihannetapauksessa haluamme pystyä ennustamaan eri kurpitsalajien hinnat samalla mallilla. Ottaaksemme lajikkeen huomioon, meidän täytyy ensin muuntaa se numeeriseen muotoon eli **koodata** se. Sen voi tehdä usealla tavalla:\n", "\n", - "* Yksinkertainen numeerinen koodaus, joka luo taulukon eri lajikkeista ja korvaa lajikkeen nimen taulukon indeksillä. Tämä ei ole paras idea lineaarista regressiota varten, koska lineaarinen regressio ottaa indeksin numeerisen arvon huomioon, eikä numeerinen arvo todennäköisesti korreloi hinnan kanssa.\n", - "* One-hot-koodaus, joka korvaa `Variety`-sarakkeen neljällä eri sarakkeella, yksi kutakin lajiketta varten. Sarakkeessa on arvo 1, jos vastaava rivi kuuluu kyseiseen lajikkeeseen, ja 0 muuten.\n", + "* Yksinkertainen numeerinen koodaus, joka rakentaa taulukon eri lajikkeista ja korvaa lajikenimen tämän taulukon indeksillä. Tämä ei ole paras idea lineaariselle regressiolle, koska lineaarinen regressio ottaa huomioon indeksin numeerisen arvon, ja tämä arvo ei todennäköisesti korreloi numeerisesti hinnan kanssa.\n", + "* One-hot -koodaus, joka korvaa `Variety`-sarakkeen neljällä eri sarakkeella, yksi jokaiselle lajikkeelle, ja sarake sisältää 1, jos vastaava rivi kuuluu kyseiseen lajikkeeseen, ja 0 muuten.\n", "\n", - "Alla oleva koodi näyttää, kuinka voimme suorittaa one-hot-koodauksen lajikkeelle:\n" + "Alla oleva koodi näyttää, kuinka lajike voidaan one-hot -koodata:\n" ] }, { @@ -942,7 +949,7 @@ "source": [ "### Lineaarinen regressio lajikkeella\n", "\n", - "Käytämme nyt samaa koodia kuin yllä, mutta `DayOfYear`-muuttujan sijaan käytämme yksi-kuumakoodattua lajiketta syötteenä:\n" + "Käytämme nyt samaa koodia kuin yllä, mutta `DayOfYear`-muuttujan sijaan käytämme syötteenä one-hot-koodattua lajikettamme:\n" ] }, { @@ -990,7 +997,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Voimme myös kokeilla käyttää muita ominaisuuksia samalla tavalla ja yhdistää niitä numeerisiin ominaisuuksiin, kuten `Month` tai `DayOfYear`:\n" + "Voimme myös yrittää käyttää muita ominaisuuksia samalla tavalla ja yhdistää ne numeeristen ominaisuuksien kanssa, kuten `Month` tai `DayOfYear`:\n" ] }, { @@ -1021,9 +1028,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Polynomiregressio\n", + "### Polynominen regressio\n", "\n", - "Polynomiregressiota voidaan käyttää myös kategoristen ominaisuuksien kanssa, jotka on koodattu one-hot-muotoon. Polynomiregression kouluttamiseen käytettävä koodi olisi periaatteessa sama kuin mitä olemme nähneet aiemmin.\n" + "Polynomista regressiota voidaan käyttää myös kategoristen, one-hot-koodattujen ominaisuuksien kanssa. Koodi polynomisen regression kouluttamiseksi olisi olennaisesti sama kuin yllä olemme nähneet.\n" ] }, { @@ -1070,7 +1077,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Vastuuvapauslauseke**: \nTämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulee pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskääntämistä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.\n" + "---\n\n\n**Vastuuvapauslauseke**: \nTämä asiakirja on käännetty käyttäen tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta olethan tietoinen siitä, että automaattisissa käännöksissä saattaa esiintyä virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen omalla kielellä on ensisijainen lähde. Tärkeissä asioissa suosittelemme ammattimaista ihmiskäännöstä. Emme ole vastuussa mahdollisista väärinymmärryksistä tai tulkinnoista, jotka johtuvat tämän käännöksen käytöstä.\n\n" ] } ], @@ -1100,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-04T06:20:20+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "fi" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/translations/no/.co-op-translator.json b/translations/no/.co-op-translator.json index bc3cfbbe8..f65965395 100644 --- a/translations/no/.co-op-translator.json +++ b/translations/no/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "no" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T21:41:24+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T18:55:18+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "no" }, @@ -90,8 +90,8 @@ "language_code": "no" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T20:02:44+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T18:54:47+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "no" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "no" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T18:52:00+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "no" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-05T21:11:16+00:00", diff --git a/translations/no/1-Introduction/4-techniques-of-ML/README.md b/translations/no/1-Introduction/4-techniques-of-ML/README.md index c91be7fdb..53e70d65b 100644 --- a/translations/no/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/no/1-Introduction/4-techniques-of-ML/README.md @@ -1,117 +1,117 @@ # Teknikker for maskinlæring -Prosessen med å bygge, bruke og vedlikeholde maskinlæringsmodeller og dataene de bruker, er svært forskjellig fra mange andre utviklingsarbeidsflyter. I denne leksjonen vil vi avmystifisere prosessen og skissere de viktigste teknikkene du trenger å kjenne til. Du vil: +Prosessen med å bygge, bruke og vedlikeholde maskinlæringsmodeller og dataene de bruker er en svært annerledes prosess enn mange andre utviklingsarbeidsflyter. I denne leksjonen vil vi avmystifisere prosessen og skissere de viktigste teknikkene du trenger å kjenne til. Du vil: - Forstå prosessene som ligger til grunn for maskinlæring på et overordnet nivå. - Utforske grunnleggende konsepter som 'modeller', 'prediksjoner' og 'treningsdata'. -## [Quiz før leksjonen](https://ff-quizzes.netlify.app/en/ml/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -[![ML for nybegynnere - Teknikker for maskinlæring](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for nybegynnere - Teknikker for maskinlæring") +[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning") > 🎥 Klikk på bildet over for en kort video som går gjennom denne leksjonen. ## Introduksjon -På et overordnet nivå består håndverket med å lage maskinlæringsprosesser (ML) av flere steg: +På et overordnet nivå består kunstverket av å lage maskinlæringsprosesser (ML) av flere trinn: -1. **Bestem spørsmålet**. De fleste ML-prosesser starter med å stille et spørsmål som ikke kan besvares med et enkelt betingelsesbasert program eller regelbasert motor. Disse spørsmålene dreier seg ofte om prediksjoner basert på en samling data. -2. **Samle og forbered data**. For å kunne besvare spørsmålet ditt trenger du data. Kvaliteten og, noen ganger, mengden av dataene dine vil avgjøre hvor godt du kan besvare det opprinnelige spørsmålet. Visualisering av data er en viktig del av denne fasen. Denne fasen inkluderer også å dele dataene inn i en trenings- og testgruppe for å bygge en modell. -3. **Velg en treningsmetode**. Avhengig av spørsmålet ditt og naturen til dataene dine, må du velge hvordan du vil trene en modell for best å reflektere dataene og lage nøyaktige prediksjoner basert på dem. Dette er den delen av ML-prosessen som krever spesifikk ekspertise og ofte en betydelig mengde eksperimentering. -4. **Tren modellen**. Ved hjelp av treningsdataene dine bruker du ulike algoritmer for å trene en modell til å gjenkjenne mønstre i dataene. Modellen kan bruke interne vekter som kan justeres for å prioritere visse deler av dataene over andre for å bygge en bedre modell. -5. **Evaluer modellen**. Du bruker data som modellen aldri har sett før (testdataene dine) fra den innsamlede samlingen for å se hvordan modellen presterer. -6. **Parameterjustering**. Basert på modellens ytelse kan du gjenta prosessen med forskjellige parametere eller variabler som styrer oppførselen til algoritmene som brukes til å trene modellen. -7. **Prediksjon**. Bruk nye input for å teste modellens nøyaktighet. +1. **Bestem spørsmålet**. De fleste ML-prosesser starter med å stille et spørsmål som ikke kan besvares av et enkelt betinget program eller et regelbasert system. Disse spørsmålene dreier seg ofte om prediksjoner basert på en samling data. +2. **Samle inn og forberede data**. For å kunne svare på spørsmålet ditt trenger du data. Kvaliteten og av og til mengden av dataene dine vil avgjøre hvor godt du kan svare på det opprinnelige spørsmålet. Visualisering av data er en viktig del av denne fasen. Denne fasen inkluderer også å dele dataene i en trenings- og testgruppe for å bygge en modell. +3. **Velg en treningsmetode**. Avhengig av spørsmålet ditt og hva slags data du har, må du bestemme hvordan du vil trene en modell som best reflekterer dataene dine og gir nøyaktige prediksjoner. Dette er den delen av ML-prosessen som krever spesifikk ekspertise og ofte en betydelig mengde eksperimentering. +4. **Tren modellen**. Ved å bruke treningsdataene dine, vil du bruke ulike algoritmer til å trene en modell til å gjenkjenne mønstre i dataene. Modellen kan bruke interne vekter som kan justeres for å prioritere visse deler av dataene fremfor andre for å bygge en bedre modell. +5. **Evaluer modellen**. Du bruker data som aldri før er sett (testdataene dine) fra det innsamlede datasettet for å se hvordan modellen presterer. +6. **Parameterjustering**. Basert på modellens prestasjon kan du gjøre prosessen på nytt ved å bruke forskjellige parametere eller variabler som styrer adferden til algoritmene som brukes for å trene modellen. +7. **Predikere**. Bruk nye innganger for å teste nøyaktigheten til modellen din. -## Hvilket spørsmål skal du stille? +## Hvilket spørsmål skal stilles -Datamaskiner er spesielt dyktige til å oppdage skjulte mønstre i data. Denne egenskapen er svært nyttig for forskere som har spørsmål om et gitt område som ikke enkelt kan besvares ved å lage en betingelsesbasert regelmotor. Gitt en aktuariell oppgave, for eksempel, kan en dataforsker være i stand til å konstruere håndlagde regler rundt dødeligheten til røykere vs. ikke-røykere. +Datamaskiner er spesielt dyktige til å oppdage skjulte mønstre i data. Denne nytten er svært hjelpsom for forskere som har spørsmål om et gitt domene som ikke lett lar seg besvare ved å lage et regelbasert betinget system. Gitt en aktuaroppgave, for eksempel, kan en dataforsker konstruere håndlagde regler rundt dødeligheten til røykere vs ikke-røykere. -Når mange andre variabler tas med i ligningen, kan imidlertid en ML-modell vise seg å være mer effektiv til å forutsi fremtidige dødelighetsrater basert på tidligere helsehistorikk. Et mer oppløftende eksempel kan være å lage værprediksjoner for april måned på et gitt sted basert på data som inkluderer breddegrad, lengdegrad, klimaendringer, nærhet til havet, mønstre i jetstrømmen og mer. +Når mange andre variabler tas med i regnestykket, kan imidlertid en ML-modell vise seg å være mer effektiv for å forutsi fremtidige dødelighetsrater basert på tidligere helsehistorikk. Et mer lystigere eksempel kan være å lage værvarsler for april måned på et gitt sted basert på data som inkluderer breddegrad, lengdegrad, klimaendringer, nærhet til havet, mønstre i jetstrømmen og mer. -✅ Denne [presentasjonen](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om værmodeller gir et historisk perspektiv på bruk av ML i væranalyse. +✅ Denne [slide-decken](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om værmodeller gir et historisk perspektiv på bruk av ML i væranalyse. ## Oppgaver før bygging -Før du begynner å bygge modellen din, er det flere oppgaver du må fullføre. For å teste spørsmålet ditt og danne en hypotese basert på modellens prediksjoner, må du identifisere og konfigurere flere elementer. +Før du begynner å bygge modellen din, er det flere oppgaver du må fullføre. For å teste spørsmålet ditt og danne en hypotese basert på modellens prediksjoner må du identifisere og konfigurere flere elementer. ### Data -For å kunne besvare spørsmålet ditt med en viss grad av sikkerhet, trenger du en god mengde data av riktig type. Det er to ting du må gjøre på dette tidspunktet: +For å kunne svare på spørsmålet ditt med en viss sikkerhet, trenger du en god mengde data av riktig type. Det er to ting du må gjøre på dette tidspunktet: -- **Samle data**. Med tanke på den forrige leksjonen om rettferdighet i dataanalyse, samle dataene dine med omhu. Vær oppmerksom på kildene til disse dataene, eventuelle iboende skjevheter de kan ha, og dokumenter opprinnelsen. -- **Forbered data**. Det er flere steg i prosessen med databehandling. Du kan trenge å samle data og normalisere dem hvis de kommer fra ulike kilder. Du kan forbedre kvaliteten og mengden av dataene gjennom ulike metoder, som å konvertere strenger til tall (som vi gjør i [Clustering](../../5-Clustering/1-Visualize/README.md)). Du kan også generere nye data basert på de opprinnelige (som vi gjør i [Classification](../../4-Classification/1-Introduction/README.md)). Du kan rense og redigere dataene (som vi gjør før [Web App](../../3-Web-App/README.md)-leksjonen). Til slutt kan det hende du må randomisere og blande dem, avhengig av treningsmetodene dine. +- **Samle inn data**. Med tanke på forrige leksjon om rettferdighet i dataanalyse, samle inn dataene dine med omhu. Vær oppmerksom på kildene til disse dataene, eventuelle iboende skjevheter de kan ha, og dokumenter opprinnelsen. +- **Forbered data**. Det er flere steg i dataforberedelsesprosessen. Du kan trenge å sammenstille data og normalisere dem hvis de kommer fra ulike kilder. Du kan forbedre datakvaliteten og -mengden gjennom ulike metoder som å konvertere tekststrenger til tall (som vi gjør i [Clustering](../../5-Clustering/1-Visualize/README.md)). Du kan også generere nye data basert på originalene (som vi gjør i [Classification](../../4-Classification/1-Introduction/README.md)). Du kan rense og redigere data (som vi vil gjøre før [Web App](../../3-Web-App/README.md)-leksjonen). Til slutt kan det også være nødvendig å randomisere og stokke dataene, avhengig av treningsmetodene dine. -✅ Etter å ha samlet og behandlet dataene dine, ta et øyeblikk for å se om formen deres vil tillate deg å adressere det tiltenkte spørsmålet. Det kan være at dataene ikke vil fungere godt for den gitte oppgaven, som vi oppdager i våre [Clustering](../../5-Clustering/1-Visualize/README.md)-leksjoner! +✅ Etter å ha samlet og behandlet dataene dine, ta et øyeblikk for å se om formen på dataene tillater deg å adressere det tiltenkte spørsmålet. Det kan hende datamaterialet ikke fungerer godt til oppgaven, som vi oppdager i våre [Clustering](../../5-Clustering/1-Visualize/README.md)-leksjoner! -### Funksjoner og mål +### Egenskaper og målvariabel -En [funksjon](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) er en målbar egenskap ved dataene dine. I mange datasett uttrykkes det som en kolonneoverskrift som 'dato', 'størrelse' eller 'farge'. Funksjonsvariabelen din, vanligvis representert som `X` i kode, representerer inputvariabelen som vil bli brukt til å trene modellen. +En [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) er en målbar egenskap ved dataene dine. I mange datasett uttrykkes det som en kolonneoverskrift som 'dato', 'størrelse' eller 'farge'. Egenskapsvariabelen din, vanligvis representert som `X` i kode, er inngangsvariabelen som brukes for å trene en modell. -Et mål er det du prøver å forutsi. Målet, vanligvis representert som `y` i kode, representerer svaret på spørsmålet du prøver å stille til dataene dine: i desember, hvilken **farge** vil gresskar være billigst? I San Francisco, hvilke nabolag vil ha de beste eiendoms**prisene**? Noen ganger refereres målet også til som etikettattributt. +Et mål er noe du prøver å forutsi. Målvariabelen, vanligvis representert som `y` i kode, er svaret på spørsmålet du stiller om dataene dine: i desember, hvilken **farge** vil gresskarene være billigst? I San Francisco, hvilke bydeler vil ha den beste eiendoms**prisen**? Målet blir noen ganger også kalt en etikettattributt. -### Velge funksjonsvariabelen din +### Velge egenskapsvariabelen din -🎓 **Funksjonsvalg og funksjonsekstraksjon** Hvordan vet du hvilken variabel du skal velge når du bygger en modell? Du vil sannsynligvis gå gjennom en prosess med funksjonsvalg eller funksjonsekstraksjon for å velge de riktige variablene for den mest effektive modellen. De er imidlertid ikke det samme: "Funksjonsekstraksjon lager nye funksjoner fra funksjoner av de opprinnelige funksjonene, mens funksjonsvalg returnerer et delsett av funksjonene." ([kilde](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Feature Selection og Feature Extraction** Hvordan vet du hvilken variabel du skal velge når du bygger en modell? Du vil sannsynligvis gå gjennom en prosess med funksjonsutvalg eller funksjonsekstraksjon for å velge de riktige variablene for den mest effektive modellen. De er imidlertid ikke det samme: "Feature extraction skaper nye funksjoner fra funksjoner av de opprinnelige funksjonene, mens feature selection returnerer et delsett av funksjonene." ([kilde](https://wikipedia.org/wiki/Feature_selection)) ### Visualiser dataene dine -En viktig del av verktøysettet til en dataforsker er evnen til å visualisere data ved hjelp av flere utmerkede biblioteker som Seaborn eller MatPlotLib. Å representere dataene dine visuelt kan hjelpe deg med å avdekke skjulte korrelasjoner som du kan utnytte. Visualiseringene dine kan også hjelpe deg med å avdekke skjevheter eller ubalanserte data (som vi oppdager i [Classification](../../4-Classification/2-Classifiers-1/README.md)). +En viktig del av verktøykassen til en dataforsker er muligheten til å visualisere data ved hjelp av flere utmerkede biblioteker som Seaborn eller MatPlotLib. Å representere dataene dine visuelt kan gi deg mulighet til å avdekke skjulte korrelasjoner som du kan dra nytte av. Visualiseringene dine kan også hjelpe deg med å oppdage skjevheter eller ubalanserte data (som vi oppdager i [Classification](../../4-Classification/2-Classifiers-1/README.md)). -### Del opp datasettet ditt +### Del datasettet ditt -Før trening må du dele datasettet ditt inn i to eller flere deler av ulik størrelse som fortsatt representerer dataene godt. +Før treningen må du dele datasettet ditt i to eller flere deler av ulik størrelse som fortsatt representerer dataene godt. -- **Trening**. Denne delen av datasettet tilpasses modellen din for å trene den. Dette settet utgjør majoriteten av det opprinnelige datasettet. +- **Trening**. Denne delen av datasettet tilpasses modellen din for å trene den. Dette settet utgjør mesteparten av det opprinnelige datasettet. - **Testing**. Et testdatasett er en uavhengig gruppe data, ofte hentet fra de opprinnelige dataene, som du bruker for å bekrefte ytelsen til den bygde modellen. -- **Validering**. Et valideringssett er en mindre uavhengig gruppe eksempler som du bruker for å finjustere modellens hyperparametere eller arkitektur for å forbedre modellen. Avhengig av størrelsen på dataene dine og spørsmålet du stiller, trenger du kanskje ikke å bygge dette tredje settet (som vi bemerker i [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). +- **Validering**. Et valideringssett er en mindre uavhengig gruppe eksempler som du bruker for å justere modellens hyperparametere eller arkitektur for å forbedre modellen. Avhengig av datastørrelsen og spørsmålet du stiller, kan det hende du ikke trenger å bygge dette tredje settet (som vi bemerker i [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). ## Bygge en modell -Ved hjelp av treningsdataene dine er målet ditt å bygge en modell, eller en statistisk representasjon av dataene dine, ved hjelp av ulike algoritmer for å **trene** den. Å trene en modell eksponerer den for data og lar den gjøre antakelser om oppdagede mønstre, validere dem og akseptere eller avvise dem. +Ved å bruke treningsdataene dine, er målet ditt å bygge en modell, eller en statistisk representasjon av dataene dine, ved å bruke ulike algoritmer for å **trene** den. Å trene en modell eksponerer den for data og lar den gjøre antakelser om oppfattede mønstre den oppdager, validerer og godtar eller forkaster. -### Bestem treningsmetoden +### Velg en treningsmetode -Avhengig av spørsmålet ditt og naturen til dataene dine, vil du velge en metode for å trene dem. Ved å gå gjennom [Scikit-learn's dokumentasjon](https://scikit-learn.org/stable/user_guide.html) - som vi bruker i dette kurset - kan du utforske mange måter å trene en modell på. Avhengig av erfaringen din, kan det hende du må prøve flere forskjellige metoder for å bygge den beste modellen. Du vil sannsynligvis gå gjennom en prosess der dataforskere evaluerer ytelsen til en modell ved å mate den med ukjente data, sjekke for nøyaktighet, skjevhet og andre kvalitetsreduserende problemer, og velge den mest passende treningsmetoden for oppgaven. +Avhengig av spørsmålet ditt og dataenes natur, vil du velge en metode for å trene den. Når du går gjennom [Scikit-learns dokumentasjon](https://scikit-learn.org/stable/user_guide.html) – som vi bruker i dette kurset – kan du utforske mange måter å trene en modell på. Avhengig av erfaringen din kan det hende du må prøve flere ulike metoder for å bygge den beste modellen. Du vil sannsynligvis gå gjennom en prosess hvor dataforskere evaluerer ytelsen til en modell ved å mate den med ukjente data, sjekke for nøyaktighet, skjevhet og andre kvalitetsreduserende problemer, og velge den mest passende treningsmetoden for oppgaven som skal utføres. ### Tren en modell -Med treningsdataene dine er du klar til å 'tilpasse' dem for å lage en modell. Du vil legge merke til at i mange ML-biblioteker finner du koden 'model.fit' - det er på dette tidspunktet du sender inn funksjonsvariabelen din som en matrise av verdier (vanligvis 'X') og en målvariabel (vanligvis 'y'). +Bevæpnet med treningsdataene dine er du klar til å 'tilpasse' den for å lage en modell. Du vil legge merke til at i mange ML-biblioteker finner du koden 'model.fit' – det er på dette tidspunktet du sender inn egenskapsvariabelen som en matrise av verdier (vanligvis 'X') og målvariabelen (vanligvis 'y'). ### Evaluer modellen -Når treningsprosessen er fullført (det kan ta mange iterasjoner, eller 'epoker', å trene en stor modell), vil du kunne evaluere modellens kvalitet ved å bruke testdata for å måle ytelsen. Disse dataene er et delsett av de opprinnelige dataene som modellen ikke tidligere har analysert. Du kan skrive ut en tabell med metrikker om modellens kvalitet. +Når treningsprosessen er fullført (det kan ta mange iterasjoner, eller 'epoker', å trene en stor modell), vil du kunne evaluere modellens kvalitet ved å bruke testdata for å måle ytelsen. Disse dataene er et delsett av de opprinnelige dataene som modellen ikke har analysert tidligere. Du kan skrive ut en tabell med målinger om modellens kvalitet. 🎓 **Modelltilpasning** -I sammenheng med maskinlæring refererer modelltilpasning til nøyaktigheten av modellens underliggende funksjon når den forsøker å analysere data den ikke er kjent med. +I sammenheng med maskinlæring refererer modelltilpasning til nøyaktigheten til modellens underliggende funksjon mens den forsøker å analysere data den ikke kjenner til. -🎓 **Undertilpasning** og **overtilpasning** er vanlige problemer som reduserer modellens kvalitet, ettersom modellen enten tilpasser seg for dårlig eller for godt. Dette fører til at modellen lager prediksjoner som enten er for tett knyttet til eller for løst knyttet til treningsdataene. En overtilpasset modell forutsier treningsdataene for godt fordi den har lært detaljene og støyen i dataene for godt. En undertilpasset modell er ikke nøyaktig, da den verken kan analysere treningsdataene eller data den ikke har 'sett' på en korrekt måte. +🎓 **Underfitting** og **overfitting** er vanlige problemer som forringer modellens kvalitet, da modellen enten passer for dårlig eller for godt. Dette gjør at modellen gjør prediksjoner som enten er for nært knyttet eller for løst knyttet til treningsdataene. En overfit modell predikerer treningsdataene for godt fordi den har lært detaljene og støyen i dataene for godt. En underfit modell er ikke nøyaktig fordi den verken kan analysere treningsdataene sine nøyaktig eller data den ikke har 'sett' før. -![overtilpasset modell](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![overfitting model](../../../../translated_images/no/overfitting.1c132d92bfd93cb6.webp) > Infografikk av [Jen Looper](https://twitter.com/jenlooper) ## Parameterjustering -Når den første treningen er fullført, observer kvaliteten på modellen og vurder å forbedre den ved å justere dens 'hyperparametere'. Les mer om prosessen [i dokumentasjonen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +Når den innledende treningen er fullført, observer modellens kvalitet og vurder å forbedre den ved å finjustere dens 'hyperparametere'. Les mer om prosessen [i dokumentasjonen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). ## Prediksjon -Dette er øyeblikket hvor du kan bruke helt nye data for å teste modellens nøyaktighet. I en 'anvendt' ML-setting, der du bygger nettressurser for å bruke modellen i produksjon, kan denne prosessen innebære å samle brukerinput (for eksempel et knappetrykk) for å sette en variabel og sende den til modellen for inferens eller evaluering. +Dette er øyeblikket hvor du kan bruke helt nye data for å teste modellens nøyaktighet. I et 'anvendt' ML-miljø, hvor du bygger webressurser for å bruke modellen i produksjon, kan denne prosessen innebære å samle inn brukerinngang (for eksempel et knappetrykk) for å sette en variabel og sende den til modellen for inferens eller evaluering. -I disse leksjonene vil du oppdage hvordan du bruker disse stegene til å forberede, bygge, teste, evaluere og forutsi - alle oppgavene til en dataforsker og mer, mens du utvikler deg på reisen til å bli en 'full stack' ML-ingeniør. +I disse leksjonene vil du oppdage hvordan du bruker disse trinnene for å forberede, bygge, teste, evaluere og predikere – alle bevegelsene til en dataforsker og mer, etter hvert som du utvikler deg til å bli en 'full stack' ML-ingeniør. --- ## 🚀Utfordring -Lag et flytskjema som reflekterer stegene til en ML-praktiker. Hvor ser du deg selv akkurat nå i prosessen? Hvor tror du at du vil møte vanskeligheter? Hva virker enkelt for deg? +Lag et flytskjema som gjenspeiler trinnene til en ML-utøver. Hvor ser du deg selv akkurat nå i prosessen? Hvor tror du du vil møte vanskeligheter? Hva virker lett for deg? -## [Quiz etter leksjonen](https://ff-quizzes.netlify.app/en/ml/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Gjennomgang og selvstudium +## Gjennomgang & Selvstudium -Søk på nettet etter intervjuer med dataforskere som diskuterer sitt daglige arbeid. Her er [et](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +Søk på nettet etter intervjuer med dataforskere som diskuterer deres daglige arbeid. Her er [et](https://www.youtube.com/watch?v=Z3IjgbbCEfs). ## Oppgave @@ -119,5 +119,7 @@ Søk på nettet etter intervjuer med dataforskere som diskuterer sitt daglige ar --- + **Ansvarsfraskrivelse**: -Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi tilstreber nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. \ No newline at end of file +Dette dokumentet er oversatt ved hjelp av AI-oversettingstjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på dets opprinnelige språk skal betraktes som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. + \ No newline at end of file diff --git a/translations/no/2-Regression/3-Linear/README.md b/translations/no/2-Regression/3-Linear/README.md index c239dbb0b..8de8ba6f2 100644 --- a/translations/no/2-Regression/3-Linear/README.md +++ b/translations/no/2-Regression/3-Linear/README.md @@ -1,114 +1,113 @@ -# Bygg en regresjonsmodell med Scikit-learn: regresjon på fire måter +# Lag en regresjonsmodell med Scikit-learn: regresjon på fire måter ## Nybegynnermerknad -Lineær regresjon brukes når vi ønsker å forutsi en **numerisk verdi** (for eksempel boligpris, temperatur eller salg). -Den fungerer ved å finne en rett linje som best representerer forholdet mellom inngangsfunksjonene og utgangen. +Lineær regresjon brukes når vi ønsker å forutsi en **numerisk verdi** (for eksempel huspris, temperatur eller salg). +Den fungerer ved å finne en rett linje som best representerer forholdet mellom inngangsfunksjoner og utdata. I denne leksjonen fokuserer vi på å forstå konseptet før vi utforsker mer avanserte regresjonsteknikker. -![Infografikk lineær vs polynomisk regresjon](../../../../translated_images/no/linear-polynomial.5523c7cb6576ccab.webp) +![Linear vs polynomial regression infographic](../../../../translated_images/no/linear-polynomial.5523c7cb6576ccab.webp) > Infografikk av [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Pre-forelesningsquiz](https://ff-quizzes.netlify.app/en/ml/) +## [For-forelesningsquiz](https://ff-quizzes.netlify.app/en/ml/) > ### [Denne leksjonen er tilgjengelig på R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### Introduksjon -Så langt har du utforsket hva regresjon er med eksempeldatahentet fra gresskarprisingsdatasettet som vi skal bruke gjennom denne leksjonen. Du har også visualisert det ved hjelp av Matplotlib. +Så langt har du utforsket hva regresjon er med eksemplardata hentet fra gresskarprisdataene som vi skal bruke gjennom denne leksjonen. Du har også visualisert det ved hjelp av Matplotlib. -Nå er du klar til å gå dypere inn i regresjon for ML. Mens visualisering hjelper deg med å forstå data, kommer den virkelige styrken i maskinlæring fra _trening av modeller_. Modeller trenes på historiske data for automatisk å fange dataavhengigheter, og de lar deg forutsi utfall for nye data som modellen ikke har sett før. +Nå er du klar til å fordype deg mer i regresjon for maskinlæring. Mens visualisering gjør at du kan forstå data, kommer den virkelige kraften i maskinlæring fra _trening av modeller_. Modeller trenes på historiske data for automatisk å fange avhengigheter i dataene, og de lar deg forutsi utfall for nye data, som modellen ikke har sett tidligere. -I denne leksjonen vil du lære mer om to typer regresjon: _grunnleggende lineær regresjon_ og _polynomisk regresjon_, sammen med noe av matematikken som ligger til grunn for disse teknikkene. Disse modellene vil tillate oss å forutsi gresskarpriser avhengig av ulike inngangsdata. +I denne leksjonen vil du lære mer om to typer regresjon: _grunnleggende lineær regresjon_ og _polynomregresjon_, sammen med noe av matematikken som ligger bak disse teknikkene. Disse modellene vil tillate oss å forutsi gresskarpriser avhengig av ulike inngangsdata. [![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression") > 🎥 Klikk på bildet over for en kort videooversikt over lineær regresjon. -> Gjennom denne lærestien antar vi minimal matematikkunnskap, og søker å gjøre den tilgjengelig for studenter fra andre fagfelt, så se etter notater, 🧮 markeringer, diagrammer og andre læringsverktøy for å lette forståelsen. +> Gjennom hele dette pensumet antar vi minimal kunnskap om matematikk, og søker å gjøre det tilgjengelig for studenter fra andre fagfelt, så følg med på notater, 🧮 framhevinger, diagrammer og andre læringsverktøy for å hjelpe forståelsen. ### Forutsetning -Du bør nå være kjent med strukturen til gresskardataene vi undersøker. Du finner dem ferdig lastet og forhåndsrenset i denne leksjonens _notebook.ipynb_-fil. I filen vises gresskarprisen per bushel i en ny datastruktur. Sørg for at du kan kjøre disse notatbøkene i miljøer i Visual Studio Code. +Du bør nå være kjent med strukturen til gresskardataene vi undersøker. Du finner dem forhåndslastet og forhåndsrenset i denne leksjonens _notebook.ipynb_-fil. I filen vises gresskarprisen per bushel i en ny data frame. Sørg for at du kan kjøre disse notebookene i kjerner i Visual Studio Code. ### Forberedelse -Som en påminnelse lastes disse dataene inn for at du skal kunne stille spørsmål til dem. +Som en påminnelse laster du inn disse dataene for å kunne stille spørsmål til dem. - Når er det beste tidspunktet å kjøpe gresskar? -- Hvilken pris kan jeg forvente for en kasse med miniatyrgresskar? -- Bør jeg kjøpe dem i halvbusselkurver, eller i 1 1/9 bushel-esker? +- Hvilken pris kan jeg forvente for en kasse med minigresskar? +- Bør jeg kjøpe dem i halvbushenskurver eller i 1 1/9-bushel-kasser? La oss grave videre i disse dataene. -I forrige leksjon opprettet du en Pandas-dataramme og fylte den med deler av det originale datasettet, og standardiserte prisene per bushel. Ved å gjøre det fikk du imidlertid bare omtrent 400 datapunkter og kun for høstmånedene. +I forrige leksjon laget du en Pandas data frame og fylte den med deler av det originale datasettet, og standardiserte prisene etter bushel. Ved å gjøre det, samlet du imidlertid bare inn omtrent 400 datapunkter og bare for høstmånedene. -Ta en titt på dataene vi har lastet inn i denne leksjonens medfølgende notatbok. Dataene er forhåndslastet, og det lages et første spredningsdiagram for å vise månedens data. Kanskje vi kan få litt mer detalj rundt datanaturen ved å rense det mer. +Ta en titt på dataene vi har forhåndslastet i denne leksjonens tilhørende notebook. Dataene er forhåndslastet og en innledende spredningsgraf er tegnet for å vise månedsdata. Kanskje vi kan få mer detaljert innsikt i dataenes natur ved å rense det mer. ## En lineær regresjonslinje -Som du lærte i leksjon 1, er målet med en lineær regresjonsøvelse å kunne plotte en linje for å: +Som du lærte i leksjon 1, er målet med en lineær regresjonsøvelse å kunne tegne en linje som: -- **Vise variabelrelasjoner**. Vise forholdet mellom variabler -- **Lage spådommer**. Lage nøyaktige spådommer om hvor et nytt datapunkt vil falle i forhold til den linjen. - -Det er typisk med **Minimum kvadraters regresjon** å tegne denne typen linje. Begrepet "Minimum kvadraters" refererer til prosessen med å minimere den totale feilen i modellen vår. For hvert datapunkt måler vi den vertikale avstanden (kalt residual) mellom det faktiske punktet og vår regresjonslinje. +- **Viser variabelrelasjoner**. Viser forholdet mellom variabler +- **Gjøre spådommer**. Lage nøyaktige spådommer om hvor et nytt datapunkt vil falle i forhold til den linjen. -Vi kvadrerer disse avstandene av to hovedgrunner: +Det er typisk for **minste kvadraters regresjon** å tegne denne typen linje. Begrepet "Minste kvadraters" refererer til prosessen med å minimere den totale feilen i modellen vår. For hvert datapunkt måler vi den vertikale distansen (kalt en residual) mellom det faktiske punktet og vår regresjonslinje. + +Vi kvadrerer disse distansene av to hovedårsaker: 1. **Størrelse over retning:** Vi ønsker å behandle en feil på -5 likt som en feil på +5. Kvadrering gjør alle verdier positive. 2. **Straffe uteliggere:** Kvadrering gir større vekt til større feil, og tvinger linjen til å holde seg nærmere punkter som er langt unna. -Vi legger deretter sammen alle disse kvadrerte verdiene. Målet vårt er å finne den spesifikke linjen der denne endelige summen er minst (den minste mulige verdien)—derav navnet "Minimum kvadraters". +Vi legger så sammen alle disse kvadrerte verdiene. Målet vårt er å finne den spesifikke linjen hvor denne endelige summen er minst mulig (den minste mulige verdien) — derav navnet "Minste kvadraters". > **🧮 Vis meg matematikken** > -> Denne linjen, kalt _beste tilpassede linje_, kan uttrykkes ved [en ligning](https://en.wikipedia.org/wiki/Simple_linear_regression): +> Denne linjen, kalt _beste tilpasningslinje_, kan uttrykkes med [en ligning](https://en.wikipedia.org/wiki/Simple_linear_regression): > > ``` > Y = a + bX > ``` > -> `X` er 'den forklarende variabelen'. `Y` er 'den avhengige variabelen'. Helningen til linjen er `b` og `a` er y-aksens skjæringspunkt, som refererer til verdien av `Y` når `X = 0`. +> `X` er 'forklaringsvariabelen'. `Y` er 'avhengig variabel'. Stigningstallet til linjen er `b` og `a` er y-aksens skjæringspunkt, som viser verdien av `Y` når `X = 0`. > ->![beregn helningen](../../../../translated_images/no/slope.f3c9d5910ddbfcf9.webp) +>![beregn stigningstallet](../../../../translated_images/no/slope.f3c9d5910ddbfcf9.webp) > -> Først beregner vi helningen `b`. Infografikk av [Jen Looper](https://twitter.com/jenlooper) +> Først beregner man stigningstallet `b`. Infografikk av [Jen Looper](https://twitter.com/jenlooper) > -> Med andre ord, og med referanse til vår originale gresskardataspørsmål: "forutsi prisen på et gresskar per bushel etter måned", ville `X` referere til prisen og `Y` til salgs måneden. +> Med andre ord, og med henvisning til det opprinnelige spørsmålet om gresskardataene: "forutsi prisen på et gresskar per bushel per måned", vil `X` referere til prisen og `Y` vil referere til salgsmåneden. > >![fullfør ligningen](../../../../translated_images/no/calculation.a209813050a1ddb1.webp) > > Beregn verdien av Y. Hvis du betaler rundt $4, må det være april! Infografikk av [Jen Looper](https://twitter.com/jenlooper) > -> Matematikken som beregner linjen må vise helningen til linjen, som også avhenger av skjæringspunktet, altså hvor `Y` befinner seg når `X = 0`. +> Matematikk som beregner linjen, må vise stigningstallet, som også er avhengig av skjæringspunktet, eller hvor `Y` er når `X = 0`. > -> Du kan se metoden for beregning av disse verdiene på [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) sin nettside. Besøk også [denne Minimum kvadraters kalkulatoren](https://www.mathsisfun.com/data/least-squares-calculator.html) for å se hvordan tallverdiene påvirker linjen. +> Du kan observere metoden for beregning av disse verdiene på nettsiden [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Besøk også [denne minste kvadraters-kalkulatoren](https://www.mathsisfun.com/data/least-squares-calculator.html) for å se hvordan tallverdier påvirker linjen. ## Korrelasjon -Et siste begrep å forstå er **Korrelasjonskoeffisienten** mellom gitte X- og Y-variabler. Ved bruk av et spredningsdiagram kan du raskt visualisere denne koeffisienten. Et plot med datapunkter spredt langs en fin linje har høy korrelasjon, mens et plot med datapunkter spredt overalt mellom X og Y har lav korrelasjon. +Et annet begrep å forstå er **korrelasjonskoeffisienten** mellom gitte X- og Y-variabler. Ved hjelp av et spredningsdiagram kan du raskt visualisere denne koeffisienten. Et plott hvor datapunktene er spredt langs en ryddig linje har høy korrelasjon, men et plott hvor datapunktene er spredt overalt mellom X og Y har lav korrelasjon. -En god lineær regresjonsmodell vil være en som har høy (nærmere 1 enn 0) korrelasjonskoeffisient ved bruk av Minimum kvadraters regresjonsmetode med en regresjonslinje. +En god lineær regresjonsmodell vil ha en høy (nærmere 1 enn 0) korrelasjonskoeffisient ved bruk av minste kvadraters regresjonsmetode med en regresjonslinje. -✅ Kjør notatboken som følger denne leksjonen og se på spredningsdiagrammet mellom måned og pris. Ser dataene som assosierer måned til pris for gresskarsalg ut til å ha høy eller lav korrelasjon, i henhold til din visuelle tolkning av spredningsplottet? Endrer det seg om du bruker en mer finmasket måling i stedet for `Month`, f.eks. *dag på året* (altså antall dager siden starten på året)? +✅ Kjør notebooken som følger denne leksjonen og se på spredningsdiagrammet for måned mot pris. Virker dataene som assosierer måned og pris for gresskarsalg som om de har høy eller lav korrelasjon, ifølge din visuelle tolkning av spredningsdiagrammet? Endres dette hvis du bruker en mer granulær måling i stedet for `Month`, f.eks. *dag i året* (dvs. antall dager siden begynnelsen av året)? -I koden nedenfor antar vi at vi har renset dataene, og fått en dataramme kalt `new_pumpkins`, som ligner på følgende: +I koden nedenfor vil vi anta at vi har ryddet dataene, og fått en data frame kalt `new_pumpkins`, lik følgende: -ID | Måned | DagPåÅret | Variasjon | By | Pakke | Lav Pris | Høy Pris | Pris ----|-------|-----------|-----------|----|-------|----------|----------|----- -70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonger | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonger | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonger | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonger | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonger | 15.0 | 15.0 | 13.636364 +ID | Måned | dagIÅret | Variant | By | Pakke | Lav pris | Høy pris | Pris +---|-------|-----------|---------|------|---------|-----------|------------|------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel-kartong | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel-kartong | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel-kartong | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel-kartong | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel-kartong | 15.0 | 15.0 | 13.636364 -> Koden for å rense dataene er tilgjengelig i [`notebook.ipynb`](notebook.ipynb). Vi har utført de samme rensetrinnene som i forrige leksjon, og har beregnet `DayOfYear`-kolonnen med følgende uttrykk: +> Koden for å rense dataene er tilgjengelig i [`notebook.ipynb`](notebook.ipynb). Vi har utført de samme rengjøringsstegene som i forrige leksjon, og har beregnet kolonnen `DayOfYear` med følgende uttrykk: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` - -Nå som du har forstått matematikken bak lineær regresjon, la oss lage en regresjonsmodell for å se om vi kan forutsi hvilken pakke gresskar som vil ha de beste prisene. Noen som kjøper gresskar til en høytidssesong kanskje vil ha denne informasjonen for å kunne optimalisere sine gresskarpakkeinnkjøp til sesongen. +Nå som du har forståelse av matematikken bak lineær regresjon, la oss lage en regresjonsmodell for å se om vi kan forutsi hvilken pakke med gresskar som vil ha de beste prisene. Noen som kjøper gresskar til en gresskarutstilling til høytiden, kan ønske denne informasjonen for å kunne optimalisere kjøp av gresskarpakker til utstillingen. ## På jakt etter korrelasjon @@ -116,23 +115,22 @@ Nå som du har forstått matematikken bak lineær regresjon, la oss lage en regr > 🎥 Klikk på bildet over for en kort videooversikt over korrelasjon. -Fra forrige leksjon har du sannsynligvis sett at gjennomsnittsprisen for ulike måneder ser slik ut: +Fra forrige leksjon har du sannsynligvis sett at gjennomsnittsprisen for forskjellige måneder ser slik ut: -Gjennomsnittspris per måned +Average price by month -Dette antyder at det bør finnes en viss korrelasjon, og vi kan prøve å trene en lineær regresjonsmodell for å forutsi forholdet mellom `Month` og `Price`, eller mellom `DayOfYear` og `Price`. Her er spredningsdiagrammet som viser sistnevnte forhold: +Dette antyder at det bør være noe korrelasjon, og vi kan prøve å trene en lineær regresjonsmodell for å forutsi forholdet mellom `Month` og `Price`, eller mellom `DayOfYear` og `Price`. Her er et spredningsdiagram som viser det siste forholdet: -Spredningsdiagram av pris vs. dag på året +Scatter plot of Price vs. Day of Year -La oss se om det er korrelasjon ved å bruke `corr`-funksjonen: +La oss se om det er korrelasjon med funksjonen `corr`: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` - -Det ser ut som korrelasjonen er ganske liten, -0.15 for `Month` og -0.17 for `DayOfMonth`, men det kan finnes en annen viktig sammenheng. Det ser ut til å være forskjellige klynger av priser som tilsvarer ulike gresskartyper. For å bekrefte denne hypotesen, la oss plotte hver gresskarkategori med forskjellig farge. Ved å sende med `ax`-parameteren til `scatter` plottefunksjonen kan vi plotte alle punktene i samme graf: +Det ser ut til at korrelasjonen er ganske liten, -0,15 for `Month` og -0,17 for `DayOfYear`, men det kan være et annet viktig forhold. Det ser ut som det finnes forskjellige klynger av priser som tilsvarer ulike gresskarvarianter. For å bekrefte denne hypotesen, la oss plotte hver gresskarkategori med ulik farge. Ved å sende en `ax`-parameter til `scatter`-plottefunksjonen kan vi plotte alle punkter på samme graf: ```python ax=None @@ -142,43 +140,42 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -Spredningsdiagram av pris vs. dag på året med farge +Scatter plot of Price vs. Day of Year -Vår undersøkelse antyder at variasjon har større effekt på den totale prisen enn selve salgsdatoen. Vi kan se dette med et stolpediagram: +Undersøkelsen vår antyder at variant har mer effekt på totalprisen enn den faktiske salgstidspunktet. Vi kan se dette med et stolpediagram: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` -Stolpediagram av pris vs variasjon +Bar graph of price vs variety -La oss fokusere for øyeblikket kun på én gresskartype, 'pie type', og se hvilken effekt datoen har på prisen: +La oss fokusere et øyeblikk kun på én gresskarvariant, 'pie type', og se hvilken effekt datoen har på pris: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -Spredningsdiagram av pris vs. dag på året for pie pumpkins +Scatter plot of Price vs. Day of Year -Hvis vi nå beregner korrelasjonen mellom `Price` og `DayOfYear` ved bruk av `corr`-funksjonen, får vi omtrent `-0.27` – noe som betyr at det gir mening å trene en prediksjonsmodell. +Hvis vi nå beregner korrelasjonen mellom `Price` og `DayOfYear` med funksjonen `corr`, vil vi få noe rundt `-0,27` — som betyr at det gir mening å trene en prediksjonsmodell. -> Før du trener en lineær regresjonsmodell, er det viktig å sørge for at dataene våre er rene. Lineær regresjon fungerer ikke godt med manglende verdier, så det er lurt å kvitte seg med tomme celler: +> Før vi trener en lineær regresjonsmodell, er det viktig å sikre at dataene våre er rene. Lineær regresjon fungerer ikke godt med manglende verdier, derfor gir det mening å kvitte seg med alle tomme celler: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` - -En annen tilnærming kan være å fylle disse tomme verdiene med gjennomsnittsverdier fra den tilsvarende kolonnen. +En annen tilnærming er å fylle disse tomme verdiene med gjennomsnittsverdier fra tilsvarende kolonne. ## Enkel lineær regresjon [![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn") -> 🎥 Klikk på bildet over for en kort videooversikt over lineær og polynomisk regresjon. +> 🎥 Klikk på bildet over for en kort videooversikt over lineær- og polynomregresjon. -For å trene vår lineære regresjonsmodell, bruker vi **Scikit-learn** biblioteket. +For å trene vår lineære regresjonsmodell vil vi bruke **Scikit-learn**-biblioteket. ```python from sklearn.linear_model import LinearRegression @@ -186,34 +183,31 @@ from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` - -Vi begynner med å separere inngangsverdiene (funksjoner) og forventet utgang (etikett) i separate numpy-arrays: +Vi starter med å skille inngangsverdier (egenskaper) og forventet utdata (etikett) i separate numpy-arrays: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` +> Merk at vi måtte bruke `reshape` på inngangsdataene for at lineær regresjonspakken skulle forstå det riktig. Lineær regresjon forventer et 2D-array som input, hvor hver rad i arrayet tilsvarer en vektor med inndata-egenskaper. I vårt tilfelle, siden vi bare har én input, trenger vi et array med form N×1, hvor N er datasettets størrelse. -> Merk at vi måtte utføre `reshape` på inngangsdataene for at Linear Regression-pakken skulle forstå dem riktig. Lineær regresjon forventer et 2D-array som input, hvor hver rad i arrayet tilsvarer en vektor av inngangsfunksjoner. I vårt tilfelle, siden vi bare har én inngang, trenger vi et array med form N×1, hvor N er dataset-størrelsen. - -Deretter må vi dele dataene i trenings- og testdatasett, slik at vi kan validere modellen vår etter trening: +Deretter må vi dele opp dataene i trenings- og testsett, slik at vi kan validere modellen etter trening: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` - -Til slutt tar det bare to linjer med kode å trene den faktiske lineære regresjonsmodellen. Vi definerer `LinearRegression`-objektet, og passer det til dataene våre ved hjelp av `fit`-metoden: +Til slutt tar det bare to linjer å trene den faktiske lineære regresjonsmodellen. Vi definerer `LinearRegression`-objektet, og passer det på dataene våre med metoden `fit`: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -`LinearRegression`-objektet etter at vi har "fit"-tet det inneholder alle koeffisientene til regresjonen, som kan aksesseres ved hjelp av `.coef_`-egenskapen. I vårt tilfelle er det bare én koeffisient, som skal være rundt `-0.017`. Det betyr at prisene ser ut til å synke litt med tiden, men ikke for mye, omtrent 2 cent per dag. Vi kan også aksessere skjæringspunktet for regresjonen med Y-aksen ved å bruke `lin_reg.intercept_` - det vil være rundt `21` i vårt tilfelle, noe som indikerer prisen i begynnelsen av året. +Objektet `LinearRegression` etter å ha blitt tilpasset inneholder alle koeffisientene til regresjonen, som kan nås gjennom `.coef_`-egenskapen. I vårt tilfelle er det bare én koeffisient, som bør være rundt `-0.017`. Det betyr at prisene ser ut til å synke litt med tiden, men ikke for mye, rundt 2 cent per dag. Vi kan også få tilgang til skjæringspunktet til regresjonen med Y-aksen ved å bruke `lin_reg.intercept_` - det vil være rundt `21` i vårt tilfelle, noe som indikerer prisen i begynnelsen av året. -For å se hvor nøyaktig modellen vår er, kan vi forutsi priser på en testdatasett, og deretter måle hvor nær våre prediksjoner er de forventede verdiene. Dette kan gjøres ved hjelp av rotmiddelkvadratfeil (RMSE) metrikk, som er roten av gjennomsnittet av alle kvadrerte forskjeller mellom forventet og forutsagt verdi. +For å se hvor nøyaktig modellen vår er, kan vi forutsi priser på et testdatasett, og deretter måle hvor nær våre prediksjoner er til forventede verdier. Dette kan gjøres ved hjelp av roten av gjennomsnittet av kvadrerte feil (RMSE), som er roten av gjennomsnittet av alle kvadrerte forskjeller mellom forventet og forutsagt verdi. ```python pred = lin_reg.predict(X_test) @@ -222,15 +216,16 @@ rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` -Feilen vår ser ut til å være rundt 2 poeng, som er ~17%. Ikke så bra. En annen indikator på modellkvalitet er **bestemmelseskoeffisienten**, som kan oppnås slik: +Feilen vår ser ut til å være rundt 2 poeng, noe som er ~17 %. Ikke så bra. En annen indikator på modellkvalitet er **determinajon koeffisienten**, som kan oppnås slik: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -Hvis verdien er 0, betyr det at modellen ikke tar hensyn til inngangsdata, og oppfører seg som den *verste lineære prediktoren*, som rett og slett er et gjennomsnitt av resultatet. Verdien 1 betyr at vi kan perfekt forutsi alle forventede utganger. I vårt tilfelle er koeffisienten rundt 0.06, som er ganske lavt. -Vi kan også plotte testdata sammen med regresjonslinjen for bedre å se hvordan regresjonen fungerer i vårt tilfelle: +Hvis verdien er 0, betyr det at modellen ikke tar hensyn til inndataene, og fungerer som den *verst mulige lineære prediktoren*, som enkelt er gjennomsnittsverdien av resultatet. En verdi på 1 betyr at vi kan perfekt forutsi alle forventede utganger. I vårt tilfelle er koeffisienten rundt 0,06, noe som er ganske lavt. + +Vi kan også plotte testdata sammen med regresjonslinjen for å bedre se hvordan regresjonen fungerer i vårt tilfelle: ```python plt.scatter(X_test,y_test) @@ -239,19 +234,19 @@ plt.plot(X_test,pred) Linear regression -## Polynomregresjon +## Polynomisk regresjon -En annen type lineær regresjon er polynomregresjon. Selv om det noen ganger er et lineært forhold mellom variabler - jo større gresskaret er i volum, desto høyere pris - kan disse forholdene noen ganger ikke plottes som et plan eller en rett linje. +En annen type lineær regresjon er polynomisk regresjon. Selv om det noen ganger eksisterer et lineært forhold mellom variabler - jo større gresskaret er i volum, jo høyere pris - kan det noen ganger hende at disse forholdene ikke kan plottes som et plan eller en rett linje. -✅ Her er [noen flere eksempler](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data som kan bruke polynomregresjon. +✅ Her er [noen flere eksempler](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data som kan bruke polynomisk regresjon -Ta en ny titt på forholdet mellom dato og pris. Virker dette spredningsplottet som det nødvendigvis bør analyseres med en rett linje? Kan ikke prisene fluktuere? I så fall kan du prøve polynomregresjon. +Ta en titt på forholdet mellom Dato og Pris igjen. Virker det som om denne spredningsdiagrammet nødvendigvis bør analyseres med en rett linje? Kan ikke priser variere? I dette tilfellet kan du prøve polynomisk regresjon. -✅ Polynomuttrykk er matematiske uttrykk som kan bestå av én eller flere variabler og koeffisienter. +✅ Polynom er matematiske uttrykk som kan bestå av ett eller flere variabler og koeffisienter -Polynomregresjon lager en buet linje for bedre å tilpasse ikke-lineære data. I vårt tilfelle, hvis vi inkluderer en kvadratert `DayOfYear`-variabel i inputdataene, bør vi kunne tilpasse dataene våre med en parabolsk kurve som har et minimum på et bestemt punkt i løpet av året. +Polynomisk regresjon lager en kurvet linje for bedre å tilpasse ikke-lineære data. I vårt tilfelle, hvis vi inkluderer en kvadratisk `DayOfYear`-variabel i inndataene, bør vi kunne tilpasse dataene våre med en parabolsk kurve, som vil ha et minimum på et visst punkt i løpet av året. -Scikit-learn inkluderer en nyttig [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) for å kombinere forskjellige steg i databehandlingen. En **pipeline** er en kjede av **estimatorer**. I vårt tilfelle lager vi en pipeline som først legger til polynomfunksjoner i modellen, og deretter trener regresjonen: +Scikit-learn inkluderer en hjelpsom [pipeline-API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) for å kombinere forskjellige trinn i databehandlingen. En **pipeline** er en kjede av **estimators**. I vårt tilfelle vil vi lage en pipeline som først legger til polynomiske trekk ved modellen vår, og så trener regresjonen: ```python from sklearn.preprocessing import PolynomialFeatures @@ -262,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -Å bruke `PolynomialFeatures(2)` betyr at vi vil inkludere alle polynomer av andre grad fra inputdataene. I vårt tilfelle betyr det bare `DayOfYear`2, men gitt to inputvariabler X og Y, vil dette legge til X2, XY og Y2. Vi kan også bruke polynomer av høyere grad om vi ønsker. +Bruk av `PolynomialFeatures(2)` betyr at vi vil inkludere alle polynomer av andre grad fra inndataene. I vårt tilfelle vil det bare bety `DayOfYear`2, men gitt to inndatavariabler X og Y, vil dette legge til X2, XY og Y2. Vi kan også bruke polynomer av høyere grad hvis vi ønsker det. + +Pipelines kan brukes på samme måte som det opprinnelige `LinearRegression`-objektet, dvs. vi kan `fit`e pipeline, og deretter bruke `predict` for å få prediksjonsresultater: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +For å plotte den glatte tilnærmingskurven, bruker vi `np.linspace` for å lage et jevnt intervall av inputverdier, i stedet for å plotte direkte på de uordnede testdataene (som ville produsere en sikksakk-linje): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` -Pipelines kan brukes på samme måte som det originale `LinearRegression`-objektet, altså kan vi `fit` pipe-linen, og deretter bruke `predict` for å få prediksjonsresultatene. Her er grafen som viser testdataene og tilnærmingskurven: +Her er grafen som viser testdataene og tilnærmingskurven: Polynomial regression -Ved å bruke polynomregresjon kan vi få litt lavere MSE og høyere bestemmelseskoeffisient, men ikke signifikant. Vi må ta hensyn til andre funksjoner! +Ved å bruke polynomisk regresjon kan vi få litt lavere RMSE og høyere determinajon, men ikke betydelig. Vi må ta hensyn til andre trekk! -> Du kan se at de minimale gresskarprisene observeres en plass rundt Halloween. Hvordan kan du forklare dette? +> Du kan se at de laveste prisene på gresskar observeres en gang rundt Halloween. Hvordan kan du forklare dette? -🎃 Gratulerer, du har nettopp laget en modell som kan hjelpe med å forutsi prisen på paigresskar. Du kan sannsynligvis gjenta den samme prosedyren for alle gresskartypene, men det ville være tidkrevende. La oss nå lære hvordan vi tar hensyn til gresskarvarianter i modellen vår! +🎃 Gratulerer, du har nettopp laget en modell som kan hjelpe med å forutsi prisene på pai-gresskar. Du kan sannsynligvis gjenta den samme prosedyren for alle gresskartyper, men det ville være kjedelig. La oss nå lære hvordan vi tar hensyn til gresskarsort i modellen vår! -## Kategoriske funksjoner +## Kategoriske trekk -I den ideelle verden ønsker vi å kunne forutsi priser for forskjellige gresskarvarianter ved hjelp av samme modell. Men `Variety`-kolonnen er noe annerledes enn kolonner som `Month`, fordi den inneholder ikke-numeriske verdier. Slike kolonner kalles **kategoriske**. +I en ideell verden ønsker vi å kunne forutsi priser for forskjellige gresskarsorter ved hjelp av den samme modellen. Men kolonnen `Variety` er noe annerledes enn kolonner som `Month`, fordi den inneholder ikke-numeriske verdier. Slike kolonner kalles **kategoriske**. [![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") -> 🎥 Klikk bildet over for en kort videooversikt over bruk av kategoriske funksjoner. +> 🎥 Klikk på bildet ovenfor for en kort videooversikt om bruk av kategoriske trekk. -Her kan du se hvordan gjennomsnittsprisen avhenger av variant: +Her kan du se hvordan gjennomsnittsprisen avhenger av sort: Average price by variety -For å ta hensyn til variant må vi først konvertere den til numerisk form, eller **kode** den. Det finnes flere måter vi kan gjøre dette på: +For å ta hensyn til sort, må vi først konvertere den til numerisk form, eller **enkode** den. Det finnes flere måter å gjøre dette på: -* Enkel **nummerisk koding** vil bygge en tabell over ulike varianter, og deretter erstatte variantnavnet med en indeks i denne tabellen. Dette er ikke det beste for lineær regresjon, fordi lineær regresjon tar den faktiske numeriske verdien av indeksen og legger den til resultatet, multiplisert med en koeffisient. I vårt tilfelle er forholdet mellom indeksnummer og pris tydelig ikke-lineært, selv om vi sørger for at indeksene er ordnet på en bestemt måte. -* **One-hot-koding** vil erstatte `Variety`-kolonnen med 4 ulike kolonner, én for hver variant. Hver kolonne vil inneholde `1` hvis den tilsvarende raden er av en gitt variant, og `0` ellers. Dette betyr at det vil være fire koeffisienter i lineær regresjon, én for hver gresskarvariant, som er ansvarlige for "startpris" (eller heller "tilleggpris") for akkurat den varianten. +* Enkel **numerisk koding** lager en tabell over de forskjellige sortene, og erstatter sortnavnet med et indeksnummer i tabellen. Dette er ikke den beste ideen for lineær regresjon, fordi lineær regresjon tar den faktiske numeriske verdien til indeksen, og legger det til resultatet, multiplisert med en koeffisient. I vårt tilfelle er forholdet mellom indeksnummer og pris tydelig ikke-lineært, selv om vi sørger for at indeksene er ordnet på en bestemt måte. +* **One-hot koding** erstatter `Variety`-kolonnen med 4 forskjellige kolonner, en for hver sort. Hver kolonne vil inneholde `1` hvis raden tilsvarer en gitt sort, og `0` ellers. Dette betyr at det vil være fire koeffisienter i lineær regresjon, en for hver gresskarsort, som er ansvarlig for "startpris" (eller heller "tilleggpris") for den aktuelle sorten. -Koden nedenfor viser hvordan vi kan one-hot kode en variant: +Koden nedenfor viser hvordan vi kan one-hot kode en sort: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -308,14 +325,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -For å trene lineær regresjon med one-hot-kodet variant som input, trenger vi bare å initialisere `X` og `y` data riktig: +For å trene lineær regresjon ved bruk av one-hot kodet sort som input må vi bare initialisere `X` og `y` dataene riktig: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -Resten av koden er den samme som vi brukte overfor for å trene Linear Regression. Hvis du prøver det, vil du se at middel kvadratfeil er omtrent den samme, men vi får mye høyere bestemmelseskoeffisient (~77%). For å få enda mer nøyaktige prediksjoner kan vi ta med flere kategoriske funksjoner, samt numeriske funksjoner som `Month` eller `DayOfYear`. For å få en stor tabell med alle funksjoner kan vi bruke `join`: +Resten av koden er den samme som vi brukte ovenfor for å trene lineær regresjon. Hvis du prøver det, vil du se at middelkvadrert feil er omtrent det samme, men vi får mye høyere determinajonskoeffisient (~77%). For å få enda mer nøyaktige prediksjoner, kan vi ta flere kategoriske trekk i betraktning, samt numeriske trekk, som `Month` eller `DayOfYear`. For å få en stor array med alle trekk, kan vi bruke `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -325,60 +342,60 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -Her tar vi også hensyn til `City` og `Package` type, som gir oss MSE 2.84 (10%), og bestemmelse 0.94! +Her tar vi også hensyn til `City` og `Package` type, noe som gir oss RMSE 2,84 (10,5 %) og determinajon 0,94! -## Å sette det hele sammen +## Alt samlet -For å lage den beste modellen kan vi bruke kombinert (one-hot kodet kategorisk + numerisk) data fra eksempelet ovenfor sammen med polynomregresjon. Her er den komplette koden for din bekvemmelighet: +For å lage den beste modellen kan vi bruke kombinert (one-hot kodede kategoriske + numeriske) data fra eksempelet over sammen med polynomisk regresjon. Her er hele koden for din bekvemmelighet: ```python -# Sett opp treningsdata +# sett opp treningsdata 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'] -# Lag trenings- og testdeling +# lag trenings- og testdel X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) -# Sett opp og tren pipelinen +# sett opp og tren pipelinen pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) -# Forutsi resultater for testdata +# forutsi resultater for testdata pred = pipeline.predict(X_test) -# Beregn MSE og bestemthet -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# beregn RMSE og forklaringsgrad +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -Dette skal gi oss den beste bestemmelseskoeffisienten på nesten 97%, og MSE=2.23 (~8% prediksjonsfeil). +Dette bør gi oss den beste determinajonskoeffisienten på nesten 97 %, og RMSE=2,23 (~8 % prediksjonsfeil). -| Modell | MSE | Bestemmelse | +| Modell | RMSE | Determinasjon | |-------|-----|---------------| -| `DayOfYear` Lineær | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polynom | 2.73 (17.0%) | 0.08 | -| `Variety` Lineær | 5.24 (19.7%) | 0.77 | -| Alle funksjoner Lineær | 2.84 (10.5%) | 0.94 | -| Alle funksjoner Polynom | 2.23 (8.25%) | 0.97 | +| `DayOfYear` Lineær | 2,77 (17,2 %) | 0,07 | +| `DayOfYear` Polynom | 2,73 (17,0 %) | 0,08 | +| `Variety` Lineær | 5,24 (19,7 %) | 0,77 | +| Alle trekk Lineær | 2,84 (10,5 %) | 0,94 | +| Alle trekk Polynom | 2,23 (8,25 %) | 0,97 | -🏆 Bra jobbet! Du har laget fire regresjonsmodeller i én lekse, og forbedret modellkvaliteten til 97%. I den siste delen om regresjon vil du lære om logistisk regresjon for kategoribestemmelse. +🏆 Bra jobbet! Du har laget fire regresjonsmodeller i én leksjon, og forbedret modellkvaliteten til 97 %. I det siste avsnittet om regresjon vil du lære om logistisk regresjon for å bestemme kategorier. --- ## 🚀Utfordring -Test flere forskjellige variabler i denne notatboken for å se hvordan korrelasjon stemmer med modellnøyaktighet. +Test flere forskjellige variabler i denne notatboken for å se hvordan korrelasjon tilsvarer modellens nøyaktighet. ## [Quiz etter forelesning](https://ff-quizzes.netlify.app/en/ml/) -## Gjennomgang & Selvstudium +## Gjennomgang og egenstudium -I denne leksjonen lærte vi om lineær regresjon. Det finnes andre viktige typer regresjon. Les om Stepwise, Ridge, Lasso og Elasticnet teknikker. Et godt kurs å studere for å lære mer er [Stanford Statistical Learning-kurset](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +I denne leksjonen lærte vi om lineær regresjon. Det finnes andre viktige regresjonstyper. Les om Stepwise, Ridge, Lasso og Elasticnet teknikker. Et godt kurs å studere for å lære mer er [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ## Oppgave @@ -388,5 +405,5 @@ I denne leksjonen lærte vi om lineær regresjon. Det finnes andre viktige typer **Ansvarsfraskrivelse**: -Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på originalsproget bør betraktes som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. +Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på dets opprinnelige språk skal anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. \ No newline at end of file diff --git a/translations/no/2-Regression/3-Linear/solution/notebook.ipynb b/translations/no/2-Regression/3-Linear/solution/notebook.ipynb index cf0db78a3..2ff8cb4b9 100644 --- a/translations/no/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/no/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Lineær og polynomisk regresjon for prissetting av gresskar - Leksjon 3\n", + "## Lineær og polynomisk regresjon for gresskarpriser - Leksjon 3\n", "\n", - "Last inn nødvendige biblioteker og datasett. Konverter dataene til en dataframe som inneholder et utvalg av dataene:\n", + "Last inn nødvendige biblioteker og datasett. Konverter dataene til en dataframe som inneholder et delsett av dataene:\n", "\n", - "- Hent kun gresskar som er priset per skjeppe\n", + "- Hent kun gresskar priset per bushel\n", "- Konverter datoen til en måned\n", - "- Beregn prisen som et gjennomsnitt av høy og lav pris\n", - "- Konverter prisen til å reflektere prissetting basert på skjeppekvantitet\n" + "- Beregn prisen som et gjennomsnitt av høye og lave priser\n", + "- Konverter prisen til å reflektere prising per bushel mengde\n" ] }, { @@ -447,7 +447,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "La oss se om det er korrelasjon:\n" + ] }, { "cell_type": "code", @@ -472,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Ser ut som korrelasjonen er ganske liten, men det er et annet, mer viktig forhold - fordi prisene i plottet ovenfor ser ut til å ha flere distinkte klynger. La oss lage et plott som viser forskjellige gresskarsorter:\n" + "Ser ut som korrelasjonen er ganske liten, men det er et annet mer viktig forhold - fordi prisnivåene i plottet over ser ut til å ha flere distinkte klynger. La oss lage et plott som viser forskjellige gresskarsorter:\n" ] }, { @@ -535,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "For øyeblikket, la oss konsentrere oss kun om én variant - **terte type**.\n" + ] }, { "cell_type": "code", @@ -584,7 +588,7 @@ "source": [ "### Lineær regresjon\n", "\n", - "Vi skal bruke Scikit Learn til å trene en lineær regresjonsmodell:\n" + "Vi vil bruke Scikit Learn til å trene en lineær regresjonsmodell:\n" ] }, { @@ -661,7 +665,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Stigningen til linjen kan bestemmes fra koeffisientene i lineær regresjon:\n" + ] }, { "cell_type": "code", @@ -686,7 +692,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Vi kan bruke den trente modellen til å forutsi pris:\n" + ] }, { "cell_type": "code", @@ -716,9 +724,9 @@ "source": [ "### Polynomisk regresjon\n", "\n", - "Noen ganger er forholdet mellom egenskaper og resultater iboende ikke-lineært. For eksempel kan prisen på gresskar være høy om vinteren (måneder=1,2), deretter falle om sommeren (måneder=5-7), og så stige igjen. Lineær regresjon klarer ikke å fange dette forholdet nøyaktig.\n", + "Noen ganger er forholdet mellom funksjoner og resultater iboende ikke-lineært. For eksempel kan gresskarpriser være høye om vinteren (måneder=1,2), deretter falle over sommeren (måneder=5-7), og så stige igjen. Lineær regresjon kan ikke finne dette forholdet nøyaktig.\n", "\n", - "I dette tilfellet kan vi vurdere å legge til ekstra egenskaper. En enkel måte er å bruke polynomer fra inngangsegenskapene, noe som vil resultere i **polynomisk regresjon**. I Scikit Learn kan vi automatisk forhåndsberegne polynomiske egenskaper ved hjelp av pipelines:\n" + "I dette tilfellet kan vi vurdere å legge til ekstra funksjoner. En enkel måte er å bruke polynomer fra inngangsfunksjonene, noe som vil resultere i **polynomisk regresjon**. I Scikit Learn kan vi automatisk forhåndsberegne polynomfunksjoner ved hjelp av pipelines: \n" ] }, { @@ -773,20 +781,23 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Koding av varianter\n", + "### Varianter av koding\n", "\n", - "I en ideell verden ønsker vi å kunne forutsi priser for ulike gresskarvarianter ved hjelp av samme modell. For å ta hensyn til variantene, må vi først konvertere dem til numerisk form, eller **kode**. Det finnes flere måter vi kan gjøre dette på:\n", + "I en ideell verden ønsker vi å kunne forutsi priser for forskjellige gresskarvarianter ved å bruke samme modell. For å ta hensyn til varianten, må vi først konvertere den til numerisk form, eller **kode** den. Det finnes flere måter vi kan gjøre dette på:\n", "\n", - "* Enkel numerisk koding som lager en tabell over de ulike variantene, og deretter erstatter variantnavnet med en indeks i den tabellen. Dette er ikke den beste ideen for lineær regresjon, fordi lineær regresjon tar den numeriske verdien av indeksen i betraktning, og den numeriske verdien vil sannsynligvis ikke korrelere numerisk med prisen.\n", - "* One-hot koding, som vil erstatte `Variety`-kolonnen med 4 forskjellige kolonner, én for hver variant, som vil inneholde 1 hvis den tilsvarende raden er av den gitte varianten, og 0 ellers.\n", + "* Enkel numerisk koding som vil bygge en tabell over forskjellige varianter, og deretter erstatte variantnavnet med en indeks i den tabellen. Dette er ikke den beste ideen for lineær regresjon, fordi lineær regresjon tar den numeriske verdien av indeksen i betraktning, og den numeriske verdien er sannsynligvis ikke korrelert numerisk med prisen.\n", + "* One-hot-koding, som vil erstatte `Variety`-kolonnen med 4 forskjellige kolonner, en for hver variant, som vil inneholde 1 hvis den tilsvarende raden er av gitt variant, og 0 ellers.\n", "\n", "Koden nedenfor viser hvordan vi kan one-hot kode en variant:\n" ] @@ -936,9 +947,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Lineær regresjon på variasjon\n", + "### Lineær regresjon på sort\n", "\n", - "Vi skal nå bruke den samme koden som ovenfor, men i stedet for `DayOfYear` skal vi bruke vår one-hot-enkodede variasjon som input:\n" + "Vi vil nå bruke den samme koden som ovenfor, men i stedet for `DayOfYear` vil vi bruke vår one-hot-enkodede sort som input:\n" ] }, { @@ -986,7 +997,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Vi kan også prøve å bruke andre funksjoner på samme måte, og kombinere dem med numeriske funksjoner, som `Month` eller `DayOfYear`:\n" + "Vi kan også prøve å bruke andre funksjoner på samme måte, og kombinere dem med numeriske funksjoner, slik som `Month` eller `DayOfYear`:\n" ] }, { @@ -1019,7 +1030,7 @@ "source": [ "### Polynomisk regresjon\n", "\n", - "Polynomisk regresjon kan også brukes med kategoriske funksjoner som er én-hot-kodet. Koden for å trene polynomisk regresjon vil i hovedsak være den samme som vi har sett ovenfor.\n" + "Polynomisk regresjon kan også brukes med kategoriske funksjoner som er one-hot-kodet. Koden for å trene polynomisk regresjon vil i hovedsak være den samme som vi har sett ovenfor.\n" ] }, { @@ -1066,7 +1077,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Ansvarsfraskrivelse**: \nDette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi tilstreber nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.\n" + "---\n\n\n**Ansvarsfraskrivelse**:\nDette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på det opprinnelige språket bør betraktes som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som følge av bruk av denne oversettelsen.\n\n" ] } ], @@ -1096,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-06T11:31:31+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "no" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2