{"id":1986,"date":"2019-03-21T23:50:16","date_gmt":"2019-03-21T22:50:16","guid":{"rendered":"https:\/\/vgrblogg.se\/utveckling\/?p=1986"},"modified":"2019-09-17T13:22:51","modified_gmt":"2019-09-17T11:22:51","slug":"en-introduktion-till-supervised-machine-learning","status":"publish","type":"post","link":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/","title":{"rendered":"En introduktion till AI-tekniken supervised machine learning med enkel Python-programmering"},"content":{"rendered":"<p>Del 5 i bloggserien f\u00f6r <a href=\"https:\/\/vgrblogg.se\/utveckling\/tag\/swelife-ai\/\">uppdraget Swelife \ud83d\ude0d AI<\/a>. Kul att du vill l\u00e4ra dig lite om praktisk AI och specifikt machine learning! H\u00e4r kommer ett sj\u00e4lvstudiematerial vi tar fram f\u00f6r h\u00f6stens inspirationsworkshops inom Swelife, men ocks\u00e5 n\u00e5got vi testar tillsammans med VGR:s regionutveckling, <a href=\"http:\/\/www.reglab.se\/konferenser\/arskonferens-2019\/\">bland annat p\u00e5 konferensen RegLab i mars i V\u00e4ster\u00e5s<\/a>.<!--more--><\/p>\n<h1>Videoversion inklusive intro till AI &#8211; f\u00f6r dig som vill se<\/h1>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=rrWvqFkz-a0\">https:\/\/www.youtube.com\/watch?v=rrWvqFkz-a0<\/a><\/p>\n<h1><a name=\"_Toc3815747\"><\/a>Om den tekniska milj\u00f6n du beh\u00f6ver<\/h1>\n<p>Enklast \u00e4r att anv\u00e4nda n\u00e4ttj\u00e4nster f\u00f6r de tekniska \u00f6vningarna, m\u00e5nga har en gratisversion som duger gott. Exempel p\u00e5 s\u00e5dana \u00e4r <a href=\"https:\/\/notebooks.azure.com\">Azure Notebooks<\/a>, <a href=\"https:\/\/www.pythonanywhere.com\">Python Anywhere<\/a>\u00a0och <a href=\"http:\/\/datalore.io\">datalore.io<\/a><\/p>\n<p>Den mer komplicerade versionen \u00e4r att installera saker p\u00e5 din dator. Om du v\u00e4ljer att installera saker p\u00e5 din dator s\u00e5 \u00e4r det enklast att installera <a href=\"https:\/\/anaconda.org\">Anaconda<\/a> och sedan funktionen Jupyter Notebook.<\/p>\n<p>I det h\u00e4r materialet kommer vi utg\u00e5 fr\u00e5n <a href=\"https:\/\/notebooks.azure.com\">Microsoft Azure Notebooks<\/a> eftersom det g\u00e5r snabbt att komma ig\u00e5ng med.<\/p>\n<h2><a name=\"_Toc3815748\"><\/a>Steg 1: Logga in eller skapa ett gratiskonto hos Microsoft Azure Notebooks<\/h2>\n<p>B\u00f6rja med att i webbl\u00e4saren g\u00e5 till f\u00f6ljande adress:<\/p>\n<p><a href=\"https:\/\/notebooks.azure.com\">https:\/\/notebooks.azure.com<\/a><\/p>\n<figure id=\"attachment_1996\" aria-describedby=\"caption-attachment-1996\" style=\"width: 723px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1996\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/01.jpg\" alt=\"Figur 1: Uppe i h\u00f6gra h\u00f6rnet kan du logga in (\u201cSign In\u201d). P\u00e5 samma plats skapar du ett nytt konto.\" width=\"723\" height=\"561\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/01.jpg 723w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/01-300x233.jpg 300w\" sizes=\"(max-width: 723px) 100vw, 723px\" \/><\/a><figcaption id=\"caption-attachment-1996\" class=\"wp-caption-text\">Figur 1: Uppe i h\u00f6gra h\u00f6rnet kan du logga in (\u201cSign In\u201d). P\u00e5 samma plats skapar du ett nytt konto.<\/figcaption><\/figure>\n<figure id=\"attachment_1997\" aria-describedby=\"caption-attachment-1997\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1997\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/02.jpg\" alt=\"Figur 2: Om du redan \u00e4r inloggad mot n\u00e5gon annan Microsoft-tj\u00e4nst kan du uppmanas att forts\u00e4tta med det.\" width=\"914\" height=\"762\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/02.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/02-300x250.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/02-768x640.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-1997\" class=\"wp-caption-text\">Figur 2: Om du redan \u00e4r inloggad mot n\u00e5gon annan Microsoft-tj\u00e4nst kan du uppmanas att forts\u00e4tta med det.<\/figcaption><\/figure>\n<p>Om du har n\u00e5gon Microsoft-prenumeration via jobb eller skola kan du logga in med det anv\u00e4ndarkontot. Det uppt\u00e4cker du om du skriver in den e-postadressen vid inloggning d\u00e5 du kommer skickas vidare till organisationens egen inloggningssida.<\/p>\n<figure id=\"attachment_1998\" aria-describedby=\"caption-attachment-1998\" style=\"width: 818px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1998\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/03.jpg\" alt=\"Figur 3: Logga in antingen med jobbkonto, skolkonto, privat f\u00f6r exempelvis Hotmail, eller skapa ett nytt konto.\" width=\"818\" height=\"343\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/03.jpg 818w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/03-300x126.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/03-768x322.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-1998\" class=\"wp-caption-text\">Figur 3: Logga in antingen med jobbkonto, skolkonto, privat f\u00f6r exempelvis Hotmail, eller skapa ett nytt konto.<\/figcaption><\/figure>\n<p>Har du inget konto via jobb eller skola kan du fortfarande ha ett privat, exempelvis f\u00f6r Microsofts mejltj\u00e4nster Hotmail och Outlook.com, dessa inloggningsuppgifter g\u00e5r ocks\u00e5 bra p\u00e5 Azure.<\/p>\n<p>I annat fall beh\u00f6ver d\u00e5 skapa ett nytt konto. Om du inte redan \u00e4r p\u00e5 https:\/\/notebooks.azure.com skriver du in den adressen i webbl\u00e4saren och b\u00f6rjar med att klicka p\u00e5 l\u00e4nken \u201cSign in\u201d uppe i h\u00f6gra h\u00f6rnet och f\u00f6lja guiden.<\/p>\n<p>Du kommer ocks\u00e5 uppmanas att skapa en profil p\u00e5 Azure Notebooks.<\/p>\n<h2><a name=\"_Toc3815749\"><\/a>Steg 2: G\u00f6r en kopia av startpaketet<\/h2>\n<p>Det finns ett startpaket att utg\u00e5 ifr\u00e5n. Det \u00e4r s\u00e4rskilt l\u00e4mpligt om du \u00e4r oerfaren n\u00e4r det g\u00e4ller programmering, inte har anv\u00e4nt notebooks tidigare eller vill ha ett facit att tjuvkika p\u00e5 vid behov.<\/p>\n<figure id=\"attachment_1999\" aria-describedby=\"caption-attachment-1999\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/04.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1999\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/04.jpg\" alt=\"Figur 4: N\u00e4r du hittat ett projekt du vill forts\u00e4tta med kan du trycka p\u00e5 knappen \u201cClone\u201d uppe i h\u00f6gra h\u00f6rnet av webbl\u00e4saren.\" width=\"914\" height=\"564\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/04.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/04-300x185.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/04-768x474.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-1999\" class=\"wp-caption-text\">Figur 4: N\u00e4r du hittat ett projekt du vill forts\u00e4tta med kan du trycka p\u00e5 knappen \u201cClone\u201d uppe i h\u00f6gra h\u00f6rnet av webbl\u00e4saren.<\/figcaption><\/figure>\n<p>Klona startpaketet till ditt konto s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>G\u00e5 till adressen <a href=\"https:\/\/notebooks.azure.com\/marcusosterberg\">https:\/\/notebooks.azure.com\/marcusosterberg<\/a><\/li>\n<li>Leta upp projektet \u201cVGR AI workshop\u201d och klicka p\u00e5 det.<\/li>\n<li>Klicka p\u00e5 knappen \u201cClone\u201d och v\u00e4lj namnet p\u00e5 ditt eget projekt, du m\u00e5ste inte \u00e4ndra n\u00e5got.<\/li>\n<li>Klicka p\u00e5 \u201cClone\u201d f\u00f6r att spara en kopia av startpaketet till ditt eget konto.<\/li>\n<\/ol>\n<h2><a name=\"_Toc3815750\"><\/a>Steg 3: Starta din notebook f\u00f6r f\u00f6rsta g\u00e5ngen<\/h2>\n<p>Nu har du din kopia\/kloning av projektet p\u00e5 ditt eget konto. Du har tv\u00e5 olika sorters filer. De numrerade filerna som ligger i roten \u00e4r dina \u00f6vningsfiler n\u00e4r du f\u00f6ljer med en f\u00f6rel\u00e4sning med detta material eller studerar detta material sj\u00e4lvst\u00e4ndigt. Dessutom har du en mapp som heter \u201cfacit\u201d. D\u00e4r ligger filer med samma filnamn som \u00f6vningsfilerna, men dessa \u00e4r f\u00e4rdiga och kan fungera som ett facit f\u00f6r dig om du k\u00f6r fast.<\/p>\n<p>F\u00f6r att starta din f\u00f6rsta notebook:<\/p>\n<ol>\n<li>Klicka p\u00e5 \u201c01-intro-till-python.ipynb\u201d och ett nytt webbl\u00e4sarf\u00f6nster kommer \u00f6ppnas.<\/li>\n<li>Nu har du en s\u00e5 kallad Jupyter Notebook framf\u00f6r dig, fram\u00f6ver enbart kallad notebook.<\/li>\n<\/ol>\n<figure id=\"attachment_2000\" aria-describedby=\"caption-attachment-2000\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/05.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2000\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/05.jpg\" alt=\"Figur 5: S\u00e5 h\u00e4r kan en notebook se ut. Man blandar kod (i gr\u00e5 rutor\/celler) och dokumentation (i vita rutor\/celler) f\u00f6r att enkelt strukturera upp det man vill ha gjort p\u00e5 ett begripligt s\u00e4tt.\" width=\"914\" height=\"522\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/05.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/05-300x171.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/05-768x439.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2000\" class=\"wp-caption-text\">Figur 5: S\u00e5 h\u00e4r kan en notebook se ut. Man blandar kod (i gr\u00e5 rutor\/celler) och dokumentation (i vita rutor\/celler) f\u00f6r att enkelt strukturera upp det man vill ha gjort p\u00e5 ett begripligt s\u00e4tt.<\/figcaption><\/figure>\n<p>Notebooks \u00e4r en utvecklarmilj\u00f6 du kan k\u00f6ra direkt i din webbl\u00e4sare. I det h\u00e4r fallet k\u00f6rs din kod i Microsofts tj\u00e4nst Azure f\u00f6r enkelhetens skull men det skulle lika g\u00e4rna kunna vara p\u00e5 din arbetsplats, skola eller egen dator.<\/p>\n<p>En notebook \u00e4r uppdelad i s\u00e5 kallade celler. En cell \u00e4r en ruta vars bakgrundsf\u00e4rg \u00e4r antingen vit eller gr\u00e5. En vit cell inneh\u00e5ller dokumentation, i en gr\u00e5 cell skriver vi in programmeringskod.<\/p>\n<figure id=\"attachment_2001\" aria-describedby=\"caption-attachment-2001\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/06.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2001\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/06.jpg\" alt=\"Figur 6: Dubbelklicka p\u00e5 de vita cellerna och l\u00e4r dig lite om dokumentationsspr\u00e5ket Markdown.\" width=\"914\" height=\"316\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/06.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/06-300x104.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/06-768x266.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2001\" class=\"wp-caption-text\">Figur 6: Dubbelklicka p\u00e5 de vita cellerna och l\u00e4r dig lite om dokumentationsspr\u00e5ket Markdown.<\/figcaption><\/figure>\n<p>Om du dubbelklickar p\u00e5 en vit cell kommer den g\u00e5 \u00f6ver till redigeringsl\u00e4ge. De vita cellernas inneh\u00e5ll skrivs med ett dokumentationsspr\u00e5k som heter <a href=\"https:\/\/sv.wikipedia.org\/wiki\/Markdown\">Markdown<\/a>. Man beh\u00f6ver inte l\u00e4gga n\u00e5gon energi p\u00e5 det, se det mer som ett snabbt s\u00e4tt att skriva anteckningar intill din kod.<\/p>\n<p>F\u00f6r att komma ur redigeringsl\u00e4ge klickar du p\u00e5 knappen \u201cRun\u201d i verktygsf\u00e4ltet eller tangentbordskombinationen Ctrl + Enter.<\/p>\n<p>Samma sak f\u00f6r att k\u00f6ra eller testa en snutt kod du skrivit i en gr\u00e5 ruta, d\u00e5 trycker du p\u00e5 \u201cRun\u201d eller tangentbordskombinationen Ctrl + Enter.<\/p>\n<p>N\u00e4r du senare vill skapa dina egna notebooks kommer du skapa dina egna celler (genom verktygsmenyn Insert -&gt; Insert cell below, eller above). Kom d\u00e5 ih\u00e5g att kod skrivs in i gr\u00e5 celler, dokumentation i vita celler. F\u00f6r att byta markerar du cellen du vill \u00e4ndra och sedan klickar i rullgardinsmenyn i verktygsf\u00e4ltet.<\/p>\n<figure id=\"attachment_2002\" aria-describedby=\"caption-attachment-2002\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/07.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2002\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/07.jpg\" alt=\"Figur 7: F\u00f6r att byta celltyp fr\u00e5n Markdown (dokumentation) till Code (kod) klickar du f\u00f6rst p\u00e5 cell du vill \u00e4ndra och sedan p\u00e5 rullgardinsmenyn i verktygsf\u00e4ltet.\" width=\"914\" height=\"562\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/07.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/07-300x184.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/07-768x472.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2002\" class=\"wp-caption-text\">Figur 7: F\u00f6r att byta celltyp fr\u00e5n Markdown (dokumentation) till Code (kod) klickar du f\u00f6rst p\u00e5 cell du vill \u00e4ndra och sedan p\u00e5 rullgardinsmenyn i verktygsf\u00e4ltet.<\/figcaption><\/figure>\n<h1><a name=\"_Toc3815751\"><\/a>Intro till programmering \u2013 p\u00e5 tv\u00e5 minuter<\/h1>\n<p>Vill du instruera en dator beh\u00f6ver du programmera den. Programmering \u00e4r allts\u00e5 att sammanst\u00e4lla en mer eller mindre l\u00e5ng lista med instruktioner du vill f\u00e5 utf\u00f6rt.<\/p>\n<p>En utmaning med att programmera \u00e4r att datorn g\u00f6r precis som den blir tillsagd. Det kan l\u00e5ta som en bra sak, och s\u00e5 l\u00e4nge du skriver \u201cr\u00e4tt\u201d programmeringskod \u00e4r det bra. Men det g\u00f6r att du arbetar p\u00e5 maskinens villkor, p\u00e5 ett spr\u00e5k som \u00e4r mer anpassat efter maskinens behov \u00e4n dina.<\/p>\n<p>Det finns m\u00e5nga olika programmeringsspr\u00e5k. De olika spr\u00e5ken har olika styrkor och svagheter. N\u00e5gra vanliga programmeringsspr\u00e5k i Sverige \u00e4r C#, Java, C++ och PHP. Just n\u00e4r det g\u00e4ller hantverket runt machine learning \u00e4r det vanligt att man anv\u00e4nder spr\u00e5ket Python.<\/p>\n<h1><a name=\"_Toc3815752\"><\/a>Intro till machine learning \u2013 p\u00e5 fem minuter<\/h1>\n<p>Klassisk programmering kallas oftast f\u00f6r systemutveckling eller computer science i akademisk milj\u00f6. N\u00e4r det g\u00e4ller machine learning \u00e4r det ist\u00e4llet datavetare eller data science. Det \u00e4r allts\u00e5 en skillnad p\u00e5 dator och data, d\u00e4r man historiskt har instruerat datorer genom programmering och att en datavetare idag ist\u00e4llet fokuserar p\u00e5 den data som datorn beh\u00f6ver f\u00f6r att f\u00f6r att \u201cprogrammera sig sj\u00e4lv\u201d.<\/p>\n<p>Machine learning kan allts\u00e5 f\u00f6renklat f\u00f6rklaras som att man hj\u00e4lper en sorts maskin att bygga upp erfarenheter baserat p\u00e5 information man matar den med. Dessa data kan vara att erbjuda m\u00e4ngder med bilder som antingen f\u00f6rest\u00e4ller \u00e4pplen eller apelsiner. Det maskinen till sist l\u00e4r sig \u00e4r vilka egenskaper (kallas features inom machine learning) som \u00e4r typiska f\u00f6r ett \u00e4pple och vad som \u00e4r typiskt f\u00f6r en apelsin.<\/p>\n<h2><a name=\"_Toc3815753\"><\/a>Supervised machine learning<\/h2>\n<p>Supervised machine learning betyder att man tillsammans med informationen ber\u00e4ttar vilka bilder som f\u00f6rest\u00e4ller \u00e4pplen och vilka som f\u00f6rest\u00e4ller apelsiner. Det kallas f\u00f6r att informationen \u00e4r annoterad, det finns allts\u00e5 en l\u00e4rare som hj\u00e4lper maskinen att l\u00e4ra sig.<\/p>\n<p>Maskinen kommer ganska snart att inse att en sl\u00e4t yta och en liten m\u00f6rk pinne som sticker ut gemensamt f\u00f6r m\u00e5nga \u00e4pplen och att en brandgul och gropig yta brukar man \u201cse\u201d p\u00e5 en apelsin.<\/p>\n<p>Po\u00e4ngen med detta \u00e4r att senare kunna skicka en f\u00f6r maskinen helt ok\u00e4nd bild och be maskinen s\u00e4ga om den tror det f\u00f6rest\u00e4ller ett \u00e4pple eller en apelsin. Den h\u00e4r maskinen skulle allts\u00e5 ha en sn\u00e4v kunskap endast om tv\u00e5 sorters frukter, samt att den inte har mer kunskap \u00e4n de bilder den sett under sin tr\u00e4ningsfas.<\/p>\n<h2><a name=\"_Toc3815754\"><\/a>Unsupervised machine learning<\/h2>\n<p>Till skillnad mot versionen som \u00e4r supervised har man ingen pedagogisk l\u00e4rarfunktion i unsupervised machine learning. Maskinen m\u00e5ste allts\u00e5 p\u00e5 egen hand se m\u00f6nster och f\u00f6rs\u00f6ka lista ut vad det \u00e4r f\u00f6r information. Det kan vara fynd som att hitta avvikelser i siffror, som att en person haft en period av avvikande pulsdata, eller regelbundenheter. Maskinen kan l\u00e4tt uppt\u00e4cka s\u00e5dant i en enorm m\u00e4ngd med siffror, men d\u00e5 den inte \u00e4r supervised kan den inte beskriva vad den hittat eller en trolig orsak bakom avvikelsen.<\/p>\n<p>Ett s\u00e4tt att se det p\u00e5 \u00e4r att man med unsupervised \u00e4r \u00f6ppen f\u00f6r vilka fynd som finns i en m\u00e4ngd data, medan man med supervised redan best\u00e4mt sig mer exakt vad man \u00e4r ute efter.<\/p>\n<p>Det finns fler varianter av machine learning vi inte kommer g\u00e5 in p\u00e5. Googla p\u00e5 reinforcement learning, transfer learning eller deep learning f\u00f6r att l\u00e4sa mer.<\/p>\n<h1><a name=\"_Toc3815755\"><\/a>\u00d6vningar<\/h1>\n<p>Du beh\u00f6ver ha skapat ett konto hos Microsoft Azure Notebooks f\u00f6r att kunna k\u00f6ra \u00f6vningarna. Om du inte gjort det s\u00e5 se tidigare avsnitt.<\/p>\n<h2><a name=\"_Toc3815756\"><\/a>\u00d6vning 1: grundl\u00e4ggande programmering<\/h2>\n<p>Det finns ett antal grundkunskaper man beh\u00f6ver ha lite koll p\u00e5. Vi kommer g\u00e5 igenom dem i denna \u00f6vning f\u00f6r att i n\u00e4sta \u00f6vning fokusera p\u00e5 machine learning.<\/p>\n<p>Om du inte redan har den f\u00f6rsta notebooken \u00f6ppen s\u00e5 \u00f6ppna den nu, den som heter \u201c01-intro-till-python\u201d. Om n\u00e5got inte verkar fungera kan det vara v\u00e4rt att klicka p\u00e5 diskettknappen i verktygsf\u00e4ltet, st\u00e4nga ner och b\u00f6rja om. I projektvyn kan man f\u00e5 statusinformation och vid behov starta om den tekniska milj\u00f6n bakom projektet.<\/p>\n<p>Eftersom det \u00e4r en gratistj\u00e4nst kan man dessv\u00e4rre inte r\u00e4kna med helt felfri drift, d\u00e5 borde man skaffa sig ett betalkonto.<\/p>\n<figure id=\"attachment_2003\" aria-describedby=\"caption-attachment-2003\" style=\"width: 808px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/08.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2003\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/08.jpg\" alt=\"Figur 8:Om det strular f\u00f6r dig och du vill fels\u00f6ka \u00e4r projektets status v\u00e4rt att kolla in. N\u00e4r det funkar ska det i gr\u00f6nt st\u00e5 \u201cRunning on Free Compute\u201d.\" width=\"808\" height=\"600\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/08.jpg 808w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/08-300x223.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/08-768x570.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2003\" class=\"wp-caption-text\">Figur 8:Om det strular f\u00f6r dig och du vill fels\u00f6ka \u00e4r projektets status v\u00e4rt att kolla in. N\u00e4r det funkar ska det i gr\u00f6nt st\u00e5 \u201cRunning on Free Compute\u201d.<\/figcaption><\/figure>\n<p>Du kommer i respektive notebook f\u00e5 lite v\u00e4gledande information i de vita cellerna, men de \u00e4r fr\u00e4mst d\u00e4r f\u00f6r att hj\u00e4lpa dig hitta r\u00e4tt gr\u00e5 cell.<\/p>\n<h3><a name=\"_Toc3815757\"><\/a>1.1 Hejsan v\u00e4rlden<\/h3>\n<figure id=\"attachment_2004\" aria-describedby=\"caption-attachment-2004\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/09.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2004\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/09.jpg\" alt=\"Figur 9: F\u00f6r att kunna skriva kod st\u00e4ller du mark\u00f6ren i ett gr\u00e5tt f\u00e4lt. Aktiva f\u00e4lt f\u00e5r en gr\u00f6n ram runt sig.\" width=\"914\" height=\"337\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/09.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/09-300x111.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/09-768x283.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2004\" class=\"wp-caption-text\">Figur 9: F\u00f6r att kunna skriva kod st\u00e4ller du mark\u00f6ren i ett gr\u00e5tt f\u00e4lt. Aktiva f\u00e4lt f\u00e5r en gr\u00f6n ram runt sig.<\/figcaption><\/figure>\n<p>Klicka i det f\u00f6rsta gr\u00e5 f\u00e4ltet. Nu kommer mark\u00f6ren blinka d\u00e4r och du ska ocks\u00e5 f\u00e5 en gr\u00f6n ram som visuellt visar var i din notebook du \u00e4r aktiv.<\/p>\n<p>Den kod vi ska skriva \u00e4r klassisk. Vi ska g\u00f6ra minsta m\u00f6jliga program och det brukar g\u00e5 ut p\u00e5 att f\u00e5 maskinen att s\u00e4ga hej till v\u00e4rlden &#8211; Hello world!<\/p>\n<p>S\u00e5 nu skriver du det f\u00f6rsta programmet i den gr\u00e5 rutan, n\u00e4mligen:<\/p>\n<pre>print(\"Hello world!\")<\/pre>\n<p>Du s\u00e4ger allts\u00e5 \u00e5t maskinen att printa n\u00e5got, skriva ut p\u00e5 sk\u00e4rmen. Sen \u00e4r det b\u00f6rjan p\u00e5 en parentes, ett citationstecken (eller en rak apostrof), lite text, ett till citationstecken (eller rak apostrof) och en avslutande parentes. Om du tycker det \u00e4r sv\u00e5rt att hitta apostrof p\u00e5 tangentbordet g\u00e5r det lika bra med citationstecknet som du hittar p\u00e5 Shift + 2, det vill s\u00e4ga &#8221;.<\/p>\n<p>Det du beh\u00f6ver f\u00f6rst\u00e5 av denna rad med kod:<\/p>\n<ol>\n<li><em>print<\/em> \u00e4r en inbyggd funktion i programmeringsspr\u00e5ket Python och dess uppgift \u00e4r att hj\u00e4lpa dig skriva n\u00e5got p\u00e5 sk\u00e4rmen.<\/li>\n<li>Det som inom parentes \u00e4r den information du vill ge <em>print<\/em> att jobba med.<\/li>\n<li>Att texten <em>Hello world!<\/em> omges av citationstecken \u00e4r f\u00f6r att ber\u00e4tta att det \u00e4r just en textstr\u00e4ng. Vi kommer g\u00e5 in mer p\u00e5 textstr\u00e4ngar och andra typer av data senare.<\/li>\n<li>Citationstecknet hittar du p\u00e5 tangentbordet genom att h\u00e5lla ned Shift-tangenten och trycka p\u00e5 siffran 2.<\/li>\n<li>Det g\u00e5r lika bra att anv\u00e4nda apostrof som citationstecken, s\u00e5 l\u00e4nge som du \u00e4r konsekvent i ditt val.<\/li>\n<\/ol>\n<p><strong>Nu kan du klicka p\u00e5 Run-knappen, eller Ctrl + Enter p\u00e5 tangentbordet, f\u00f6r att k\u00f6ra denna cell med programmeringskod.<\/strong> Vad h\u00e4nde? Om du skrev r\u00e4tt s\u00e5 skrevs texten <em>Hello world!<\/em> ut precis under din gr\u00e5a ruta. Se nedan bild.<\/p>\n<figure id=\"attachment_2005\" aria-describedby=\"caption-attachment-2005\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/10.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2005\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/10.jpg\" alt=\"Figur 10: N\u00e4r du k\u00f6rt din cell och allt fungerar som det ska kommer Hello world! dyka upp precis under din gr\u00e5a cell.\" width=\"914\" height=\"418\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/10.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/10-300x137.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/10-768x351.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2005\" class=\"wp-caption-text\">Figur 10: N\u00e4r du k\u00f6rt din cell och allt fungerar som det ska kommer Hello world! dyka upp precis under din gr\u00e5a cell.<\/figcaption><\/figure>\n<p>Om du inte skrev r\u00e4tt eller annat fel intr\u00e4ffade s\u00e5 kommer det st\u00e5 ett felmeddelande direkt under den gr\u00e5 rutan. Dessa felmeddelanden \u00e4r mer eller mindre kryptiska, men om man inte direkt listar ut vad man ska \u00e5tg\u00e4rda s\u00e5 \u00e4r det vanligaste att man kopierar felmeddelandet och googlar efter det. Ofta \u00e4r det p\u00e5 webbplatsen StackOverflow.com man hittar svaret. Det h\u00e4r \u00e4r vad m\u00e5nga utvecklare l\u00e4gger sin tid p\u00e5 &#8211; att fels\u00f6ka.<\/p>\n<figure id=\"attachment_2006\" aria-describedby=\"caption-attachment-2006\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/11.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2006\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/11.jpg\" alt=\"Figur 11: Exempel p\u00e5 felmeddelande. Det finns en liten upp\u00e5tpil som markerar var den gick bet p\u00e5 din kod. Felet h\u00e4r \u00e4r att det saknas en avslutande apostrof innan den avslutande parentesen.\" width=\"914\" height=\"508\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/11.jpg 914w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/11-300x167.jpg 300w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/11-768x427.jpg 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-2006\" class=\"wp-caption-text\">Figur 11: Exempel p\u00e5 felmeddelande. Det finns en liten upp\u00e5tpil som markerar var den gick bet p\u00e5 din kod. Felet h\u00e4r \u00e4r att det saknas en avslutande apostrof innan den avslutande parentesen.<\/figcaption><\/figure>\n<p>Det finns m\u00e5nga olika sorters fel och det \u00e4r en \u00f6verkurs f\u00f6r denna sj\u00e4lvstudie, men i ovanst\u00e5ende exempel anges <em>SyntaxError<\/em>. Det inneb\u00e4r att man gjort ett fel i hur man skrev programmeringsspr\u00e5ket. I det ovanst\u00e5ende exemplet f\u00f6rv\u00e4ntas man ha en avslutande apostrof <u>innan<\/u> en avslutande parentes. D\u00e4rf\u00f6r klagar den p\u00e5 felaktig syntax.<\/p>\n<p>N\u00e4r man r\u00e4ttat eventuella fel \u00e4r det bara att k\u00f6ra cellen p\u00e5 nytt och se hur det g\u00e5r. Detta kallas f\u00f6r trial and error, man testar sig fram med saker man inte vet exakt hur man l\u00f6ser.<\/p>\n<h3><a name=\"_Toc3815758\"><\/a>1.2 Operatorer<\/h3>\n<p>Operator \u00e4r ett fint ord f\u00f6r de olika s\u00e4tten att ber\u00e4kna saker, som addition, subtraktion, division, med mera. Ofta menar man dock lite mer \u00e4n det vi l\u00e4rt oss under grundskolans matematik. Ett s\u00e5dant exempel \u00e4r hur man sammanfogar tv\u00e5 stycken textstr\u00e4ngar, s\u00e5 kallad konkatenering.<\/p>\n<p>H\u00e4r kommer lite ber\u00e4kningar med hj\u00e4lp av operatorer. Vi ber maskinen r\u00e4kna ut 1 + 3, men ocks\u00e5 jobbigare ber\u00e4kning vi helst slipper g\u00f6ra utan en dators hj\u00e4lp. Raderna som b\u00f6rjar med en hashtag \u00e4r en kommentar, det beh\u00f6ver du inte skriva men det \u00e4r ett s\u00e4tt att g\u00f6ra anteckningar i sin kod. Kommentarer anv\u00e4nds ofta p\u00e5 detta s\u00e4tt f\u00f6r att f\u00f6rklara den kod som sedan f\u00f6ljer.<\/p>\n<pre># skriv ut summan av en addition\nprint(1+3)\n\n# en multiplikation som \u00e4r dryg i huvudr\u00e4kning\nprint(78324687324676*12321)\n\n# division\nprint(1\/3)\n\n# sammanfoga text, s\u00e5 kallad konkatenering\nprint(\"Hello\" + \"world\" + \"!\")<\/pre>\n<p>Vi har tre matematiska exempel; addition, multiplikation, division. Vi avslutar med konkatenering, allts\u00e5 att addera textstr\u00e4ngar vilket ger en l\u00e5ng textstr\u00e4ng.<\/p>\n<h3><a name=\"_Toc3815759\"><\/a>1.3 Variabler<\/h3>\n<p>F\u00f6r att tillf\u00e4lligt spara information kan man anv\u00e4nda variabler. Det \u00e4r som namngivna beh\u00e5llare du kan stoppa ner lite allt m\u00f6jligt. T\u00e4nk dig en hink du kan l\u00e4gga lite vad du vill i, det kan vara grus, vatten eller glassb\u00e5tar.<\/p>\n<p>En po\u00e4ng med variabler \u00e4r att din kod blir l\u00e4ttare att l\u00e4sa, \u00e5tminstone om du namnger dina variabler p\u00e5 ett logiskt och beskrivande s\u00e4tt. <strong>Du f\u00e5r allts\u00e5 namnge dina variabler n\u00e4stan hur du vill, men det finns krav som att de inte kan inneh\u00e5lla mellanslag, specialtecken och kan inte b\u00f6rja med en siffra.<\/strong><\/p>\n<p>Det tredje kodexemplet g\u00e5r ut p\u00e5 att r\u00e4kna p\u00e5 omkretsen av en rektangel. Notera att vi inte skriver ut m\u00e5ttenheten efter respektive siffra, om vi skrev <em>9 cm <\/em>skulle datorn inte f\u00f6rst\u00e5 eftersom vi blandar en siffra med bokst\u00e4ver. Vi skriver ist\u00e4llet endast in siffran.<\/p>\n<pre>rektangel_y = 9\nrektangel_x = 7\n\nomkrets = (rektangel_y * 2) + (rektangel_x * 2)\nprint(omkrets)<\/pre>\n<p>Om du skriver av ovanst\u00e5ende kod exakt och k\u00f6r cellen ska den svara med siffran <em>32<\/em>. Det vill s\u00e4ga omkretsen av rektangeln med sidornas m\u00e5tt 9 och 7.<\/p>\n<p><em>rektangel_y<\/em> och <em>rektangel_x<\/em> \u00e4r de olika l\u00e4ngder som rektangelns sidor har. Om man tar sidorna multiplicerat med sig sj\u00e4lva och adderar resultaten har man f\u00e5tt rektangelns alla fyra sidor och vet hur l\u00e5ngt det \u00e4r runt.<\/p>\n<p>Samma matematikregler du \u00e4r van vid, som att utr\u00e4kningar inom parentes k\u00f6rs f\u00f6rst, fungerar n\u00e4r du programmerar. Ibland skriver man koden \u00f6vertydlig mest f\u00f6r att g\u00f6ra den mer l\u00e4sbar, \u00e4ven fast parenteser inte alltid beh\u00f6vs \u00e4r det vanligt att hitta dem i alla fall.<\/p>\n<h3><a name=\"_Toc3815760\"><\/a>1.4 Lista saker<\/h3>\n<p>Det finns flera olika sorters listor inom programmering. De \u00e4r specialiserade f\u00f6r olika anv\u00e4ndningsomr\u00e5den, som att alltid vara sorterade eller kunna inneh\u00e5lla olika komplexa saker.<\/p>\n<p>Po\u00e4ngen med en lista \u00e4r dock sj\u00e4lvf\u00f6rklarande, man vill lista saker.<\/p>\n<p>Vi b\u00f6rjar med att skapa en tom lista, sedan l\u00e4gger vi till tv\u00e5 frukter.<\/p>\n<pre>favvo_frukt = list()\n\n# l\u00e4gga till n\u00e5got till en lista\nfavvo_frukt.append(\"\u00c4pple\")\nfavvo_frukt.append(\"Apelsin\")\n\nprint(favvo_frukt)\nprint(type(favvo_frukt))<\/pre>\n<p>H\u00e4r l\u00e4gger vi tv\u00e5 g\u00e5nger till nya frukter till listan som heter <em>favvo_frukt<\/em>. Sedan skriver vi ut listans inneh\u00e5ll och till sist skriver vi ut vilken datatyp som variabeln\/listan <em>favvo_frukt<\/em> \u00e4r.<\/p>\n<h3><a name=\"_Toc3815761\"><\/a>1.5 Importera funktioner och moduler<\/h3>\n<p>Programmeringsspr\u00e5k har en massa funktioner man kan l\u00e4ra k\u00e4nna och ha nytta av. Dessa funktioner brukar kallas f\u00f6r dess standardbibliotek. Exempelvis kan man be om hj\u00e4lp med saker som v\u00e4rdet Pi ist\u00e4llet f\u00f6r att beh\u00f6va skriva in decimalerna f\u00f6r hand. V\u00e4rdet av Pi finns i en modul som heter &#8217;math&#8217;, det \u00e4r inte konstigare \u00e4n att vi importerar <em>&#8217;math&#8217;<\/em>.<\/p>\n<pre>import math\n\nprint(\"Pi \u00e4r\", math.pi)<\/pre>\n<p>Efter att vi importerat matematik-delen av Pythons standardbibliotek anv\u00e4nder vi funktionen print() f\u00f6r att f\u00f6rst skriva ut texten \u201d<em>Pi \u00e4r<\/em>\u201d och sedan anropar vi math-modulens underdel pi som d\u00e5 ger oss siffror tillbaka.<\/p>\n<h3><a name=\"_Toc3815762\"><\/a>1.6 If-satser<\/h3>\n<p>Artificiell intelligens beskylls ibland f\u00f6r att enbart best\u00e5 av en massa villkor, if-satser allts\u00e5. H\u00e4r ska vi s\u00e4tta upp villkor. Nu b\u00f6rjar vi n\u00e4rma oss smarthet och inte bara ha en massa ber\u00e4kningskraft. Dock \u00e4r if-satser egentligen bara ett s\u00e4tt att beskriva regler.<\/p>\n<p>Men fr\u00e5gan \u00e4r om du skulle kunna avsl\u00f6ja en &#8221;AI&#8221; som har miljontals f\u00e4rdiga svar p\u00e5 fr\u00e5gor?<\/p>\n<p>Denna \u00f6vning handlar om att plocka fram aktuell information, n\u00e4mligen innevarande veckodag. Eftersom det \u00e4r en maskin det handlar om s\u00e5 \u00e4r veckodagarna numrerade snarare \u00e4n att det \u00e4r m\u00e5ndag till s\u00f6ndag det handlar om.<\/p>\n<p>Precis som med exemplet tidigare med matematik-modulen och talet Pi s\u00e5 drar vi nytta av modulen f\u00f6r datumtid och importerar datum. H\u00e4r st\u00f6ter du f\u00f6r f\u00f6rsta g\u00e5ngen p\u00e5 ett indrag i koden. Antingen g\u00f6r du dessa med tabbtangenten eller tre mellanslag \u2013 det \u00e4r viktigt att du enbart g\u00f6r p\u00e5 det ena eller andra s\u00e4ttet. Datorer \u00e4r kinkiga.<\/p>\n<pre>from datetime import date\n\nveckodag = date.weekday(date.today()) # m\u00e5ndag \u00e4r 0, tisdag \u00e4r 1 -&gt; s\u00f6ndag \u00e4r 6\nprint(\"Nummer p\u00e5 veckodagen\", veckodag)\n\nif veckodag &gt; 4:\n\u00a0 \u00a0print(\"Nu \u00e4r det helg!\")\nelif veckodag is 4:\n\u00a0 \u00a0print(\"N\u00e4stan helg, det \u00e4r ju fredag\")\nelse:\n\u00a0 \u00a0print(\"Nope, inte helg...\")<\/pre>\n<p>Veckodagen \u00e4r allts\u00e5 en siffra mellan 0 och 6. Man b\u00f6rjar (n\u00e4stan) alltid med siffran noll n\u00e4r det g\u00e4ller data och olika sorters listningar av saker. Har maskinen du k\u00f6r med svenska inst\u00e4llningar kan du r\u00e4kna med att 0 st\u00e5r f\u00f6r m\u00e5ndag, men risken \u00e4r att 0 \u00e4r f\u00f6r s\u00f6ndag p\u00e5 grund av \u201ckulturella inst\u00e4llningar\u201d, men det \u00e4r inget vi kommer g\u00e5 djupare in p\u00e5 h\u00e4r.<\/p>\n<p>S\u00e5 vad \u00e4r det f\u00f6r if-satser vi kodat? F\u00f6rst s\u00e4ger vi att om\/if <em>veckodag<\/em> \u00e4r mer \u00e4n fyra, d\u00e5 vill vi skriva ut att \u201cNu \u00e4r det helg!\u201d. <em>elif<\/em> betyder typ \u201celler om\u201d och den kollar om <em>veckodag<\/em> \u00e4r exakt 4, allts\u00e5 inte mer \u00e4n fyra som f\u00f6reg\u00e5ende, s\u00e5 skriver vi ut n\u00e5got annat. Siffran fyra representerar allts\u00e5 fredag, fem f\u00f6r l\u00f6rdag och sex f\u00f6r s\u00f6ndag.<\/p>\n<p>If-blocket avslutas med <em>else<\/em>. Man kan s\u00e4ga att h\u00e4r landar man alltid om inget av det tidigare varit sant. Om inget av ovanst\u00e5ende if\/elif \u00e4r sant s\u00e5 \u00e4r det inte helg, det \u00e4r m\u00e5ndag-torsdag.<\/p>\n<p>Det finns allts\u00e5 tre sammankopplade regler som g\u00f6r detta kodblock dynamiskt. F\u00f6rst fr\u00e5gar vi om veckodagen \u00e4r l\u00f6rdag eller s\u00f6ndag. Senare om det \u00e4r fredag. Om inget av dessa st\u00e4mmer kan vi konstatera att det varken \u00e4r fredag eller helg.<\/p>\n<p>T\u00e4nk dig hur du skulle fr\u00e5ga en m\u00e4nniska f\u00f6r att lista ut vad det \u00e4r f\u00f6r frukt hen har i sin v\u00e4ska. <em>\u00c4r den gr\u00f6n? Ja! Ok, \u00e4r den oval? Nej! Jag tror det \u00e4r ett gr\u00f6nt \u00e4pple.<\/em><\/p>\n<p>Samma system kan du fundera kring n\u00e4r det g\u00e4ller triage, allts\u00e5 en initial bed\u00f6mning av hur illa d\u00e4ran en patient \u00e4r. Eller det enklare <a href=\"https:\/\/sv.wikipedia.org\/wiki\/LABC\">LABC (Livsfarligt l\u00e4ge \u2013 Andning \u2013 Bl\u00f6dning \u2013 Chock)<\/a> som \u00e4ven vi som inte \u00e4r v\u00e5rdkunniga ska ha som st\u00f6d f\u00f6r att prioritera vad vi unders\u00f6ker vid en krissituation. Det \u00e4r som ett intervjumanus om du ringer 112 n\u00e4r du hittat n\u00e5gon liggandes p\u00e5 gatan.<\/p>\n<p>F: Har du undanr\u00f6jd eventuellt livsfarligt l\u00e4ge?<br \/>\nS: Ja, jag sl\u00e4pade personen bort fr\u00e5n bilv\u00e4gen upp p\u00e5 trottoaren!<br \/>\nF: Andas personen?<br \/>\nS: Ja!<br \/>\nF: Bl\u00f6der personen?<br \/>\nS: Ja!<\/p>\n<p>I detta fallet stannar vi p\u00e5 bl\u00f6dningen och n\u00e5r aldrig <em>Chock<\/em> s\u00e5 som LABC:s \u201calgoritm\u201d \u00e4r utformad. Vi beh\u00f6ver ta hand om bl\u00f6dningen eller \u00e5tminstone bed\u00f6ma hur allvarlig den \u00e4r innan vi kan g\u00e5 vidare.<\/p>\n<h3><a name=\"_Toc3815763\"><\/a>1.7 Slutligen, slingor, loopar, iteratorer, k\u00e4rt barn<\/h3>\n<p>F\u00f6r att syssels\u00e4tta en maskin med lite mer jobb kan man instruera den att g\u00f6ra n\u00e5got tills dess att den \u00e4r f\u00e4rdig. H\u00e4r f\u00f6ljer ett exempel p\u00e5 det.<\/p>\n<p>Vi skapar en lista med f\u00f6rnamn. Den d\u00e4r typen av parentes hittar du med Alt Gr intryckt och s\u00e5 trycker du p\u00e5 antingen 8 eller 9. Du p\u00e5 Mac anv\u00e4nder Option-knappen och 8 eller 9. T\u00e4nk p\u00e5 att skriva alla namn p\u00e5 en och samma rad, annars kommer du f\u00e5 syntax error.<\/p>\n<pre># en sorts loop \u00e4r for-loopen, den matas med en lista av n\u00e5got och betar av den\nlista_med_namn = [\"Nisse\", \"Greta\", \"Magdalena\", \"Harald\", \"Lily\", \"Sven\"]\n\nfor namn in lista_med_namn:\n\u00a0 \u00a0print(namn)<\/pre>\n<p>Den avslutande kodsnutten \u00e4r en for-loop. Koden \u00e4r lite bakv\u00e4nd. T\u00e4nk p\u00e5 att vi k\u00f6r raden print(namn) lika m\u00e5nga g\u00e5nger som det finns namn i listan <em>lista_med_namn<\/em>.<\/p>\n<p>S\u00e5 <em>namn<\/em> \u00e4r allts\u00e5 en variabel som f\u00f6rsta varvet i loopen inneh\u00e5ller <em>Nisse<\/em>, andra g\u00e5ngen <em>Greta<\/em> och s\u00e5 vidare.<\/p>\n<p>Det som kommer h\u00e4nda n\u00e4r du k\u00f6r den h\u00e4r koden \u00e4r att den skriver ut f\u00f6rnamnen vart och ett p\u00e5 egen rad. F\u00f6rst kommer <em>Nisse<\/em>.<\/p>\n<p>Det var det, nu ska vi kolla p\u00e5 lite machine learning.<\/p>\n<h1><a name=\"_Toc3815764\"><\/a>\u00d6vning 2: enkel supervised machine learning<\/h1>\n<p>Nu ska vi testa lite machine learning. Det blir inte m\u00e5nga rader kod, men desto mer abstrakt t\u00e4nkande.<\/p>\n<p>Konceptet \u00e4r att mata maskinen med data den ska l\u00e4ra sig av. Den data maskinen tr\u00e4nar p\u00e5 kommer utg\u00f6ra allt den vet om n\u00e5got och vara grunden f\u00f6r ett s\u00e5 kallat beslutstr\u00e4d. Ett beslutstr\u00e4d \u00e4r ett s\u00e4tt att sammanst\u00e4lla kunskap, det \u00e4r inte l\u00e4mpligt f\u00f6r alla problem men \u00e4r en begriplig b\u00f6rjan f\u00f6r den som vill testa machine learning.<\/p>\n<figure id=\"attachment_2007\" aria-describedby=\"caption-attachment-2007\" style=\"width: 700px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/12.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2007\" src=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/12.jpg\" alt=\"Figur 12: Beslutstr\u00e4d \u00e4r nyttiga f\u00f6r att klassificera saker. Som ifall en viss frukt \u00e4r ett \u00e4pple eller apelsin.\" width=\"700\" height=\"590\" srcset=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/12.jpg 700w, https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/12-300x253.jpg 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/a><figcaption id=\"caption-attachment-2007\" class=\"wp-caption-text\">Figur 12: Beslutstr\u00e4d \u00e4r nyttiga f\u00f6r att klassificera saker. Som ifall en viss frukt \u00e4r ett \u00e4pple eller apelsin.<\/figcaption><\/figure>\n<p>Att l\u00e4ra en maskin genom exempel och erfarenheter, ist\u00e4llet f\u00f6r att manuellt mata in regler. Detta genom supervised machine learning. Maskinen ska f\u00f6rutsp\u00e5 om en ny frukt \u00e4r en apelsin eller ett \u00e4pple baserat p\u00e5 tidigare erfarenheter.<\/p>\n<p>Nu ska vi \u00f6ppna filen som heter:<\/p>\n<ul>\n<li>02-supervised-machine-learning.ipynb<\/li>\n<\/ul>\n<h3><a name=\"_Toc3815765\"><\/a>2.1 Samla in tr\u00e4ningsdata<\/h3>\n<p>Det som avsl\u00f6jar denna machine learning som just en supervised machine learning \u00e4r f\u00f6r att vi har labels. Labels \u00e4r de etiketter med beskrivande svar vi matar maskinen med.<\/p>\n<p>Egentligen beh\u00f6ver du bara skriva de tre raderna som inte \u00e4r bortkommenterade med en br\u00e4dg\u00e5rd\/hashtagg som f\u00f6rsta tecken. Kommentarerna \u00e4r bara d\u00e4r f\u00f6r att f\u00f6rklara hur vi skriver om v\u00e5ra data till nummer, vilket maskinen beh\u00f6ver.<\/p>\n<p>Strax efter koden kommer du f\u00e5 respektive del f\u00f6rklarad. Det \u00e4r inte s\u00e5 komplicerat egentligen.<\/p>\n<pre>from sklearn import tree\n\n# features: vikt i gram, ytans beskaffenhet (1 f\u00f6r len, 0 f\u00f6r gropig)\n# features = [[140, \"len\"], [130, \"len\"], [150, \"gropig\"], [170, \"gropig\"]]\nfeatures = [[140, 1], [130, 1], [150, 0], [170, 0]]\n\n# labels = [\"\u00e4pple\", \"\u00e4pple\", \"apelsin\", \"apelsin\"]\n# labels = 0 f\u00f6r \u00e4pple, 1 f\u00f6r apelsin\nlabels = [0, 0, 1, 1]<\/pre>\n<p>Den f\u00f6rsta insatsen \u00e4r att importera scikit-learn. Det \u00e4r en s\u00e5 kallad modul, den hj\u00e4lper oss att genomf\u00f6ra machine learning utan att beh\u00f6va skriva all kod fr\u00e5n grunden.<\/p>\n<p>Sedan skapar vi en variabel, <em>features<\/em>, som f\u00e5r en lista med fyra olika frukter. Den f\u00f6rsta frukten v\u00e4ger 140 gram och har en len yta, den andra v\u00e4ger 130 gram och har ocks\u00e5 en len yta. De tv\u00e5 sista frukterna v\u00e4ger 150-170 gram och har en gropig yta. <strong>Eftersom maskiner f\u00f6redrar siffror skriver vi om ytans beskaffenhet; 1 f\u00e5r symbolisera len yta, 0 f\u00e5r symbolisera gropig yta.<\/strong> S\u00e5 nu har de fyra frukterna tv\u00e5 egenskaper vardera som \u00e4r siffror.<\/p>\n<p>Sist ska vi ber\u00e4tta f\u00f6r maskinen vilka av dessa frukter som \u00e4r ett \u00e4pple och vilka som \u00e4r en apelsin. Dessa uppgifter kallas f\u00f6r <em>labels<\/em>, du kan t\u00e4nka p\u00e5 dem som att du s\u00e4tter etiketter p\u00e5 respektive frukt. Genom att labels ens existerar och kan hj\u00e4lpa maskinen att l\u00e4ra sig \u00e4r denna kod supervised machine learning. Om inga labels finns \u00e4r det ist\u00e4llet unsupervised, d\u00e5 \u00e4r det upp till maskinen sj\u00e4lv att lista ut och gruppera dessa frukter p\u00e5 egen hand.<\/p>\n<h3><a name=\"_Toc3815766\"><\/a>2.2 Tr\u00e4na upp klassificeraren och leta m\u00f6nster i data<\/h3>\n<p>Vi skapar en ny variabel som vi d\u00f6per till <em>klass<\/em>. Den f\u00e5r f\u00f6rst datatypen att vara en beslutstr\u00e4dsklassificerare. P\u00e5 rad tv\u00e5 ger vi beslutstr\u00e4det den data den beh\u00f6ver f\u00f6r att bygga upp sin kunskapsmodell (beslutstr\u00e4det, allts\u00e5). <em>features<\/em> \u00e4r allts\u00e5 v\u00e5ra fyra frukter fr\u00e5n det tidigare kodblocket, <em>labels<\/em> \u00e4r v\u00e5r klassificering att tv\u00e5 av frukterna \u00e4r \u00e4pplen och tv\u00e5 \u00e4r apelsiner.<\/p>\n<pre>klass = tree.DecisionTreeClassifier()\nklass = klass.fit(features, labels)<\/pre>\n<p>Ordet \u201cfit\u201d inom machine learning kanske kan \u00f6vers\u00e4ttas till svenska som att \u201cpassa in dessa data i din struktur\u201d. Det \u00e4r allts\u00e5 n\u00e4r vi anropar <em>klass.fit()<\/em> som maskinen sorterar upp sina intryck i ett beslutstr\u00e4d. Den l\u00e4r sig allts\u00e5 sj\u00e4lv baserat p\u00e5 data, utan att uttryckligen ha programmerats med f\u00f6rbest\u00e4mda regler.<\/p>\n<p>Nu \u00e4r ju dessa data v\u00e4ldigt banala j\u00e4mf\u00f6rt med hur avancerade AI-system fungerar, inte minst f\u00f6r att vi har en begr\u00e4nsad v\u00e4rldsbild med bara tv\u00e5 olika frukter.<\/p>\n<h3><a name=\"_Toc3815767\"><\/a>2.3 Predicera<\/h3>\n<p>Den \u00e5terst\u00e5ende uppgiften \u00e4r att f\u00f6ruts\u00e4ga om en ny frukt \u00e4r antingen ett \u00e4pple eller en apelsin \u2013 baserat p\u00e5 de tv\u00e5 egenskaper maskinen nu l\u00e4rt sig att tolka. S\u00e5 vi skapar en ny variabel, <em>ny_frukt<\/em>, och s\u00e4ger att den nya frukten v\u00e4ger 180 gram och har sl\u00e4t yta, allts\u00e5 en 1:a som ytans egenskap.<\/p>\n<p>Sen anropar vi en funktion som heter <em>predict()<\/em> och ger den v\u00e5r nya frukt. Maskinen k\u00e4nner bara till tv\u00e5 frukter, den kallar dem f\u00f6r 0 och 1. S\u00e5 om maskinen svarar att det \u00e4r frukt 1 menar den apelsin och 0 \u00e4r \u00e4pple.<\/p>\n<p>En typisk if-sats, svaret \u00e4r antingen det ena eller det andra.<\/p>\n<p>\u00c4r prediktionen 1 skriver vi ut \u201cApelsin\u201d, \u00e4r den n\u00e5got annat skriver vi ut \u201c\u00c4pple\u201d.<\/p>\n<pre>ny_frukt = [[180, 0]] # ny frukt, 180 gram och gropig yta\n\nif 1 in klass.predict(ny_frukt):\n\u00a0 \u00a0print(\"Apelsin\")\nelse:\n\u00a0 \u00a0print(\"\u00c4pple\")<\/pre>\n<p>Vi hade kunnat undvika att beh\u00f6va machine learning f\u00f6r detta lilla exempel. Skillnaden hade varit att vi d\u00e5 f\u00e5tt skriva en if-sats som kollade p\u00e5 fruktens egenskap f\u00f6r yta. Om ytan var sl\u00e4t skulle den svarat att det var ett \u00e4pple, gropig yta skulle betyda apelsin. Det hade fungerat lika bra, men vad hade vi vunnit p\u00e5 det? Vi hade inte sparat s\u00e4rskilt mycket p\u00e5 m\u00e4ngden kod vi skriva.<\/p>\n<p>Nackdelen skulle dock vara att koden blev mindre m\u00e5ngsidig, den hade inte lika bra hanterat att vi lagt till fler sorters frukter, eller nya egenskaper ut\u00f6ver vikt och yta. S\u00e5 redan med ganska sm\u00e5 datam\u00e4ngder kan principerna inom machine learning l\u00f6na sig.<\/p>\n<h2><a name=\"_Toc3815768\"><\/a>Problematisering av detta simpla exempel<\/h2>\n<p>Den h\u00e4r maskinen kan endast \u00e4pplen och apelsiner. Men l\u00e5t s\u00e4ga att vi introducerar \u00e4nnu en frukt, en som har samma lena yta som \u00e4pplet. S\u00e4g ett p\u00e4ron. D\u00e5 kommer kunskapen inte att r\u00e4cka till eftersom det eventuellt bara \u00e4r vikten som skiljer ett p\u00e4ron fr\u00e5n ett \u00e4pple. I det fallet skulle vi beh\u00f6va ha mer data om frukterna. Det skulle exempelvis kunna vara f\u00e4rgen, men \u00e4ven \u00e4pplen kan vara lite gr\u00f6na. Kanske om man tar in hur fruktens form \u00e4r.<\/p>\n<p>Det h\u00e4r resonemanget \u00e4r ett exempel p\u00e5 varf\u00f6r man ofta \u00e4r intresserad all data man kan komma \u00f6ver inom AI, det \u00e4r f\u00f6rst efter en tid du vet vad du inte verkar beh\u00f6va.<\/p>\n<p>Ett annat problem med den kod vi skrivit \u00e4r att frukternas vikt och deras ytas lenhet\/gropighet inte \u00e4r balanserade enligt samma skala. Ytan \u00e4r antingen ett eller noll, medan vikten \u00e4r inom ett st\u00f6rre spann, 130-170 gram av de fyra \u201dtr\u00e4ningsfrukterna\u201d. Det h\u00e4r \u00e4r ett problem man adresserar genom att jobba med feature engineering. Att harmonisera olika v\u00e4rden s\u00e5 en inte \u00e4r fullt s\u00e5 utslagsgivande.<\/p>\n<p>Om du vill kolla p\u00e5 denna skevhet i ovanst\u00e5ende kod kan du testa att ange att frukten v\u00e4ger 145 gram och har en gropig yta (0). Du kommer f\u00e5 svaret att det \u00e4r ett \u00e4pple, trots att frukten har en gropig yta och \u00e4r tyngre \u00e4n det tyngsta exemplet p\u00e5 tidigare \u00e4pplen. Vill man balansera fruktens vikt och yta kan man tvinga in dem i samma skala. Antingen att de \u00f6vers\u00e4tts till en gemensam skala mellan 0-10, eller att en len yta f\u00e5r representeras av 130 som den l\u00e4ttaste frukten och gropig yta f\u00e5r vara 170 som den tyngsta frukten.<\/p>\n<p>Det var det hela \ud83d\ude42<\/p>\n<p><a href=\"#_ftnref1\" name=\"_ftn1\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Del 5 i bloggserien f\u00f6r uppdraget Swelife \ud83d\ude0d AI. Kul att du vill l\u00e4ra dig lite om praktisk AI och specifikt machine learning! H\u00e4r kommer ett sj\u00e4lvstudiematerial vi tar fram f\u00f6r h\u00f6stens inspirationsworkshops inom Swelife, men ocks\u00e5 n\u00e5got vi testar tillsammans med VGR:s regionutveckling, bland annat p\u00e5 konferensen RegLab i mars i V\u00e4ster\u00e5s.<\/p>\n","protected":false},"author":3,"featured_media":2008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[1016,1015,761,1017,762,504,515,984,617,982,985],"class_list":["post-1986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-innovation","tag-anaconda","tag-jupyter-notebook","tag-machine-learning-ml","tag-markdown","tag-microsoft-azure","tag-programmering","tag-python","tag-reglab","tag-supervised-learning","tag-swelife-ai","tag-vasteras"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introduktion till supervised machine learning med enkel programmering<\/title>\n<meta name=\"description\" content=\"L\u00e4gg tv\u00e5 timmars sj\u00e4lvstudie med Python-programmering och l\u00e4r dig supervised machine learning som kan klassificera frukter.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduktion till supervised machine learning med enkel programmering\" \/>\n<meta property=\"og:description\" content=\"L\u00e4gg tv\u00e5 timmars sj\u00e4lvstudie med Python-programmering och l\u00e4r dig supervised machine learning som kan klassificera frukter.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\" \/>\n<meta property=\"og:site_name\" content=\"Utveckling i VGR\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-21T22:50:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-09-17T11:22:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"982\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcus \u00d6sterberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marcusosterberg\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcus \u00d6sterberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\"},\"author\":{\"name\":\"Marcus \u00d6sterberg\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/person\/89521ab4d20982613661305cbdd5bc79\"},\"headline\":\"En introduktion till AI-tekniken supervised machine learning med enkel Python-programmering\",\"datePublished\":\"2019-03-21T22:50:16+00:00\",\"dateModified\":\"2019-09-17T11:22:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\"},\"wordCount\":5148,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#organization\"},\"image\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg\",\"keywords\":[\"Anaconda\",\"Jupyter Notebook\",\"Machine Learning (ML)\",\"Markdown\",\"Microsoft Azure\",\"Programmering\",\"Python\",\"RegLab\",\"Supervised learning\",\"Swelife AI\",\"V\u00e4ster\u00e5s\"],\"articleSection\":[\"Innovation\"],\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\",\"url\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\",\"name\":\"Introduktion till supervised machine learning med enkel programmering\",\"isPartOf\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg\",\"datePublished\":\"2019-03-21T22:50:16+00:00\",\"dateModified\":\"2019-09-17T11:22:51+00:00\",\"description\":\"L\u00e4gg tv\u00e5 timmars sj\u00e4lvstudie med Python-programmering och l\u00e4r dig supervised machine learning som kan klassificera frukter.\",\"breadcrumb\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage\",\"url\":\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg\",\"contentUrl\":\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg\",\"width\":2000,\"height\":982,\"caption\":\"G\u00f6ta \u00c4lv\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Hem\",\"item\":\"https:\/\/vgrblogg.se\/utveckling\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"En introduktion till AI-tekniken supervised machine learning med enkel Python-programmering\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#website\",\"url\":\"https:\/\/vgrblogg.se\/utveckling\/\",\"name\":\"Utveckling i VGR\",\"description\":\"Inblick i utvecklingsarbetet inom VGR\",\"publisher\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vgrblogg.se\/utveckling\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#organization\",\"name\":\"Utveckling i VGR\",\"url\":\"https:\/\/vgrblogg.se\/utveckling\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2018\/02\/cropped-logotype_color-1.png\",\"contentUrl\":\"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2018\/02\/cropped-logotype_color-1.png\",\"width\":1234,\"height\":250,\"caption\":\"Utveckling i VGR\"},\"image\":{\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/person\/89521ab4d20982613661305cbdd5bc79\",\"name\":\"Marcus \u00d6sterberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3e009001c1a7e5183f24b2642fdbf63d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3e009001c1a7e5183f24b2642fdbf63d?s=96&d=mm&r=g\",\"caption\":\"Marcus \u00d6sterberg\"},\"description\":\"Jobbade som utvecklings- och innovationsledare p\u00e5 V\u00e4stra G\u00f6talandsregionen, bl.a. p\u00e5 avdelningen V\u00e5rdens digitalisering, med expertis inom webbanalys och webbutveckling. Slutade 2022. F\u00f6rfattare till boken Webbstrategi f\u00f6r alla, samt Webbanalys - f\u00f6rst\u00e5 och f\u00f6rb\u00e4ttra anv\u00e4ndarnas upplevelse. Mer om Marcus \u00d6sterberg finns h\u00e4r.\",\"sameAs\":[\"https:\/\/marcusosterberg.se\",\"https:\/\/se.linkedin.com\/in\/marcusosterberg\",\"https:\/\/x.com\/marcusosterberg\"],\"url\":\"https:\/\/vgrblogg.se\/utveckling\/author\/mosterberg\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introduktion till supervised machine learning med enkel programmering","description":"L\u00e4gg tv\u00e5 timmars sj\u00e4lvstudie med Python-programmering och l\u00e4r dig supervised machine learning som kan klassificera frukter.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/","og_locale":"sv_SE","og_type":"article","og_title":"Introduktion till supervised machine learning med enkel programmering","og_description":"L\u00e4gg tv\u00e5 timmars sj\u00e4lvstudie med Python-programmering och l\u00e4r dig supervised machine learning som kan klassificera frukter.","og_url":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/","og_site_name":"Utveckling i VGR","article_published_time":"2019-03-21T22:50:16+00:00","article_modified_time":"2019-09-17T11:22:51+00:00","og_image":[{"width":2000,"height":982,"url":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg","type":"image\/jpeg"}],"author":"Marcus \u00d6sterberg","twitter_card":"summary_large_image","twitter_creator":"@marcusosterberg","twitter_misc":{"Skriven av":"Marcus \u00d6sterberg","Ber\u00e4knad l\u00e4stid":"27 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#article","isPartOf":{"@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/"},"author":{"name":"Marcus \u00d6sterberg","@id":"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/person\/89521ab4d20982613661305cbdd5bc79"},"headline":"En introduktion till AI-tekniken supervised machine learning med enkel Python-programmering","datePublished":"2019-03-21T22:50:16+00:00","dateModified":"2019-09-17T11:22:51+00:00","mainEntityOfPage":{"@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/"},"wordCount":5148,"commentCount":2,"publisher":{"@id":"https:\/\/vgrblogg.se\/utveckling\/#organization"},"image":{"@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage"},"thumbnailUrl":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg","keywords":["Anaconda","Jupyter Notebook","Machine Learning (ML)","Markdown","Microsoft Azure","Programmering","Python","RegLab","Supervised learning","Swelife AI","V\u00e4ster\u00e5s"],"articleSection":["Innovation"],"inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/","url":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/","name":"Introduktion till supervised machine learning med enkel programmering","isPartOf":{"@id":"https:\/\/vgrblogg.se\/utveckling\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage"},"image":{"@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage"},"thumbnailUrl":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg","datePublished":"2019-03-21T22:50:16+00:00","dateModified":"2019-09-17T11:22:51+00:00","description":"L\u00e4gg tv\u00e5 timmars sj\u00e4lvstudie med Python-programmering och l\u00e4r dig supervised machine learning som kan klassificera frukter.","breadcrumb":{"@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#primaryimage","url":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg","contentUrl":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2019\/03\/gota-alv.jpg","width":2000,"height":982,"caption":"G\u00f6ta \u00c4lv"},{"@type":"BreadcrumbList","@id":"https:\/\/vgrblogg.se\/utveckling\/2019\/03\/21\/en-introduktion-till-supervised-machine-learning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Hem","item":"https:\/\/vgrblogg.se\/utveckling\/"},{"@type":"ListItem","position":2,"name":"En introduktion till AI-tekniken supervised machine learning med enkel Python-programmering"}]},{"@type":"WebSite","@id":"https:\/\/vgrblogg.se\/utveckling\/#website","url":"https:\/\/vgrblogg.se\/utveckling\/","name":"Utveckling i VGR","description":"Inblick i utvecklingsarbetet inom VGR","publisher":{"@id":"https:\/\/vgrblogg.se\/utveckling\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vgrblogg.se\/utveckling\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/vgrblogg.se\/utveckling\/#organization","name":"Utveckling i VGR","url":"https:\/\/vgrblogg.se\/utveckling\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/logo\/image\/","url":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2018\/02\/cropped-logotype_color-1.png","contentUrl":"https:\/\/vgrblogg.se\/utveckling\/wp-content\/uploads\/sites\/3\/2018\/02\/cropped-logotype_color-1.png","width":1234,"height":250,"caption":"Utveckling i VGR"},"image":{"@id":"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/person\/89521ab4d20982613661305cbdd5bc79","name":"Marcus \u00d6sterberg","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/vgrblogg.se\/utveckling\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3e009001c1a7e5183f24b2642fdbf63d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3e009001c1a7e5183f24b2642fdbf63d?s=96&d=mm&r=g","caption":"Marcus \u00d6sterberg"},"description":"Jobbade som utvecklings- och innovationsledare p\u00e5 V\u00e4stra G\u00f6talandsregionen, bl.a. p\u00e5 avdelningen V\u00e5rdens digitalisering, med expertis inom webbanalys och webbutveckling. Slutade 2022. F\u00f6rfattare till boken Webbstrategi f\u00f6r alla, samt Webbanalys - f\u00f6rst\u00e5 och f\u00f6rb\u00e4ttra anv\u00e4ndarnas upplevelse. Mer om Marcus \u00d6sterberg finns h\u00e4r.","sameAs":["https:\/\/marcusosterberg.se","https:\/\/se.linkedin.com\/in\/marcusosterberg","https:\/\/x.com\/marcusosterberg"],"url":"https:\/\/vgrblogg.se\/utveckling\/author\/mosterberg\/"}]}},"_links":{"self":[{"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/posts\/1986"}],"collection":[{"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/comments?post=1986"}],"version-history":[{"count":7,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/posts\/1986\/revisions"}],"predecessor-version":[{"id":2178,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/posts\/1986\/revisions\/2178"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/media\/2008"}],"wp:attachment":[{"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/media?parent=1986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/categories?post=1986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vgrblogg.se\/utveckling\/wp-json\/wp\/v2\/tags?post=1986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}