Budowanie i Trening Prostej Regresji Liniowej (Scikit-learn)

W dzisiejszej lekcji nauczysz się budować i trenować prosty model regresji liniowej przy użyciu biblioteki Scikit-learn w języku Python. Zdobędziesz praktyczne umiejętności w zakresie przygotowania danych, budowy modelu, jego treningu oraz ewaluacji.

Learning Objectives

  • Zrozumiesz podstawowe pojęcia związane z regresją liniową.
  • Poznasz kroki niezbędne do przygotowania danych dla modelu regresji liniowej.
  • Nauczysz się budować i trenować model regresji liniowej za pomocą Scikit-learn.
  • Zrozumiesz podstawy ewaluacji modelu regresji liniowej.

Lesson Content

Wprowadzenie do Regresji Liniowej

Regresja liniowa to podstawowa technika uczenia maszynowego, która służy do przewidywania wartości zmiennej zależnej (wyjście, np. cena domu) na podstawie jednej lub więcej zmiennych niezależnych (wejście, np. powierzchnia domu). Zakłada ona liniową zależność między zmiennymi. Prosty model regresji liniowej ma postać: y = mx + b, gdzie y to przewidywana wartość, x to zmienna wejściowa, m to nachylenie linii (współczynnik), a b to punkt przecięcia z osią y (wyraz wolny). Przykładowo, jeśli chcemy przewidzieć cenę domu na podstawie jego powierzchni, x będzie powierzchnią, y ceną, a m i b zostaną oszacowane przez model podczas procesu uczenia.

Przygotowanie Danych

Przed zbudowaniem modelu regresji liniowej, musimy przygotować nasze dane. Obejmuje to zebranie danych, ich czyszczenie (np. obsługa brakujących wartości), a następnie podział na zbiór treningowy (do uczenia modelu) i testowy (do ewaluacji). Scikit-learn oferuje wiele narzędzi do tych celów.

Przykład:
Załóżmy, że mamy dane o powierzchniach mieszkań i ich cenach.

import numpy as np
from sklearn.model_selection import train_test_split

# Przykładowe dane (powierzchnia w metrach kwadratowych, cena w tysiącach złotych)
powierzchnia = np.array([50, 70, 60, 80, 90, 100, 110, 120, 130, 140]).reshape(-1, 1) # reshape, bo potrzebujemy macierzy
cena = np.array([250, 350, 300, 400, 450, 500, 550, 600, 650, 700])

# Podział danych na zbiór treningowy i testowy (80% trening, 20% test)
X_train, X_test, y_train, y_test = train_test_split(powierzchnia, cena, test_size=0.2, random_state=42) 

print("X_train:", X_train)
print("y_train:", y_train)

Ważne jest, by dane wejściowe (X) były w formacie macierzy (dwuwymiarowej tablicy).

Budowa i Trening Modelu Regresji Liniowej (Scikit-learn)

Scikit-learn ułatwia budowę i trening modeli uczenia maszynowego. Po przygotowaniu danych, możemy zbudować model regresji liniowej, wytrenować go na danych treningowych, a następnie ocenić jego skuteczność na danych testowych.

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Budowa modelu
model = LinearRegression()

# Trening modelu na danych treningowych
model.fit(X_train, y_train)

# Przewidywanie na danych testowych
y_pred = model.predict(X_test)

# Ewaluacja modelu (obliczanie błędu średniokwadratowego)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print("RMSE:", rmse)

# Wyświetlanie współczynników modelu (nachylenie i wyraz wolny)
print("Współczynnik (m):", model.coef_)
print("Wyraz wolny (b):", model.intercept_)

model.fit() trenuje model. model.predict() dokonuje przewidywań. mean_squared_error mierzy błąd między przewidywanymi a rzeczywistymi wartościami.

Ewaluacja Modelu

Po wytrenowaniu model musi zostać oceniony, aby sprawdzić, jak dobrze radzi sobie z przewidywaniem na nowych danych. Popularne metryki to: błąd średniokwadratowy (RMSE – Root Mean Squared Error), który mierzy średnią różnicę między przewidywanymi a rzeczywistymi wartościami. Im niższe RMSE, tym lepszy model.

RMSE = sqrt(1/n * Σ(y_i - y_pred_i)^2)

Inne metryki: R-kwadrat (coeficient of determination) – określa, jaka część zmienności danych jest wyjaśniana przez model. Im bliżej 1, tym lepiej.

Deep Dive

Explore advanced insights, examples, and bonus exercises to deepen understanding.

Rozszerzenie Lekcji: Deployment i Monitoring Modelu – Dzień 3

Świetnie! Już znasz podstawy regresji liniowej, przygotowania danych i ewaluacji modelu. Dziś idziemy o krok dalej, koncentrując się na wdrażaniu modelu i jego monitorowaniu, co jest kluczowe w prawdziwym środowisku produkcyjnym.

Deep Dive: Wdrażanie i Monitoring – Realny Świat

Wdrożenie modelu to dopiero początek. Kluczowe jest jego skuteczne monitorowanie w środowisku produkcyjnym. Dlaczego? Bo dane w świecie realnym ciągle się zmieniają (tzw. "data drift"). Model, który działał świetnie wczoraj, dzisiaj może już dawać słabe wyniki.

Data Drift: Zmiany w rozkładzie danych wejściowych. Na przykład, jeśli Twój model przewiduje ceny nieruchomości, a nagle wchodzą nowe przepisy dotyczące energetyczności budynków, Twój model może przestać działać prawidłowo.

Monitorowanie: Polega na śledzeniu wydajności modelu (np. RMSE, R-kwadrat) w czasie rzeczywistym lub w regularnych odstępach. Używamy narzędzi do zbierania metryk, generowania alertów i analizy przyczyn problemów.

Techniki Wdrażania:

  • API: Udostępnianie modelu przez interfejs API (np. Flask, FastAPI) do integracji z innymi aplikacjami.
  • Batch Prediction: Przetwarzanie danych wsadowo (np. codzienne przewidywania).
  • Edge Computing: Uruchamianie modelu na urządzeniach brzegowych (np. smartfony, przemysłowe czujniki).

Narzędzia do Monitoringu: Wiele firm oferuje rozwiązania do monitorowania modeli (np. MLflow, Prometheus z Grafaną).

Bonus Ćwiczenia

Ćwiczenie 1: Prosty Dashboard Monitoringu

Wyobraź sobie, że wdrożyłeś swój model regresji liniowej do przewidywania cen mieszkań. Użyj biblioteki matplotlib do stworzenia prostego wykresu, który w czasie (np. po dniach) pokazuje RMSE twojego modelu. Symuluj dane dla RMSE (np. generuj losowe wartości). Jak zareagowałbyś, gdyby RMSE nagle wzrosło?

Ćwiczenie 2: Symulacja Data Drift

Zaprojektuj prostą symulację data drift. Weź swój model regresji liniowej z poprzedniej lekcji. Zmodyfikuj zbiór danych treningowych, dodając do zmiennej niezależnej (np. powierzchnia mieszkania) stałą wartość w kolejnych iteracjach. Sprawdź, jak wpływa to na RMSE Twojego modelu.

Real-World Connections: Zastosowania

Wdrażanie i monitoring modeli to codzienność w wielu branżach:

  • E-commerce: Przewidywanie zachowań zakupowych, rekomendacje produktów. Monitorowanie konwersji, ROI reklam.
  • Finanse: Wykrywanie oszustw, analiza ryzyka kredytowego. Monitorowanie wskaźników ryzyka.
  • Medycyna: Wczesne wykrywanie chorób na podstawie danych pacjentów. Monitorowanie skuteczności leczenia.
  • Transport: Prognozowanie ruchu drogowego, optymalizacja tras. Monitorowanie opóźnień, wydajności floty.

Pamiętaj, że wdrożenie i monitoring są tak samo ważne jak sama budowa modelu. Bez nich model w realnym świecie jest bezużyteczny!

Challenge Yourself: Zaawansowane Zadania

Spróbuj zintegrować swój model regresji liniowej z prostym API (np. Flask). Utwórz endpoint, który przyjmuje dane wejściowe i zwraca przewidywaną cenę. Dodatkowo, zaimplementuj proste logowanie metryk wydajności modelu po każdym wywołaniu API (np. RMSE dla podanych danych wejściowych).

Further Learning: Dalsza Eksploracja

  • MLOps (Machine Learning Operations): Cały proces od budowy modelu do jego monitoringu i utrzymania.
  • Model Serving Frameworks: Flask, FastAPI, TensorFlow Serving, TorchServe.
  • Model Drift Detection: Narzędzia i metody wykrywania zmian w danych.
  • A/B Testing: Porównywanie wydajności różnych modeli w realnym środowisku.
  • Prometheus & Grafana: Zaawansowane narzędzia do monitoringu i wizualizacji danych.

Interactive Exercises

Ćwiczenie 1: Przygotowanie Danych

Stwórz przykładowe dane dla regresji liniowej: liczba godzin nauki i ocena z egzaminu. Podziel dane na zbiory treningowy i testowy. Użyj `train_test_split` z `sklearn.model_selection`.

Ćwiczenie 2: Budowa i Trening Modelu

Na podstawie danych z poprzedniego ćwiczenia, zbuduj model regresji liniowej za pomocą `LinearRegression` z `sklearn.linear_model`. Wytrenuj model na zbiorze treningowym.

Ćwiczenie 3: Przewidywanie i Ewaluacja

Wykorzystaj wytrenowany model do przewidywania ocen na zbiorze testowym. Oblicz RMSE, aby ocenić skuteczność modelu. Użyj `mean_squared_error` z `sklearn.metrics`.

Ćwiczenie 4: Analiza Wyników

Zastanów się: Jaki wpływ na RMSE miał podział danych na treningowe i testowe? Jak interpretujesz współczynniki modelu (nachylenie i wyraz wolny)? Odpowiedz w kilku zdaniach.

Knowledge Check

Question 1: Która z poniższych bibliotek jest używana do budowy modeli uczenia maszynowego w Pythonie?

Question 2: Co mierzy RMSE?

Question 3: Jaką postać ma prosty model regresji liniowej?

Question 4: Jakiego rodzaju danych wymaga model regresji liniowej jako wejście?

Question 5: Do czego służy funkcja `fit()` w Scikit-learn?

Practical Application

Wyobraź sobie, że pracujesz w firmie zajmującej się sprzedażą mieszkań. Twoim zadaniem jest stworzenie modelu, który przewiduje cenę mieszkania na podstawie jego powierzchni i lokalizacji. Użyj regresji liniowej, a następnie zinterpretuj wyniki i oceń przydatność modelu w realnych warunkach.

Key Takeaways

Next Steps

Zapoznaj się z pojęciem krzywej uczenia (learning curve) i różnymi metodami ewaluacji modeli. Przygotuj się na naukę o modelach regresji wielorakiej (wielowymiarowej).

Your Progress is Being Saved!

We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.

Next Lesson (Day 4)