Modele liniowe: regresja i klasyfikacja
Proszę trenować modele regresji liniowej i regresji logistycznej.
Modele liniowe: regresja i klasyfikacja to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Regresja liniowa
LinearRegression dopasowuje prostą linię (lub hiperpłaszczyznę), minimalizując błąd metody najmniejszych kwadratów.
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X, y = make_regression(n_samples=200, n_features=5, noise=10, random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LinearRegression().fit(X_tr, y_tr)
print("RMSE:", mean_squared_error(y_te, model.predict(X_te))**0.5)Współczynniki modelu
Po dopasowaniu należy sprawdzić coef_ (wagi cech) oraz intercept_.
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1],[2],[3]])
y = np.array([2, 4, 6])
model = LinearRegression().fit(X, y)
print("Coef:", model.coef_) # [2.]
print("Intercept:", model.intercept_) # ~0Regresja Ridge i Lasso
Ridge (L2) i Lasso (L1) dodają regularyzację, aby zapobiegać przeuczeniu. Parametr alpha określa siłę regularyzacji.
from sklearn.linear_model import Ridge, Lasso
from sklearn.datasets import make_regression
X, y = make_regression(n_features=20, noise=15, random_state=0)
ridge = Ridge(alpha=1.0).fit(X, y)
lasso = Lasso(alpha=0.1).fit(X, y)
print("Ridge coef[:5]:", ridge.coef_[:5])
print("Lasso coef[:5]:", lasso.coef_[:5]) # some are 0 (sparse)Regresja logistyczna
LogisticRegression to liniowy klasyfikator do problemów binarnych lub wieloklasowych. Wbrew nazwie przewiduje prawdopodobieństwa klas.
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))Wieloklasowa regresja logistyczna
Należy ustawić multi_class="multinomial" lub użyć domyślnego OvR (one-vs-rest) dla co najmniej 3 klas.
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=200).fit(X, y)
print("Classes:", model.classes_) # [0 1 2]
print("Accuracy:", model.score(X, y))Skalowanie cech w modelach liniowych
Cechy w modelach liniowych należy zawsze skalować, szczególnie w przypadku regularyzacji. Nieskalowane cechy powodują pozornie różne kary.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([
("scale", StandardScaler()),
("clf", LogisticRegression())
])
pipe.fit(X_tr, y_tr)
print(pipe.score(X_te, y_te))Krzywa uczenia
Krzywa uczenia pokazuje, jak poprawia się wydajność modelu wraz ze wzrostem ilości danych treningowych — jest przydatna do diagnozowania niedouczenia i przeuczenia.
from sklearn.model_selection import learning_curve
import numpy as np
train_sizes, train_scores, val_scores = learning_curve(
LogisticRegression(), X, y, cv=5,
train_sizes=np.linspace(0.1, 1.0, 5)
)
print("Val mean:", val_scores.mean(axis=1))Współczynnik R² w regresji
r2_score mierzy proporcję wyjaśnionej wariancji. Wartość 1.0 oznacza wynik idealny, a 0 oznacza, że model nie jest lepszy od przewidywania średniej.
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
X, y = make_regression(noise=20, random_state=0)
model = LinearRegression().fit(X, y)
print("R²:", r2_score(y, model.predict(X)))Cechy wielomianowe
PolynomialFeatures umożliwia dopasowanie nieliniowych zależności za pomocą modelu liniowego.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1],[2],[3],[4],[5]])
y = np.array([1, 4, 9, 16, 25]) # y = x^2
pipe = Pipeline([
("poly", PolynomialFeatures(degree=2)),
("lr", LinearRegression())
])
pipe.fit(X, y)
print(pipe.predict([[6]])) # ~36SGDClassifier i SGDRegressor
Stochastyczny spadek gradientu umożliwia pracę z bardzo dużymi zbiorami danych, dla których standardowe solvery działają zbyt wolno.
from sklearn.linear_model import SGDClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100_000, random_state=0)
pipe = Pipeline([("sc", StandardScaler()), ("sgd", SGDClassifier())])
pipe.fit(X, y)
print(pipe.score(X, y))Ścieżki regularyzacji
Wartość alpha można zmieniać w ramach siatki za pomocą RidgeCV/LassoCV, które automatycznie wybierają najlepszą wartość alpha na podstawie walidacji krzyżowej.
from sklearn.linear_model import RidgeCV, LassoCV
from sklearn.datasets import make_regression
X, y = make_regression(n_features=20, noise=10, random_state=0)
ridge = RidgeCV(alphas=[0.1, 1, 10]).fit(X, y)
print("Best alpha:", ridge.alpha_)Szybkie sprawdzenie
Jaka jest najważniejsza różnica między regresją Ridge a regresją Lasso?
Podsumowanie
Należy używać LinearRegression do regresji, a LogisticRegression do klasyfikacji. W celu regularyzacji należy dodać Ridge/Lasso. Cechy należy zawsze skalować. Do problemów nieliniowych należy używać PolynomialFeatures. Ocenę należy przeprowadzać za pomocą r2_score (regresja) lub accuracy_score (klasyfikacja).
Często zadawane pytania
Czy lekcja „Modele liniowe: regresja i klasyfikacja” jest bezpłatna?
Tak — pełny tekst „Modele liniowe: regresja i klasyfikacja” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Modele liniowe: regresja i klasyfikacja”?
Proszę trenować modele regresji liniowej i regresji logistycznej. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Modele liniowe: regresja i klasyfikacja”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?
Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- API scikit-learn: fit, transform, predict
- Modele liniowe: regresja i klasyfikacja
- Modele drzewiaste: drzewa decyzyjne i lasy losowe
- Ocena modeli i walidacja krzyżowa