← Назад к вопросам

Как решал задачу нейрорегрессии?

2.0 Middle🔥 141 комментариев
#Глубокое обучение#Опыт и проекты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Архитектура нейронной сети для регрессии

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Dense(128, activation="relu", input_shape=(X_train.shape[1],)),
    layers.Dropout(0.2),
    layers.Dense(64, activation="relu"),
    layers.Dropout(0.2),
    layers.Dense(32, activation="relu"),
    layers.Dense(1)  # Выходной слой БЕЗ активации!
])

model.compile(
    optimizer="adam",
    loss="mse",  # Mean Squared Error для регрессии
    metrics=["mae"]
)

history = model.fit(
    X_train, y_train,
    validation_split=0.2,
    epochs=100,
    batch_size=32
)

Ключевое отличие: выходной слой имеет 1 нейрон БЕЗ функции активации.

Функции потерь

MSE (Mean Squared Error)

# MSE = (1/n) * sum((y_true - y_pred)^2)
# Штрафует большие ошибки сильнее
loss = keras.losses.MeanSquaredError()

MAE (Mean Absolute Error)

# MAE = (1/n) * sum(|y_true - y_pred|)
# Робастнее к выбросам
loss = keras.losses.MeanAbsoluteError()

Huber Loss

# Комбинация MSE и MAE
# MSE для малых ошибок, MAE для больших
loss = keras.losses.Huber(delta=1.0)

Нормализация данных

Критически важна для нейронных сетей:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# Для y тоже нормализуем
y_scaler = StandardScaler()
y_train_scaled = y_scaler.fit_transform(y_train.reshape(-1, 1)).flatten()

Регуляризация

model = keras.Sequential([
    layers.Dense(128, activation="relu",
                 kernel_regularizer=keras.regularizers.l2(0.001)),
    layers.Dropout(0.3),
    layers.Dense(64, activation="relu",
                 kernel_regularizer=keras.regularizers.l2(0.001)),
    layers.Dropout(0.3),
    layers.Dense(1)
])

# Early stopping
early_stopping = keras.callbacks.EarlyStopping(
    monitor="val_loss",
    patience=10,
    restore_best_weights=True
)

model.fit(X_train_scaled, y_train_scaled, callbacks=[early_stopping])

Оценка модели

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

y_pred = model.predict(X_test_scaled)
y_pred_original = y_scaler.inverse_transform(y_pred)

mse = mean_squared_error(y_test, y_pred_original)
mae = mean_absolute_error(y_test, y_pred_original)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred_original)

print(f"MAE: {mae:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"R²: {r2:.4f}")

Архитектуры для разных типов данных

Табличные данные

model = keras.Sequential([
    layers.Dense(64, activation="relu", input_shape=(n_features,)),
    layers.Dropout(0.2),
    layers.Dense(32, activation="relu"),
    layers.Dense(1)
])

Временные ряды (LSTM)

model = keras.Sequential([
    layers.LSTM(50, activation="relu", input_shape=(time_steps, n_features)),
    layers.Dropout(0.2),
    layers.Dense(25, activation="relu"),
    layers.Dense(1)
])

Изображения (CNN)

model = keras.Sequential([
    layers.Conv2D(32, (3, 3), activation="relu", input_shape=(height, width, 3)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation="relu"),
    layers.Flatten(),
    layers.Dense(64, activation="relu"),
    layers.Dense(1)
])

Практические советы

  1. Нормализуй данные — это first priority
  2. Выбери loss функцию: MSE для стандартной регрессии, Huber для выбросов
  3. Начни с простой архитектуры (2-3 слоя)
  4. Early Stopping спасает от переобучения
  5. Dropout + L2 регуляризация — мощная комбинация
  6. Сравни с baseline (линейная регрессия)
  7. Мониторь train/val loss — если val растёт, переобучение

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

Как решал задачу нейрорегрессии? | PrepBro