0Pricing
Python Academy · Урок

Линейные модели: регрессия и классификация

Обучайте модели линейной и логистической регрессии.

«Линейные модели: регрессия и классификация» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Линейная регрессия

LinearRegression аппроксимирует прямую (или гиперплоскость), минимизируя ошибку методом наименьших квадратов.

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)

Коэффициенты модели

После обучения изучите coef_ (веса признаков) и 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_)  # ~0

Регрессия Ridge и Lasso

Ridge (L2) и Lasso (L1) добавляют регуляризацию, чтобы предотвратить переобучение. Параметр alpha управляет силой регуляризации.

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)

Логистическая регрессия

LogisticRegression — линейный классификатор для двоичных задач и задач с несколькими классами. Несмотря на название, он предсказывает вероятности классов.

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)))

Многоклассовая логистическая регрессия

Задайте multi_class="multinomial" или используйте вариант OvR по умолчанию (один против остальных) для трёх и более классов.

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))

Масштабирование признаков для линейных моделей

Всегда масштабируйте признаки для линейных моделей, особенно при использовании регуляризации. Немасштабированные признаки приводят к существенно различающимся и вводящим в заблуждение штрафам.

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))

Кривая обучения

Кривая обучения показывает, как производительность модели улучшается с увеличением объёма обучающих данных; это полезно для диагностики недообучения и переобучения.

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))

Оценка R² для регрессии

r2_score измеряет долю объяснённой дисперсии. Значение 1.0 означает идеальный результат, а 0 — что модель не лучше предсказания среднего значения.

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)))

Полиномиальные признаки

Используйте PolynomialFeatures, чтобы с помощью линейной модели аппроксимировать нелинейные зависимости.

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]]))   # ~36

SGDClassifier и SGDRegressor

Стохастический градиентный спуск позволяет работать с очень большими наборами данных, где стандартные решатели работают слишком медленно.

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))

Траектории регуляризации

Изменяйте alpha по сетке с помощью RidgeCV/LassoCV, которые автоматически выбирают лучшее значение alpha посредством кросс-валидации.

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_)

Быстрая проверка

В чём заключается ключевое различие между регрессиями Ridge и Lasso?

Повторение

Используйте LinearRegression для регрессии, а LogisticRegression — для классификации. Добавляйте Ridge/Lasso для регуляризации. Всегда масштабируйте признаки. Используйте PolynomialFeatures для нелинейных задач. Оценивайте модели с помощью r2_score (регрессия) или accuracy_score (классификация).

Часто задаваемые вопросы

Урок «Линейные модели: регрессия и классификация» бесплатный?

Да — полный текст урока «Линейные модели: регрессия и классификация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Линейные модели: регрессия и классификация»?

Обучайте модели линейной и логистической регрессии. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Линейные модели: регрессия и классификация»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. API scikit-learn: fit, transform, predict
  2. Линейные модели: регрессия и классификация
  3. Модели на основе деревьев: деревья решений и случайные леса
  4. Оценка моделей и перекрёстная проверка
← Назад к Python Academy