Algorytmy uczenia maszynowego: kompletny przewodnik po rozmowach technicznych
Opanowanie kluczowych algorytmów uczenia maszynowego wymaganych na rozmowach technicznych w 2026 roku. Uczenie nadzorowane i nienadzorowane, metody zespolowe, metryki ewaluacji i regularyzacja z implementacjami w Pythonie.

Algorytmy uczenia maszynowego stanowią fundament każdej rozmowy technicznej dla data scientistów w 2026 roku. Niezależnie od tego, czy stanowisko dotyczy juniora, czy seniora ML engineer, rekruterzy oczekują od kandydatów umiejętności wyjaśnienia, zaimplementowania i porównania podstawowych rodzin algorytmów — od modeli liniowych, przez metody zespolowe, aż po techniki nienadzorowane. Poniższy przewodnik omawia każdą kategorię algorytmów z implementacjami w Pythonie przy użyciu scikit-learn 1.8, strategiami ewaluacji i dokładnymi kompromisami, które odróżniają mocnych kandydatów od reszty.
Algorytmy uczenia maszynowego dzielą się na trzy rodziny: uczenie nadzorowane (regresja, klasyfikacja), uczenie nienadzorowane (klasteryzacja, redukcja wymiarowości) i uczenie przez wzmacnianie. Rozmowy techniczne w 2026 roku skupiają się mocno na dwóch pierwszych, z naciskiem na to, kiedy wybrać jeden algorytm zamiast innego i jak oceniać wyniki.
Uczenie nadzorowane: regresja i klasyfikacja
Algorytmy uczenia nadzorowanego uczą się na danych oznakowanych — każdy przykład treningowy zawiera dane wejściowe i oczekiwany wynik. Regresja przewiduje wartości ciągłe (ceny domów, temperatury), podczas gdy klasyfikacja przypisuje etykiety dyskretne (spam/nie spam, diagnoza choroby). Znajomość obu jest niezbędna na rozmowach z zakresu data science.
Regresja liniowa pozostaje punktem wyjścia dla każdego zadania regresji. Modeluje zależność między cechami a zmienną docelową jako ważoną sumę. Rekruterzy często proszą kandydatów o jej implementację, wyjaśnienie funkcji kosztu i omówienie sytuacji, w których model zawodzi.
# linear_regression_demo.py
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# Generate synthetic housing data: square footage -> price
np.random.seed(42)
sqft = np.random.uniform(500, 3000, size=200).reshape(-1, 1)
price = 150 * sqft.flatten() + np.random.normal(0, 20000, size=200)
X_train, X_test, y_train, y_test = train_test_split(sqft, price, test_size=0.2)
model = LinearRegression()
model.fit(X_train, y_train) # Fit on training data
predictions = model.predict(X_test) # Predict on unseen data
print(f"Coefficient: {model.coef_[0]:.2f}") # Weight per sqft
print(f"R2 Score: {r2_score(y_test, predictions):.4f}")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, predictions)):.2f}")Współczynnik ujawnia, o ile każdy dodatkowy metr kwadratowy wpływa na cenę. Wynik R2 i RMSE mierzą jakość predykcji — dwie metryki, których interpretację rekruterzy oczekują bez wahania.
Do klasyfikacji regresja logistyczna stosuje funkcję sigmoid, aby generować prawdopodobieństwa. Mimo swojej nazwy rozwiązuje problemy klasyfikacyjne. Granica decyzyjna, parametr regularyzacji C i różnica między ustawieniami binarnym a wieloklasowym to popularne tematy rozmów.
# logistic_classification.py
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
data = load_breast_cancer() # Binary classification dataset
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.2, random_state=42
)
clf = LogisticRegression(max_iter=5000, C=1.0) # C controls regularization strength
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred, target_names=data.target_names))Raport klasyfikacji pokazuje precyzję, czułość i F1-score dla każdej klasy — dokładnie te metryki omówione w kolejnej sekcji. Płynne odczytywanie tych raportów to umiejętność, którą rekruterzy szybko weryfikują.
Drzewa decyzyjne i metody zespolowe dominujące na rozmowach
Drzewa decyzyjne rekurencyjnie dzielą dane na podstawie progów cech. Samodzielnie łatwo ulegają przeuczeniu. Metody zespolowe — Random Forest i Gradient Boosting — rozwiązują ten problem, łącząc wiele drzew. Te algorytmy pojawiają się na niemal każdej rozmowie ML, ponieważ równoważą interpretowalność z wydajnością.
Random Forest buduje wiele niezależnych drzew na próbkach bootstrapowych i uśrednia ich predykcje. Redukuje wariancję bez zwiększania obciążenia. Pytania o algorytmy drzewiaste i zespolone często testują zrozumienie różnicy między baggingiem a boostingiem, ważności cech i szacowania błędu out-of-bag.
# ensemble_comparison.py
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import cross_val_score
data = load_wine() # 3-class classification
X, y = data.data, data.target
# Random Forest: parallel trees, reduces variance
rf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
rf_scores = cross_val_score(rf, X, y, cv=5, scoring='accuracy')
# Gradient Boosting: sequential trees, reduces bias
gb = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
gb_scores = cross_val_score(gb, X, y, cv=5, scoring='accuracy')
print(f"Random Forest: {rf_scores.mean():.4f} +/- {rf_scores.std():.4f}")
print(f"Gradient Boosting: {gb_scores.mean():.4f} +/- {gb_scores.std():.4f}")Random Forest sprawdza się, gdy celem jest stabilność i minimalne strojenie. Gradient Boosting często osiąga wyższą dokładność, ale wymaga starannego doboru hiperparametrów — tempo uczenia, liczba estymatorów i głębokość drzewa wzajemnie na siebie wpływają. Rekruterzy sprawdzają, czy kandydat rozumie ten kompromis, a nie tylko który wynik liczbowy jest większy.
| Kryterium | Random Forest | Gradient Boosting | |-----------|--------------|-------------------| | Szybkość trenowania | Szybkie (równoległe) | Wolniejsze (sekwencyjne) | | Ryzyko przeuczenia | Niskie | Wyższe bez strojenia | | Wrażliwość na hiperparametry | Niska | Wysoka | | Ważność cech | Wbudowana (oparta na nieczystości) | Wbudowana (oparta na zysku) | | Najlepsze zastosowanie | Modele bazowe, dane z szumem | Konkursy, dane tabelaryczne |
Uczenie nienadzorowane: klasteryzacja i redukcja wymiarowości
Algorytmy nienadzorowane odkrywają strukturę w danych bez etykiet. K-Means i PCA (analiza głównych składowych) to dwie techniki, o które rekruterzy pytają najczęściej. Opanowanie obu jest kluczowe na rozmowach z zakresu uczenia nienadzorowanego.
K-Means dzieli dane na k klastrów, minimalizując wariancję wewnątrz klastra. Algorytm iteruje między przypisywaniem punktów do najbliższego centroidu a aktualizacją centroidów. Dwa krytyczne pytania rekrutacyjne: jak wybrać k (metoda łokcia, współczynnik sylwetkowy) i co się dzieje z klastrami o nieregularnym kształcie.
# kmeans_clustering.py
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score
from sklearn.datasets import load_iris
data = load_iris()
X = StandardScaler().fit_transform(data.data) # Scale features first
# Test multiple values of k to find optimal cluster count
for k in [2, 3, 4, 5]:
kmeans = KMeans(n_clusters=k, n_init=10, random_state=42)
labels = kmeans.fit_predict(X)
sil = silhouette_score(X, labels) # Higher = better-defined clusters
inertia = kmeans.inertia_ # Within-cluster sum of squares
print(f"k={k}: silhouette={sil:.3f}, inertia={inertia:.1f}")Skalowanie cech przed klasteryzacją jest obowiązkowe — K-Means używa odległości euklidesowej, więc nieskalowane cechy o dużym zakresie dominują w metryce. Ten szczegół pojawia się na rozmowach regularnie.
PCA redukuje wymiarowość, projeksjonując dane na kierunki maksymalnej wariancji. Służy dwóm celom: wizualizacji (rzutowanie do 2D/3D) i przetwarzaniu wstępnemu (usuwanie szumu, przyspieszanie modeli downstream). Rekruterzy oczekują wyjaśnienia współczynników wyjaśnionej wariancji i sposobu wyboru liczby składowych.
PCA działa najlepiej, gdy cechy są skorelowane i sygnał koncentruje się w kilku kierunkach. Na rzadkich, wysokowymiarowych danych (tekst, kategorie zakodowane one-hot) PCA może niszczyć użyteczną strukturę. W takich przypadkach lepiej sprawdzają się Truncated SVD lub specjalizowane embeddingi.
Gotowy na rozmowy o Data Science & ML?
Ćwicz z naszymi interaktywnymi symulatorami, flashcards i testami technicznymi.
Metryki ewaluacji modeli, które każdy kandydat musi znać
Wybór właściwej metryki ewaluacji ma większe znaczenie niż wybór odpowiedniego algorytmu. Model z 99% dokładnością na niezbalansowanych danych (1% przypadków oszustwa) może być bezużyteczny — po prostu za każdym razem przewiduje brak oszustwa. Rekruterzy używają pytań o metryki, by sprawdzić praktyczną ocenę sytuacji.
Dla klasyfikacji cztery metryki dominują na rozmowach:
- Precyzja: spośród wszystkich pozytywnych predykcji, ile jest poprawnych? Kluczowa, gdy fałszywe alarmy są kosztowne (filtrowanie spamu)
- Czułość (Recall): spośród wszystkich rzeczywistych przypadków pozytywnych, ile zostało wykrytych? Kluczowa, gdy przeoczenia są kosztowne (diagnostyka medyczna)
- F1-Score: średnia harmoniczna precyzji i czułości — zrównoważony wybór, gdy żaden typ błędu wyraźnie nie dominuje
- AUC-ROC: mierzy jakość rankingową dla wszystkich progów klasyfikacji — niezbędna do porównywania modeli
Dla regresji kluczowe metryki to RMSE (penalizuje duże błędy), MAE (odporna na wartości odstające) i R2 (część wyjaśnionej wariancji). Wiedza o tym, kiedy preferować MAE zamiast RMSE — lub odwrotnie — sygnalizuje prawdziwe zrozumienie. Warto ćwiczyć stosowanie tych metryk w scenariuszach rozmów o regresji.
# evaluation_metrics.py
from sklearn.metrics import (
precision_score, recall_score, f1_score,
roc_auc_score, confusion_matrix
)
import numpy as np
# Simulated predictions on imbalanced data (5% positive class)
np.random.seed(42)
y_true = np.array([1]*50 + [0]*950)
y_pred = np.array([1]*40 + [0]*10 + [1]*30 + [0]*920) # Some errors
print(f"Precision: {precision_score(y_true, y_pred):.3f}") # 40/(40+30) = 0.571
print(f"Recall: {recall_score(y_true, y_pred):.3f}") # 40/(40+10) = 0.800
print(f"F1-Score: {f1_score(y_true, y_pred):.3f}") # Harmonic mean
cm = confusion_matrix(y_true, y_pred)
print(f"\nConfusion Matrix:\n{cm}")
# [[920, 30], -> TN=920, FP=30
# [10, 40]] -> FN=10, TP=40Poprawne odczytanie macierzy pomyłek wymaga praktyki. Komórka w lewym górnym rogu (prawdziwe negatywy) i prawym dolnym rogu (prawdziwe pozytywy) reprezentują prawidłowe predykcje. Komórki poza przekątną pokazują dwa typy błędów. Rekruterzy często prezentują macierz pomyłek i proszą kandydatów o obliczenie precyzji i czułości na jej podstawie.
Kompromis obciążenie-wariancja i strategie regularyzacji
Kompromis między obciążeniem a wariancją to najważniejsza koncepcja w teorii uczenia maszynowego. Wysokie obciążenie oznacza, że model jest zbyt prosty i niedouczony. Wysoka wariancja oznacza, że model jest zbyt złożony i przetrenowany. Każdy wybór algorytmu i decyzja dotycząca hiperparametrów wiąże się z nawigowaniem tym kompromisem.
Regularyzacja kontroluje złożoność modelu, penalizując duże współczynniki. Regresja Ridge (L2) zmniejsza współczynniki w kierunku zera, ale zachowuje wszystkie cechy. Regresja Lasso (L1) sprowadza część współczynników dokładnie do zera, wykonując niejawną selekcję cech. Elastic Net łączy oba podejścia. Te rozróżnienia pojawiają się zarówno w pytaniach o klasyfikację, jak i w kontekstach regresji.
Regularyzacja penalizuje wielkość współczynników. Jeśli cechy mają różne skale (wiek w latach kontra dochód w tysiącach), kara nieproporcjonalnie wpływa na cechy o mniejszej skali. Przed zastosowaniem Ridge, Lasso lub Elastic Net zawsze należy standaryzować cechy. Zapomnienie o tym to częsty błąd na rozmowach.
# regularization_comparison.py
from sklearn.linear_model import Ridge, Lasso, ElasticNet
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_diabetes
X, y = load_diabetes(return_X_y=True)
models = {
"Ridge (L2)": make_pipeline(StandardScaler(), Ridge(alpha=1.0)),
"Lasso (L1)": make_pipeline(StandardScaler(), Lasso(alpha=0.1)),
"ElasticNet (L1+L2)": make_pipeline(StandardScaler(), ElasticNet(alpha=0.1, l1_ratio=0.5)),
}
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5, scoring='r2')
print(f"{name:25s} R2: {scores.mean():.4f} +/- {scores.std():.4f}")Pipeline zapewnia, że skalowanie i regularyzacja odbywają się razem, zapobiegając wyciekowi danych spowodowanemu dopasowaniem skalera na danych testowych. Rekruterzy specjalnie testują ten aspekt: zastosowanie fit_transform na całym zbiorze danych przed podziałem to błąd dyskwalifikujący na rozmowach na poziomie senior.
Przygotowanie do pytań o algorytmy ML w 2026 roku
Przygotowanie do rozmów o algorytmach uczenia maszynowego w 2026 roku wykracza poza zapamiętywanie wzorów. Zespoły rekrutacyjne oceniają trzy wymiary: rozumienie teoretyczne (czy kandydat potrafi wyjaśnić matematykę?), praktyczna implementacja (czy potrafi napisać kod?) i ocena sytuacji (czy wie, który algorytm pasuje do problemu?).
Ścieżka przygotowania do rozmów z data science na SharpSkill obejmuje wszystkie trzy wymiary z praktycznymi pytaniami. Oto obszary generujące najwięcej pytań rekrutacyjnych:
- Dobór algorytmu: mając opis zbioru danych, uzasadnienie wyboru jednego algorytmu zamiast innego. Należy uwzględnić rozmiar danych, typy cech, wymagania interpretowalności i ograniczenia czasu trenowania
- Strojenie hiperparametrów: wyjaśnienie, co kontroluje każdy hiperparametr i jak wpływa na kompromis obciążenie-wariancja. Grid search i random search to minimum — optymalizacja bayesowska z Optuna jest coraz częściej oczekiwana
- Aspekty produkcyjne: wykrywanie dryfu danych, monitorowanie modeli, testy A/B i feature store to standardowe tematy dla stanowisk mid-level i senior w 2026 roku
- Wyjaśnialność: wraz z rozwojem wyjaśnialnej AI kandydaci powinni znać wartości SHAP i metody ważności cech. Dokumentacja scikit-learn dostarcza solidnych implementacji referencyjnych
Walidacja krzyżowa zasługuje na szczególną uwagę. Rekruterzy oczekują wyjaśnienia, dlaczego pojedynczy podział na zbiór treningowy i testowy jest niewystarczający, jak działa k-krotna walidacja krzyżowa i kiedy konieczne są folds stratyfikowane (niezbalansowane klasy). Dane szeregów czasowych wymagają podziału temporalnego — fakt, który zaskakuje wielu kandydatów.
Zacznij ćwiczyć!
Sprawdź swoją wiedzę z naszymi symulatorami rozmów i testami technicznymi.
Podsumowanie
- Modele liniowe (regresja, logistyczna) stanowią fundament — przed przejściem do złożonych algorytmów należy zrozumieć ich założenia, funkcje kosztu i przypadki, w których zawodzą
- Drzewa decyzyjne samodzielnie przetrenowują; Random Forest i Gradient Boosting rozwiązują to odpowiednio przez bagging i boosting, oferując różne profile kompromisów
- K-Means i PCA pokrywają podstawy uczenia nienadzorowanego, ale zawsze należy skalować cechy i znać ograniczenia każdej metody
- Metryki ewaluacji muszą odpowiadać problemowi biznesowemu — sama dokładność jest bez znaczenia na niezbalansowanych danych; precyzja, czułość, F1 i AUC-ROC służą różnym celom
- Regularyzacja (Ridge, Lasso, Elastic Net) kontroluje przetrenowanie, ale działa poprawnie tylko na standaryzowanych cechach wewnątrz pipeline
- Sukces na rozmowach w 2026 roku wymaga wykazania się umiejętnością doboru algorytmów, a nie tylko implementacji — wyjaśnienie dlaczego stojącego za każdym wyborem jest kluczowe
Tagi
Udostępnij
