TelegramПерейти в канал
Ярослав Стецюк
Merged · Machine Learning

Лінійна та Логістична регресія

На цьому уроці розберемо базові принципи лінійної та логістичної регресії. З нуля реалізуємо обидва алгоритми, детально проаналізуємо градієнтний та стохастичний градієнтний спуск, евклідову норму, а також усі ключові компоненти моделей, щоб чітко розуміти, як і чому вони працюють.

Код і результати

Опублікована версія після Merge. Результати збережені автором; код на цій сторінці не запускається.

implementation.py · v2
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.metrics import mean_squared_error
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, StandardScaler

## Використовуємо для тренування
train_data = pd.read_csv("sample_data/california_housing_train.csv")

## Використання для оцінювання
test_data = pd.read_csv("sample_data/california_housing_test.csv")

train_data

scaler = StandardScaler()

train_X_scaled = scaler.fit_transform(train_X)
test_X_scaled = scaler.transform(test_X)

## Натренована 1 ознака для простої лінійної регресії
train_X_1scaled = train_X_scaled[:, [0]]
test_X_1scaled = test_X_scaled[:, [0]]

## Лінійна регресія з однією ознакою
model_simple = LinearRegression()
model_simple.fit(train_X_1scaled, train_y)  ## Тренуємо модель
pred_simple = model_simple.predict(test_X_1scaled)  ## Прогнозування даних
print(
    "Simple Linear Regression (1 feature) RMSE:",
    np.sqrt(mean_squared_error(test_y, pred_simple)),
)

## Лінійна регресія з багатьма ознаками
model_multi = LinearRegression()
model_multi.fit(train_X_scaled, train_y)  ## Тренуємо модель
pred_multi = model_multi.predict(test_X_scaled)  ## Прогнозування
print(
    "Multiple Linear Regression RMSE:",
    np.sqrt(mean_squared_error(test_y, pred_multi)),
)

## Поліноміальна регресія 2-го ступеня
model_poly2 = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
model_poly2.fit(train_X_scaled, train_y)  ## Тренуємо модель
pred_poly2 = model_poly2.predict(test_X_scaled)  ## Прогноз
print(
    "Polynomial Regression (Degree 2) RMSE:",
    np.sqrt(mean_squared_error(test_y, pred_poly2)),
)

## Поліноміальна регресія 3-го ступеня
model_poly3 = make_pipeline(PolynomialFeatures(degree=3), LinearRegression())
model_poly3.fit(train_X_scaled, train_y)  ## Тренування моделі
pred_poly3 = model_poly3.predict(test_X_scaled)  ## Прогноз
print(
    "Polynomial Regression (Degree 3) RMSE:",
    np.sqrt(mean_squared_error(test_y, pred_poly3)),
)

## Логістична регресія (для порівняння — див. пояснення нижче)
model_log = LogisticRegression(max_iter=1000)
model_log.fit(train_X_scaled, train_y)  ## Навчаємо
pred_log = model_log.predict(test_X_scaled)  ## Прогноз
print(
    "Logistic Regression RMSE:", np.sqrt(mean_squared_error(test_y, pred_log))
)

Рев’ю спільноти

Anar LavrenovApprove

Прийнято, інших правок немає, можна мерджати.