Jak działa regresja liniowa i gradient descent - przewodnik od podstaw
Źródło: Link
Źródło: Link
118 lekcji bez kodowania. ChatGPT, Claude, Gemini, automatyzacje. Notatnik AI i AI Coach w cenie.
Uczenie maszynowe brzmi skomplikowanie. Zanim jednak zaczniesz martwić się o transformery i sieci neuronowe, musisz opanować podstawy. Regresja liniowa to najprostszy algorytm ML, jaki istnieje - i jednocześnie fundament, na którym zbudujesz całą resztę wiedzy.
Ten przewodnik przeprowadzi Cię przez mechanikę regresji liniowej i gradient descent - krok po kroku, bez matematycznego żargonu. Zrozumiesz, jak algorytm uczy się przewidywać ceny domów, kierunek jazdy autonomicznego samochodu czy wyniki sprzedaży.
Regresja liniowa to algorytm, który uczy się przewidywać wartości liczbowe na podstawie danych wejściowych. Przykład? Masz dane o powierzchni mieszkań i ich cenach - algorytm znajdzie zależność między tymi zmiennymi i nauczy się przewidywać cenę dla nowego mieszkania.
To problem uczenia nadzorowanego (supervised learning) - dostarczasz algorytmowi przykłady (X = powierzchnia) i odpowiedzi (Y = cena), a on uczy się mapować X na Y. W przeciwieństwie do klasyfikacji (gdzie przewidujesz kategorię, np. "spam" lub "nie spam"), regresja przewiduje wartość ciągłą - liczbę rzeczywistą.

Dlaczego zaczynasz od regresji liniowej? To najprostszy możliwy model ML. Jeśli zrozumiesz, jak działa tutaj uczenie, zrozumiesz fundament dla wszystkich bardziej złożonych algorytmów - od sieci neuronowych po GPT-5.
Zamiast abstrakcji, weźmy konkret. Masz dane o mieszkaniach w Warszawie:
Twój model ma nauczyć się przewidywać cenę dla mieszkania o powierzchni 60 m². Jak to robi? Znajduje wzór (funkcję liniową), który najlepiej opisuje zależność między powierzchnią a ceną.
Matematycznie: Y = aX + b, gdzie X to powierzchnia, Y to cena, a a i b to parametry, które model musi znaleźć. To właśnie jest uczenie - znalezienie tych parametrów.
Masz już intuicję, czym jest regresja. Teraz najważniejsze pytanie: jak algorytm znajduje te parametry a i b?
Odpowiedź: metodą prób i błędów. Nie chaotyczną - systematyczną, kierowaną przez matematykę. Ten proces nazywa się gradient descent (zejście gradientowe).
Na początku algorytm nie wie nic. Więc losuje wartości a i b. Powiedzmy: a = 2, b = 100. To daje funkcję Y = 2X + 100. Dla mieszkania 50 m² model przewiduje: 2 × 50 + 100 = 200 zł. Rzeczywista cena? 400 000 zł. Totalnie obok.
Algorytm mierzy ten błąd - różnicę między przewidywaniem a rzeczywistością. Im większy błąd, tym gorzej.
Algorytm oblicza funkcję kosztu (cost function) - liczbę, która mówi "jak bardzo się mylimy". Najprostsza wersja to średnia z kwadratów błędów dla wszystkich przykładów.
Dlaczego kwadraty? Chcemy karać duże błędy mocniej niż małe. Błąd 100 to nie dwa razy więcej niż błąd 50 - to 4 razy więcej (100² vs 50²).

Teraz magia. Algorytm patrzy, w którą stronę zmienić parametry a i b, żeby błąd był mniejszy. To właśnie gradient - kierunek najszybszego spadku.
Stoisz na zboczu góry w gęstej mgle. Nie widzisz szczytu ani doliny, czujesz tylko nachylenie terenu pod stopami. Gradient descent to strategia: "idź w dół, tam gdzie jest najbardziej stromo". Powtarzasz to setki razy, aż dojdziesz do dna doliny - minimum funkcji kosztu.
Matematycznie: obliczasz pochodną funkcji kosztu po każdym parametrze. To daje Ci kierunek. Potem robisz mały krok w tym kierunku. Powtarzasz, aż błąd przestanie maleć.
Jeden krok to za mało. Algorytm powtarza kroki 2-3 setki lub tysiące razy. Każda iteracja poprawia parametry odrobinę. Po 1000 iteracji model może mieć a = 7800, b = 10000 - i przewidywać cenę 50 m² mieszkania jako 7800 × 50 + 10000 = 400 000 zł. Dokładnie.
To uczenie maszynowe w pigułce: iteracyjna optymalizacja parametrów, aż model przestanie popełniać duże błędy.
Gradient descent ma dwa główne warianty. Różnica? Jak często aktualizujesz parametry.
Batch gradient descent patrzy na WSZYSTKIE przykłady treningowe, oblicza średni błąd, a potem robi JEDEN krok korekty parametrów. To dokładne, ale wolne - jeśli masz milion przykładów, każda iteracja zajmuje wieczność.
Kiedy używasz? Gdy masz mały zbiór danych (setki, tysiące przykładów) i zależy Ci na precyzji.
Stochastic gradient descent robi krok korekty po KAŻDYM przykładzie. Zobaczył jedno mieszkanie, policzył błąd, poprawił parametry. Zobaczył drugie, znowu poprawił. To szybkie, ale chaotyczne - parametry "skaczą" zamiast płynnie schodzić.
Kiedy używasz? Gdy masz ogromny zbiór danych (miliony przykładów) i potrzebujesz szybkości. Większość nowoczesnych modeli AI (w tym modele językowe jak GPT) używa wariantu SGD zwanego mini-batch gradient descent - kompromis między batch a SGD.

Gradient descent to iteracyjna metoda. Dla regresji liniowej istnieje jednak skrót: normal equations (równania normalne). Zamiast iterować setki razy, rozwiązujesz jeden wzór algebraiczny i dostajesz optymalne parametry od razu.
Jest haczyk. Normal equations działają tylko dla małych zbiorów danych. Jeśli masz tysiące zmiennych (features), obliczenia stają się niepraktycznie wolne. Gradient descent skaluje się lepiej.
Kiedy używasz normal equations? Gdy masz mało zmiennych (poniżej 1000) i chcesz dokładne rozwiązanie bez iteracji. To częsty wybór w analizie danych, gdzie zbiory są małe, a precyzja ważniejsza niż szybkość.
Teoria to jedno. Praktyka to drugie. Oto konkretne kroki, żeby wytrenować swój pierwszy model regresji liniowej.
pip install numpy pandas scikit-learn)Nie musisz być programistą. Jeśli umiesz skopiować kod i uruchomić skrypt, dasz radę.
Otwierasz edytor, tworzysz nowy plik Python (np. regresja.py). Wpisujesz:
import pandas as pd
# Załaduj dane z pliku CSV
data = pd.read_csv('mieszkania.csv')
print(data.head()) # Zobacz pierwsze 5 wierszy
Plik CSV powinien mieć kolumny: powierzchnia i cena. Uruchamiasz skrypt, widzisz dane. Gotowe.
Wpisujesz:
X = data[['powierzchnia']] # Zmienna wejściowa (feature)
Y = data['cena'] # Zmienna wyjściowa (target)
X to to, co model widzi (powierzchnia). Y to to, co ma przewidzieć (cena).
Wpisujesz:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, Y) # Tutaj dzieje się uczenie
print(f"Parametr a: {model.coef_[0]}")
print(f"Parametr b: {model.intercept_}")
Funkcja fit() uruchamia gradient descent (lub normal equations - scikit-learn wybiera automatycznie). Po sekundzie masz wytrenowany model. Parametry a i b są wyświetlone.
Wpisujesz:
nowe_mieszkanie = [[60]] # 60 m²
przewidywana_cena = model.predict(nowe_mieszkanie)
print(f"Przewidywana cena: {przewidywana_cena[0]} zł")
Model zwraca cenę dla mieszkania 60 m². To wszystko. Właśnie wytrenowałeś i użyłeś model uczenia maszynowego.
Wpisujesz:
from sklearn.metrics import mean_squared_error, r2_score
przewidywania = model.predict(X)
mse = mean_squared_error(Y, przewidywania)
r2 = r2_score(Y, przewidywania)
print(f"Błąd średniokwadratowy: {mse}")
print(f"R² score: {r2}")
MSE (mean squared error) to średni kwadrat błędu - im niższy, tym lepiej. R² (R-squared) to procent zmienności, który model wyjaśnia - im bliżej 1, tym lepiej. R² = 0.85 oznacza, że model wyjaśnia 85% zmienności cen.
Jeśli R² jest niskie (np. 0.3), model jest słaby. Możliwe przyczyny: za mało zmiennych (dodaj liczbę pokoi, dzielnicę), za mało danych, lub zależność nie jest liniowa.
Regresja liniowa to prosty algorytm. Łatwo jednak popełnić błędy, które psują wyniki.
Regresja liniowa działa, gdy zależność między X a Y jest... liniowa. Jeśli cena mieszkań rośnie wykładniczo (np. w centrum miasta), linia prosta nie będzie dobrze pasować. Rozwiązanie? Sprawdź wykres danych przed treningiem. Jeśli widzisz krzywą, użyj regresji wielomianowej lub innego modelu.
Jeśli jedna zmienna ma wartości 0-1, a druga 0-1000000, gradient descent może mieć problem ze znalezieniem minimum. Rozwiązanie? Znormalizuj dane przed treningiem (np. StandardScaler z scikit-learn). To przyspiesza uczenie i poprawia wyniki.
Learning rate to parametr, który kontroluje wielkość kroku w gradient descent. Zbyt duży? Algorytm "przeskakuje" minimum i nigdy nie zbiega. Zbyt mały? Uczenie trwa wieczność. Rozwiązanie? Zacznij od wartości domyślnej (np. 0.01), potem eksperymentuj.
Jeśli masz 10 przykładów i 20 zmiennych, model "zapamięta" dane zamiast się uczyć. Rozwiązanie? Użyj regularyzacji (Ridge, Lasso) lub zbierz więcej danych. Syntetyczne dane mogą pomóc, jeśli rzeczywiste są drogie.
Tak. Mimo że mamy GPT-5, Claude Opus 4.7 i Gemini 3.1 Pro, regresja liniowa wciąż jest standardem w analizie danych, ekonomii, medycynie i wszędzie tam, gdzie potrzebujesz prostego, interpretowalnego modelu. Sieci neuronowe są potężne, ale to czarne skrzynki - nie wiesz, dlaczego przewidziały X. Regresja liniowa? Widzisz dokładnie, jak każda zmienna wpływa na wynik.
Nie bezpośrednio. Regresja liniowa przewiduje wartości ciągłe (liczby), nie kategorie. Możesz użyć regresji logistycznej - wariantu regresji liniowej dostosowanego do klasyfikacji. Nazwa myląca (to nie regresja!), ale mechanizm podobny - gradient descent, funkcja kosztu, optymalizacja parametrów.
Zależy od liczby zmiennych. Zasada kciuka: co najmniej 10 przykładów na każdą zmienną. Jeśli masz 5 zmiennych, potrzebujesz minimum 50 przykładów. Mniej? Model może być niestabilny. Więcej? Lepiej. W praktyce: im więcej danych, tym lepiej model generalizuje na nowe przypadki.
Dla regresji liniowej - tak. Funkcja kosztu jest wypukła (ma jedno globalne minimum), więc gradient descent zawsze zbiega. Dla sieci neuronowych? Nie - funkcja kosztu ma wiele lokalnych minimów, więc algorytm może utknąć w jednym z nich. Dlatego w deep learningu używa się trików (momentum, adaptive learning rate), żeby pomóc algorytmowi znaleźć lepsze rozwiązanie.
Możesz spróbować, ale wyniki będą słabe. Ceny akcji zależą od setek zmiennych (wiadomości, sentyment, makroekonomia) i mają dużo szumu. Regresja liniowa zakłada, że zależność jest stabilna i liniowa - to rzadko prawda dla rynków finansowych. Lepsze narzędzia? Modele szeregów czasowych (ARIMA, LSTM) lub systemy RAG łączące dane historyczne z aktualnymi newsami.
Ten poradnik to dopiero początek. W naszym kursie "Praktyczna AI" nauczysz się korzystać z ChatGPT, Claude i innych narzędzi AI w sposób systematyczny - od zera do zaawansowanego poziomu.
Sprawdź kurs →Regresja liniowa to najprostszy algorytm uczenia maszynowego. Uczy się mapować zmienne wejściowe (X) na wyjściowe (Y) przez znalezienie optymalnych parametrów funkcji liniowej. Gradient descent to iteracyjny proces optymalizacji - algorytm poprawia parametry krok po kroku, minimalizując błąd.
Dwa warianty: batch gradient descent (patrzy na wszystkie dane przed krokiem) i stochastic gradient descent (robi krok po każdym przykładzie). Normal equations to skrót dla małych zbiorów - obliczasz optymalne parametry bez iteracji.
Praktycznie? Załaduj dane, użyj LinearRegression() z scikit-learn, wywołaj fit(), zrób przewidywanie przez predict(). Oceń jakość przez MSE i R². Unikaj typowych błędów: sprawdź liniowość danych, znormalizuj zmienne, dobierz learning rate, uważaj na overfitting.
Pobierz dowolny zbiór danych z Kaggle (np. "House Prices"), załaduj do pandas, wytrenuj model regresji liniowej według kroków z tego przewodnika. Nie czytaj więcej tutoriali - uruchom kod. Zobaczysz, jak to działa w praktyce, i zrozumiesz więcej niż z godziny teorii.
Podoba Ci się ten artykuł?
Co piątek wysyłam podsumowanie najlepszych artykułów tygodnia. Zapisz się!
90 minut praktycznej wiedzy o AI. Pokaze Ci krok po kroku, jak zaczac oszczedzac 10 godzin tygodniowo dzieki sztucznej inteligencji.
Zapisz sie na webinar