Линейные модели: регрессия и классификация
Обучайте модели линейной и логистической регрессии.
«Линейные модели: регрессия и классификация» — бесплатный урок 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]])) # ~36SGDClassifier и 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 — локальная установка не требуется.
Все уроки этого курса
- API scikit-learn: fit, transform, predict
- Линейные модели: регрессия и классификация
- Модели на основе деревьев: деревья решений и случайные леса
- Оценка моделей и перекрёстная проверка