Лінійна та Логістична регресія
На цьому уроці розберемо базові принципи лінійної та логістичної регресії. З нуля реалізуємо обидва алгоритми, детально проаналізуємо градієнтний та стохастичний градієнтний спуск, евклідову норму, а також усі ключові компоненти моделей, щоб чітко розуміти, як і чому вони працюють.
Код і результати
Опублікована версія після 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))
)Рев’ю спільноти
Прийнято, інших правок немає, можна мерджати.
