Kurs Python · Moduł 9: Machine Learning
Machine Learning - czym jest ML?
W tej lekcji4
Witaj w Module 9! Darwin tutaj z Machine Learning - maszynowym uczeniem się!
Wyobraź sobie, że masz napisać program, który na zdjęciu z fotopułapki rozpozna lwa. Zaczynasz od reguły "ma grzywę", ale lwice grzywy nie mają. Dopisujesz kolor sierści, ale na nocnym zdjęciu w podczerwieni wszystko jest szare. Po tygodniu masz sto warunków i nadal program się myli. Uczenie maszynowe odwraca ten proces: zamiast pisać reguły, pokazujesz komputerowi przykłady.
Analogia Safari: Machine Learning to jak trening zwierząt Safari - algorytm uczy się na przykładach, tak jak lew uczy się polować obserwując matkę. Im więcej przykładów, tym lepsze przewidywania!
Czym jest Machine Learning?
Machine Learning (ML) to dziedzina AI, gdzie algorytmy uczą się wzorców z danych bez jawnego programowania reguł.
Różnicę najlepiej widać obok siebie. Najpierw funkcja z ręcznie wpisaną regułą, potem opis podejścia ML:
1# Tradycyjne programowanie
2def is_lion(animal):
3 if animal.has_mane and animal.color == 'golden':
4 return True
5 return False
6
7# Machine Learning
8# Model SAM uczy się rozpoznawać lwy na podstawie TYSIĘCY zdjęć
9# bez definiowania reguł - odkrywa je sam!W pierwszej części to programista decyduje, co odróżnia lwa. W drugiej model sam wyprowadza reguły z tysięcy zdjęć z etykietami. Zwróć uwagę, co się nie zmienia: nadal potrzebujesz programisty, tylko jego praca przesuwa się z pisania warunków na przygotowanie dobrych danych.
Rodzaje uczenia maszynowego
ML dzielimy na trzy główne rodzaje, w zależności od tego, jakie wskazówki dostaje algorytm.
1. Supervised Learning (Uczenie nadzorowane)
Model uczy się na oznaczonych danych - zna prawidłowe odpowiedzi.
Dane zapisujemy jako dwie rzeczy: X to cechy (features), czyli liczby opisujące każde zwierzę, a y to etykiety (labels), czyli prawidłowe odpowiedzi:
1# Dane treningowe z etykietami
2X_train = [
3 [180, 200, 4], # waga, długość, nogi
4 [5000, 400, 4],
5 [50, 150, 4],
6]
7y_train = ['lion', 'elephant', 'cheetah'] # etykiety
8
9# Model uczy się mapowania: cechy -> etykieta
10# Potem przewiduje dla nowych danychKażdy wiersz X_train odpowiada etykiecie na tej samej pozycji w y_train. Trzy przykłady to oczywiście za mało - prawdziwy model potrzebuje setek lub tysięcy wierszy, ale kształt danych pozostaje taki sam.
Zastosowania:
- Klasyfikacja: spam/nie spam, gatunek zwierzęcia
- Regresja: przewidywanie cen, populacji
Klasyfikacja przewiduje kategorię, a regresja liczbę. To rozróżnienie wróci w następnej lekcji, gdy zbudujemy pierwszy prawdziwy klasyfikator.
2. Unsupervised Learning (Uczenie nienadzorowane)
Model sam odkrywa wzorce w nieoznaczonych danych.
Tym razem nie mamy kolumny z odpowiedziami. Są tylko obserwacje, a algorytm szuka w nich podobieństw:
1# Dane bez etykiet
2animals = [
3 [180, 200, 'savanna'],
4 [5000, 400, 'forest'],
5 [50, 150, 'savanna'],
6 [3000, 300, 'forest'],
7]
8
9# Model odkrywa grupy (klastry) samodzielnie
10# np. "zwierzęta sawanny" vs "zwierzęta lasu"Model nie wie, czym jest "sawanna", tylko zauważa, że pewne wiersze są do siebie bliższe niż inne. Uwaga praktyczna: większość algorytmów, na przykład KMeans, przyjmuje wyłącznie liczby, więc tekst taki jak 'savanna' trzeba najpierw zakodować liczbowo.
Zastosowania:
- Klasteryzacja: grupowanie klientów
- Redukcja wymiarowości: kompresja danych
- Wykrywanie anomalii: wykrywanie oszustw
3. Reinforcement Learning (Uczenie ze wzmocnieniem)
Agent uczy się poprzez próby i błędy - otrzymuje nagrody za dobre decyzje.
Tu nie ma gotowego zbioru danych. Jest agent, środowisko, lista akcji i nagroda:
1# Agent (robot Safari) w środowisku
2# Akcje: idź_w_prawo, idź_w_lewo, stop
3# Nagroda: +10 za znalezienie zwierzęcia, -1 za każdy krok
4
5# Agent uczy się optymalnej strategii eksploracjiKara za każdy krok zachęca agenta do krótkich tras, a duża nagroda za znalezienie zwierzęcia wyznacza cel. Po tysiącach prób agent wybiera akcje, które dają najwyższą łączną nagrodę.
Zastosowania:
- Gry (AlphaGo, gry Atari)
- Robotyka
- Rekomendacje
Podstawowe pojęcia ML
Zanim uruchomimy pierwszy model, zbierzmy słownik, którego będziemy używać w całym module:
1# Dataset (Zbiór danych)
2X = [[1, 2], [3, 4], [5, 6]] # Features (cechy)
3y = [0, 1, 0] # Labels (etykiety)
4
5# Training set - dane do nauki (70-80%)
6# Validation set - dane do strojenia (10-15%)
7# Test set - dane do końcowej oceny (10-20%)
8
9# Model - algorytm, który uczy się z danych
10# Prediction - przewidywanie dla nowych danych
11# Accuracy - % poprawnych przewidywańNajważniejsza zasada kryje się w podziale danych: zbioru testowego model nie może zobaczyć podczas nauki. Inaczej to tak, jakby tropiciel zdawał egzamin z tych samych śladów, na których ćwiczył - wynik wygląda świetnie, ale nic nie mówi o nowym terenie.
Workflow Machine Learning
Każdy projekt ML przechodzi przez te same etapy. Pokażę je na przykładzie z biblioteką scikit-learn (importujesz ją jako sklearn). Najpierw dane:
1# 1. Zbierz dane
2data = load_safari_data()
3
4# 2. Przygotuj dane (EDA, cleaning)
5X = data.drop('species', axis=1)
6y = data['species']load_safari_data() to tylko nazwa zastępcza - w praktyce wczytasz dane na przykład przez pd.read_csv. data.drop('species', axis=1) zwraca tabelę bez kolumny species, czyli same cechy, a data['species'] to etykiety. Oryginalna tabela data się nie zmienia.
Teraz podział na zbiór treningowy i testowy:
1# 3. Podziel na train/test
2from sklearn.model_selection import train_test_split
3X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)test_size=0.2 odkłada 20% wierszy do testów. Podział jest losowy, więc przy każdym uruchomieniu wynik będzie trochę inny - dodaj random_state=42, jeśli chcesz powtarzalności. Polecam robić to zawsze podczas nauki.
Wybieramy model i trenujemy go metodą fit:
1# 4. Wybierz i wytrenuj model
2from sklearn.ensemble import RandomForestClassifier
3model = RandomForestClassifier()
4model.fit(X_train, y_train)Random Forest to las drzew decyzyjnych, które głosują nad odpowiedzią. Na start to bardzo dobry wybór, bo działa sensownie bez strojenia parametrów. Wszystkie modele w scikit-learn mają tę samą metodę fit, więc wymiana modelu to zmiana jednej linijki.
Na koniec ocena i przewidywanie:
1# 5. Oceń model
2accuracy = model.score(X_test, y_test)
3print(f"Accuracy: {accuracy:.2%}")
4
5# 6. Użyj modelu do przewidywań
6predictions = model.predict(new_data)Dla klasyfikatora score zwraca accuracy, czyli odsetek poprawnych odpowiedzi na zbiorze testowym, a predict przyjmuje nowe wiersze w tym samym formacie co X. Samo accuracy bywa zwodnicze przy niezrównoważonych danych - o lepszych miarach powiemy w kolejnych lekcjach.
Następna lekcja: Supervised Learning, czyli uczenie nadzorowane w praktyce.
Pamiętaj: model ML to młody tropiciel - uczy się na śladach z przeszłości, a sprawdzasz go zawsze na śladach, których jeszcze nie widział.
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Czym jest Machine Learning?
2. Czym charakteryzuje się Supervised Learning?
To 2 z 3 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Układanie w pionie
Ułóż kroki workflow Machine Learning w prawidłowej kolejności:
- Układanie w pionie
Uporządkuj kroki:
- Edytor kodu
Użyj train_test_split z sklearn do podziału X i y z test_size=0.2.
- Klikanie w kolejności
Kliknij w przyciski, aby zaimportować train_test_split: