Hoppa till huvudinnehåll

Machine Learning

I detta kapitel går vi från teori till praktik. Övningarna är designade för att ge dig en känsla för hur maskininlärningsmodeller fungerar "under huven" och hur deras logik påverkar dig i din digitala vardag.

Övning 1: Bygg din första ML-modell med Orange

Syfte: Att visuellt och intuitivt bygga, träna och utvärdera olika maskininlärningsmodeller utan att behöva skriva någon kod.

Verktyg: Orange Data Mining (ett gratis, open-source-verktyg för visuell programmering av ML-flöden).

Instruktioner:

  1. Ladda Data: Starta Orange. Dra ut en "File"-widget på arbetsytan och ladda in ett klassiskt dataset, till exempel "Titanic - Survivability". Detta dataset innehåller information om passagerarna på Titanic (ålder, kön, klass, etc.) och om de överlevde eller inte.
  2. Utforska Datan: Koppla "File"-widgeten till en "Data Table"-widget för att se hur datan ser ut. Koppla den också till en "Distributions"-widget för att visualisera fördelningen av olika egenskaper (t.ex. hur många som överlevde vs. dog).
  3. Bygg Modeller:
    • Dra ut tre olika inlärnings-widgets, t.ex. "Decision Tree", "Neural Network" och "Logistic Regression".
    • Koppla "File"-widgeten till alla tre. Detta tränar varje modell på Titanic-datan.
  4. Utvärdera Modeller:
    • Dra ut en "Test & Score"-widget.
    • Koppla alla tre modell-widgets till "Test & Score".
    • "Test & Score" kommer nu att automatiskt köra en utvärdering (korsvalidering) och visa dig prestandan för varje modell. Vilken modell var bäst på att förutsäga överlevnad?
  5. Visualisera: Koppla "Decision Tree"-widgeten till en "Tree Viewer"-widget. Nu kan du se exakt vilka regler som beslutsträdet har lärt sig! Vilka egenskaper (t.ex. kön, klass) var viktigast för att förutsäga överlevnad enligt trädet?
ILLUSTRATION TODO

En skärmdump av ett enkelt Orange-flöde. En "File"-widget kopplas till en "Data Table" och tre modell-widgets ("Decision Tree", "Neural Network", "Logistic Regression"). Dessa tre kopplas i sin tur till en "Test & Score"-widget. Flödet ska vara enkelt att följa.

Övning 2: Spotify API-Labb - Utforska din egen musiksmak

Syfte: Att använda ett API (Application Programming Interface) för att hämta data från en verklig tjänst och utföra en enkel klusteranalys.

Instruktioner:

  • (Denna övning kräver ett förberett Google Colab-notebook från läraren, som hanterar inloggningen till Spotify API).
  1. Öppna det förberedda Colab-notebooket.
  2. Följ instruktionerna för att ge det tillgång till ditt Spotify-konto.
  3. Kör koden som hämtar dina 50 mest spelade låtar och deras "audio features" (t.ex. danceability, energy, acousticness, valence - hur glad låten låter).
  4. Koden kommer sedan att köra en klusteralgoritm (t.ex. K-Means) för att försöka gruppera dina låtar i 3-5 olika kluster baserat på deras musikaliska egenskaper.
Analysera resultaten
  • Titta på låtarna i varje kluster. Verkar grupperingen logisk för dig? Har den lyckats identifiera olika "stämningar" eller genrer i din musiksmak?
  • Titta på de genomsnittliga "audio features" för varje kluster. Är ett kluster signifikant mer "dansbart" eller har mer "energi" än ett annat?
  • Hur skulle Spotify kunna använda denna typ av information för att skapa bättre spellistor för dig?

Övning 3: Algoritm-granskning - Bryt dig ur din bubbla

Syfte: Att medvetandegöra och aktivt försöka manipulera de rekommendationsalgoritmer du interagerar med dagligen.

Instruktioner:

  1. Välj en plattform du använder ofta som har ett starkt rekommendationsflöde (t.ex. YouTube, TikTok, Instagram Reels).
  2. Del 1: Granskning (Dag 1):
    • Skrolla igenom ditt flöde i 10-15 minuter.
    • Dokumentera (skriv ner eller ta skärmdumpar) de första 20-30 videorna/inläggen.
    • Vilka teman, åsikter och typer av innehåll dominerar? Hur ser din filterbubbla ut?
  3. Del 2: Intervention (Dag 2-3):
    • Bestäm dig för att aktivt "träna om" algoritmen. Välj ett ämne eller en genre du normalt aldrig tittar på (t.ex. trädgårdsskötsel, klassisk musik, ishockey, en politisk åsikt du inte håller med om).
    • Ägna 10-15 minuter åt att aktivt söka efter och titta på innehåll inom detta nya ämne. Gilla videorna, följ några konton, titta på hela videor.
  4. Del 3: Utvärdering (Dag 4):
    • Skrolla igenom ditt flöde igen i 10-15 minuter.
    • Dokumentera de första 20-30 posterna.
    • Jämför med Dag 1: Hur har ditt flöde förändrats? Hur snabbt anpassade sig algoritmen? Har det nya innehållet tagit över helt, eller blandas det med ditt gamla flöde?
Reflektera

Vad säger den här övningen om hur formbar din digitala verklighet är?

Övning 4: Från Visuellt till Kod - Träna en modell med Python

Syfte: Att överbrygga gapet mellan visuella verktyg som Orange och att skriva kod. Denna övning introducerar det grundläggande arbetsflödet i ett maskininlärningsprojekt med Python och det populära biblioteket Scikit-learn.

Verktyg: Google Colab, Python, Scikit-learn, Pandas.

Instruktioner:

  • (Denna övning är tänkt att genomföras i ett Google Colab-notebook. Läraren kan tillhandahålla en startmall eller så kan ni skapa en egen och klistra in kodavsnitten nedan.)
Kör i Google Colab

Steg 1: Importera bibliotek och ladda data Först behöver vi ladda de verktyg vi ska använda och det klassiska "Iris"-datasetet, som innehåller mått på tre olika sorters iris-blommor.

# Importera nödvändiga bibliotek
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# Ladda Iris-datasetet
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.Series(iris.target)

print("Datasetets första 5 rader (egenskaper):")
print(X.head())
print("\nDatasetets första 5 rader (målvariabel):")
print(y.head())

Steg 2: Dela upp i tränings- och testdata Detta är ett av de viktigaste stegen i all övervakad inlärning. Vi tränar modellen på en del av datan och testar den på en annan, "osedd" del för att få ett rättvist mått på dess prestanda.

# Dela upp datan: 80% för träning, 20% för test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print(f"Träningsdata har {X_train.shape[0]} exempel.")
print(f"Testdata har {X_test.shape[0]} exempel.")

Steg 3: Välj och träna modellen Vi väljer att använda ett beslutsträd (Decision Tree), precis som vi kunde göra i Orange. fit()-metoden är själva träningsprocessen.

# Skapa en instans av beslutsträds-modellen
model = DecisionTreeClassifier()

# Träna modellen på träningsdatan
model.fit(X_train, y_train)

print("Modellen har tränats!")

Steg 4: Gör förutsägelser och utvärdera Nu använder vi den tränade modellen för att göra förutsägelser på vår testdata. Sedan jämför vi modellens gissningar med det faktiska facit (y_test) för att se hur många den gissade rätt på.

# Gör förutsägelser på testdatan
predictions = model.predict(X_test)

# Beräkna träffsäkerheten (accuracy)
accuracy = accuracy_score(y_test, predictions)

print(f"Modellens förutsägelser: {predictions}")
print(f"Det verkliga facit: {y_test.values}")
print(f"\nModellens träffsäkerhet: {accuracy:.2f}")
Reflektionsfrågor
  1. Hur hög träffsäkerhet fick er modell? Varför tror ni att den fungerar så bra (eller dåligt)?
  2. Jämför denna process med hur ni arbetade i Orange. Vilka är fördelarna med att skriva kod (t.ex. flexibilitet, kontroll)? Vilka är nackdelarna (t.ex. brantare inlärningskurva)?
  3. I train_test_split-funktionen finns en parameter random_state=42. Prova att ändra siffran (eller ta bort parametern helt) och kör om hela skriptet. Vad händer med träffsäkerheten? Varför är det viktigt att ha en random_state när man vill kunna återskapa sina resultat?
Rekommenderad Läsning & Reflektion

Bok: The Filter Bubble av Eli Pariser

Läs: Eli Pariser - The Filter Bubble: What the Internet Is Hiding from You.

Reflektera: Pariser myntade begreppet "filterbubbla". Försök att aktivt hitta bevis för din egen filterbubbla. Gå till en nyhetssida du sällan besöker eller sök på ett ämne i ett inkognitofönster och jämför resultaten med dina vanliga flöden. Vad var de största skillnaderna? Hur kan detta påverka en persons världsbild över tid?